如何枚举 Windows 顶级桌面窗口?
bool is_top_level_window(HWND hwnd) {
if (!IsWindow(hwnd)) return false;
DWORD dw_style = GetWindowLongPtr(hwnd, GWL_STYLE);
DWORD dw_exstyle = GetWindowLongPtr(hwnd, GWL_EXSTYLE);
DWORD includes = WS_CHILDWINDOW;
DWORD excludes = WS_VISIBLE /*| WS_MINIMIZEBOX*/;
if ((dw_style & includes) != 0 || (dw_style & excludes) != excludes)
return false;
includes = WS_EX_TOOLWINDOW | WS_EX_NOREDIRECTIONBITMAP;
excludes = 0;
if ((dw_exstyle & includes) != 0 || (dw_exstyle & excludes) != excludes)
return false;
if (dw_style & WS_POPUP) {
if (GetParent(hwnd) != NULL) {
excludes = WS_EX_OVERLAPPEDWINDOW;
if ((dw_exstyle & excludes) != excludes) {
return false;
}
}
}
return true;
}
BOOL CALLBACK EnumWindowProc(HWND hwnd, LPARAM lParam) {
if (is_top_level_window(hwnd)) {
char buff[1024] = { 0 };
buff[GetWindowTextA(hwnd, buff, _countof(buff))] = '\0';
DWORD processId = 0;
GetWindowThreadProcessId(hwnd, &processId);
printf("%08X - %08X - %s\n", processId, hwnd, buff);
}
return TRUE;
}
int enum_windows() {
// 获取当前桌面句柄,无需释放
HDESK hDesk = GetThreadDesktop(GetCurrentThreadId());
printf("PID HWND Title\n");
return EnumDesktopWindows(hDesk, EnumWindowProc, 0) ? 0 : -1;
}
int main()
{
enum_windows();
getchar();
return 0;
}
如何枚举 Windows 顶级桌面窗口?的更多相关文章
- Cocos2dx集成于windows桌面窗口程序的步骤
2D游戏需要做编辑器,而编辑器总是希望可以复用游戏中的逻辑来运行场景试看效果. 对于cocos2dx开发的程序,这个需求可以描述为: 实现一种方法,在桌面窗口程序中的某个控件上显示cocos2dx的场 ...
- windows 触发桌面图标布局保存
问题: 项目原有的一套结构由于引进了一个磁盘套件,类似于关闭系统的explorer.exe进程,进入到他所维护的explorer.exe中.于是出现了当退出磁盘的时候没有保存好桌面布局信息导致下次进入 ...
- windows之桌面程序引导功能
经常使用windows系统的同学可能都会遇到这样一种情况,刚按照完的应用程序,可能会在桌面产生一个提示信息,指示当前快捷方式可以使用了,并给出相应的文字说明,指示该快捷方式的功能.那么大家有没有考虑过 ...
- 8 款macOS 分屏应用让你的桌面窗口不再乱糟糟
有时我们想在 Mac 屏幕左边开一个 Word,右侧放一个参考资料:有时我们想把 GTD 应用放在屏幕一角,随时查看.可是,Mac 原生窗口管理不够人性化,总需要用户手动把窗口调整到合适的尺寸与位置. ...
- [No0000C7]windows 10桌面切换快捷键,win10
windows 10桌面切换快捷键:Ctrl+Win+←/→ 切换窗口:Alt+Tab(不是新的,但任务切换界面改进)任务视图:Win+Tab(松开键盘界面不会消失)创建新的虚拟桌面:Win+Ctrl ...
- Windows运行机理——窗口和句柄
Windows运行机理这系列文章都是来至于<零基础学Qt4编程>——吴迪,个人觉得写得很好,所以进行了搬运和个人加工 1. 窗口 窗口是Windows应用程序中一个非常重要的元素,一个Wi ...
- Windows 7桌面显示图标窗口句柄的获取
在windows XP时代,我们获取桌面图标窗口的句柄往往用一下语句: HWND hwndParent = ::FindWindow( "Progman", "Progr ...
- Linux下通过rdesktop连接Windows远程桌面
rdesktop是linux下支持Windows远程桌面连接的客户端程序,在linux系统下可通过它远程访问Windows桌面,支持多种版本.rdesktop是sourceforge下支持GPL协议的 ...
- 本地Windows远程桌面连接阿里云Ubuntu服务器
本地Windows远程桌面连接阿里云Ubuntu 16.04服务器: 1.目的:希望通过本地的Windows远程桌面连接到阿里云的Ubuntu服务器,通过远程桌面图形界面的方式操作服务器. 2.条件: ...
随机推荐
- MaterialUp 官方client源代码
Material Design MaterialUp 官方client源代码 https://github.com/jariz/MaterialUp
- Android startActivities()的使用
startActivities()和startActivity类似,也是界面跳转: Intent[] intents = new Intent[2]; intents[0] = new Intent( ...
- Failed to add reference to 'System.Net.Http'. Please make sure that it is in the Global Assembly Cache.
关闭VS再来就好了
- 下载The Swift Programming Language.mobi版
下载 The Swift Programming Language.mobi 下载 http://download.csdn.net/detail/swifttrain/7444501
- YUYV格式到RGB格式的转换
为什么YUYV格式要转到RGB格式,视频的显示调用的多数API都是基于RGB格式,所以需要进行格式的转换. YUYV格式如下: Y0U0Y1V0 Y2U1Y3V1.......... 说明:一个Y代表 ...
- ZooKeeper_基础知识学习
ZooKeeper是Hadoop的开源子项目(Google Chubby的开源实现),它是一个针对大型分布式系统的可靠协调系统,提供的功能包括:配置维护.命名服务.分布式同步.组服务等. Zookee ...
- 14. First Position of Target 【easy】
14. First Position of Target [easy] For a given sorted array (ascending order) and a targetnumber, f ...
- URL浅谈
URL中的锚 URL中的锚就是#,语法: #foo 其中定位锚的方式有2种,id和name属性都可以定位锚. 例子: <div name='top'>top</div>或者&l ...
- 推荐个强大的任务管理器-Process Hacker
软件主页及下载: http://processhacker.sourceforge.net/index.php 之前一直用process explorer 功能一样强大,但是process hacke ...
- App打包上架流程(iOS转)
由于苹果的机制,在非越狱机器上安装应用必须通过官方的Appstore, 开发者开发好应用后上传Appstore,也需要通过审核等环节. AppCan作为一个跨主流平台的一个开发平台,也对ipa包上传A ...