社区
Windows SDK/API
帖子详情
分不够再加!如何创建系统级模式窗体
VirtualDesktop
2006-06-23 03:20:42
就是要求这个窗体象点击 开始-关机 的关机对话框一样,阻止用户对windows其他部分进行操作
...全文
311
7
打赏
收藏
分不够再加!如何创建系统级模式窗体
就是要求这个窗体象点击 开始-关机 的关机对话框一样,阻止用户对windows其他部分进行操作
复制链接
扫一扫
分享
转发到动态
举报
写回复
配置赞助广告
用AI写文章
7 条
回复
切换为时间正序
请发表友善的回复…
发表回复
打赏红包
VirtualDesktop
2006-06-25
打赏
举报
回复
晕~我的意思 是那个Tab的问题可以忽略~
cczlp
2006-06-23
打赏
举报
回复
本是好心提醒的, 既然lz评为"吹毛求疵", 那只好闪了
「已注销」
2006-06-23
打赏
举报
回复
关注...
VirtualDesktop
2006-06-23
打赏
举报
回复
我要的是不能点击系统其他部分,Showmodel可以我就不来问了
Alt+Tab以后关机对话框就回取消的,你有点吹毛求疵cczlp
daydayup234
2006-06-23
打赏
举报
回复
不会是简单的showmodel吧
cczlp
2006-06-23
打赏
举报
回复
谁说开始-关机 的关机对话框禁止用户的其它操作了?
用ALT+TAB试试.
海嵌
2006-06-23
打赏
举报
回复
你可以参考
void __fastcall TForm1::BitBtn1Click(TObject *Sender)
{
HDESK DesktopHandle;
bool Result;
SECURITY_DESCRIPTOR sd;
SECURITY_ATTRIBUTES sa;
LPSECURITY_ATTRIBUTES lpsa = NULL;
OSVERSIONINFO osv;
osv.dwOSVersionInfoSize = sizeof(osv);
GetVersionEx(&osv);
if(osv.dwPlatformId == VER_PLATFORM_WIN32_NT) //NT系统需要指定lpsa参数
{
InitializeSecurityDescriptor(&sd, SECURITY_DESCRIPTOR_REVISION);
SetSecurityDescriptorDacl(&sd, true, NULL, false);
sa.nLength = sizeof(SECURITY_ATTRIBUTES);
sa.bInheritHandle = true;
sa.lpSecurityDescriptor = &sd;
lpsa = &sa;
}
STARTUPINFO si;
memset(&si, 0, sizeof(STARTUPINFO));
si.cb = sizeof(STARTUPINFO);
si.dwFlags = STARTF_USESHOWWINDOW |STARTF_USESTDHANDLES;
si.wShowWindow = SW_SHOW;
si.lpDesktop = "MyDesktop";
PROCESS_INFORMATION pi; //尝试打开特定的桌面
DesktopHandle = OpenDesktop("MyDesktop",DF_ALLOWOTHERACCOUNTHOOK,
true,DESKTOP_CREATEMENU | DESKTOP_CREATEWINDOW |
DESKTOP_ENUMERATE | DESKTOP_HOOKCONTROL |
DESKTOP_JOURNALPLAYBACK |
DESKTOP_JOURNALRECORD | DESKTOP_READOBJECTS |
DESKTOP_SWITCHDESKTOP | DESKTOP_WRITEOBJECTS);
if(!DesktopHandle) //打开失败则创建该桌面
{
DesktopHandle = CreateDesktop("MyDesktop",NULL,NULL,
DF_ALLOWOTHERACCOUNTHOOK,
DESKTOP_CREATEMENU | DESKTOP_CREATEWINDOW |
DESKTOP_ENUMERATE | DESKTOP_HOOKCONTROL |
DESKTOP_JOURNALPLAYBACK |
DESKTOP_JOURNALRECORD | DESKTOP_READOBJECTS |
DESKTOP_SWITCHDESKTOP | DESKTOP_WRITEOBJECTS,
lpsa);
if(!DesktopHandle)
{
ShowMessage("DeskTop Create Error!");
}
Result = false; //特定桌面不存在,当前进程肯定没有运行在特定桌面
}
else //特定的桌面存在,则判断当前的Application是否运行于该桌面
{
STARTUPINFO SI;
GetStartupInfo(&SI); //获取启动信息
if(AnsiString(SI.lpDesktop).Pos("MyDesktop")) //比较Desktop参数
{
Result = true; //程序运行在正确(特定的'MyDeskTop')的桌面
}
else
{
Result = false; //程序没有运行在特定的桌面
}
}
if(Result == false && DesktopHandle)//特定的桌面存在,并且当前进程不在特定的桌面
{//则创建当前进程的一个新的运行副本,同时指定运行在特定的桌面
if( CreateProcess(NULL, Application->ExeName.c_str(),
lpsa, lpsa, true, 0, 0, 0, &si, &pi))
{
SwitchDesktop(DesktopHandle); //切换到特定的桌面,否则新的程序进程将看不到
}
else
{
CloseDesktop(DesktopHandle);
ShowMessage("Process Creat Error!");
}
}
CloseDesktop(DesktopHandle);
}
软件界面设计工具_3款合集
那再看看你若使用UIDesigner制作出来的效果:最终输出的是一个EXE可执行文件(见图二左上角),双击运行后就会出现一个与最终实现效果完全一致的
窗体
(见图二右)。另外,它还是一个具有响应动作的真实原型,例如...
vc++ 应用源码包_1
详细讲解了Crypt++的加密解密的使用以及其它的加密解密方法(例如base64加解密、哈希加解密以及其它的文件加解密),
分
静态库和动态库方法。 JSCalls_demo js调用的演示源码 树控件拖动 演示了在树控件中来回拖动...
vc++ 应用源码包_2
详细讲解了Crypt++的加密解密的使用以及其它的加密解密方法(例如base64加解密、哈希加解密以及其它的文件加解密),
分
静态库和动态库方法。 JSCalls_demo js调用的演示源码 树控件拖动 演示了在树控件中来回拖动...
vc++ 应用源码包_3
详细讲解了Crypt++的加密解密的使用以及其它的加密解密方法(例如base64加解密、哈希加解密以及其它的文件加解密),
分
静态库和动态库方法。 JSCalls_demo js调用的演示源码 树控件拖动 演示了在树控件中来回拖动...
vc++ 应用源码包_6
详细讲解了Crypt++的加密解密的使用以及其它的加密解密方法(例如base64加解密、哈希加解密以及其它的文件加解密),
分
静态库和动态库方法。 JSCalls_demo js调用的演示源码 树控件拖动 演示了在树控件中来回拖动...
Windows SDK/API
1,221
社区成员
8,136
社区内容
发帖
与我相关
我的任务
Windows SDK/API
C++ Builder Windows SDK/API
复制链接
扫一扫
分享
社区描述
C++ Builder Windows SDK/API
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章