windows 桌面/desktop 及 MessageBox(MB_TOPMOST)
2016-06-10 10:35
615 查看
以下基于win7:
windows desktop:
1: EnumWindows 不会列举跨desktop的窗口, (跨desktop即非线程当前desktop)
2: SendMessage/GetWindowText等 对跨desktop窗口进行操作时失败
3: EnumDesktops->EnumDesktopWindows->GetWindowText等 可以跨desktop, 但极易造成死锁. 似乎GetWindowText使用了SendMessage, 而SendMessage当对方未回复时等待
4: SetThreadDesktop(hdesk)后,hdesk的关闭,必须等到再次调用SetThreadDesktop(其它hdesk)后才能成功CloseDesktop
5: 干净线程中调用MessageBox(hwnd=NULL, .., .., MB_TOPMOST)跨桌面。 在切换桌面时,自动切换
6: MessageBox(hwnd=NULL, .., .., MB_TOPMOST);MB_TOPMOST对于每个hwnd, 一次只会生成一个MessageBox, 在此MessageBox未关闭前,会将请求进行记录,关闭后,根据记录生成MessageBox。 如果hwnd==NULL,那么全局(仅限于同一个会话?)只生成一个,记录,关闭后再生成
例: 线程{MessageBoxW(NULL, L"3", L"4", MB_TOPMOST); OutputDebugString(L"W");}; 会不断打印信息,而MessageBoxW只有一个。即使在进程关闭后,MessageBoxW仍然会按请求记录生成(似乎请求记录数量有最大值限制)。
windows desktop:
1: EnumWindows 不会列举跨desktop的窗口, (跨desktop即非线程当前desktop)
2: SendMessage/GetWindowText等 对跨desktop窗口进行操作时失败
3: EnumDesktops->EnumDesktopWindows->GetWindowText等 可以跨desktop, 但极易造成死锁. 似乎GetWindowText使用了SendMessage, 而SendMessage当对方未回复时等待
4: SetThreadDesktop(hdesk)后,hdesk的关闭,必须等到再次调用SetThreadDesktop(其它hdesk)后才能成功CloseDesktop
5: 干净线程中调用MessageBox(hwnd=NULL, .., .., MB_TOPMOST)跨桌面。 在切换桌面时,自动切换
6: MessageBox(hwnd=NULL, .., .., MB_TOPMOST);MB_TOPMOST对于每个hwnd, 一次只会生成一个MessageBox, 在此MessageBox未关闭前,会将请求进行记录,关闭后,根据记录生成MessageBox。 如果hwnd==NULL,那么全局(仅限于同一个会话?)只生成一个,记录,关闭后再生成
例: 线程{MessageBoxW(NULL, L"3", L"4", MB_TOPMOST); OutputDebugString(L"W");}; 会不断打印信息,而MessageBoxW只有一个。即使在进程关闭后,MessageBoxW仍然会按请求记录生成(似乎请求记录数量有最大值限制)。
相关文章推荐
- 如何重装TCP/IP协议
- Windows 8 官方高清壁纸欣赏与下载
- 谁是桌面王者?Win PK Linux三大镇山之宝
- 对《大家都在点赞 Windows Terminal,我决定给你泼一盆冷水》一文的商榷
- Windows Clang开发环境备忘
- 从Windows系统下访问Linux分区相关软件
- 对《大家都在点赞 Windows Terminal,我决定给你泼一盆冷水》一文的商榷
- Windows下搭建本地SVN服务器
- 使用Windows原生命令一键清空剪贴板
- windows用windeployqt发布qt quick application程序
- 利用开源软件打造自己的全功能远程工具
- Windows 8虚拟机不能全屏的解决方法
- Visual Studio 2012 示例代码浏览器 - 数以千计的开发示例近在手边,唾手可得
- Visual Studio 2012 示例代码浏览器 - 数以千计的开发示例近在手边,唾手可得
- 微软镜像下载
- windows server域用户提升到本地更高权限组中的方法
- 使用命令修改注册表键值及权限