您的位置:首页 > 产品设计 > 产品经理

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