1、枚举Window窗口、获取当前激活窗口、根据窗口句柄获取获取标题栏文本
#include <stdio.h>
#include <Windows.h>
char g_szWindowName[MAX_PATH]={0};
BOOL CALLBACK EnumWindowsProc(HWND hwnd, LPARAM lParam)
{
GetWindowTextA(hwnd,g_szWindowName,MAX_PATH);
// 当前窗口是否具有WS_VISIBLE风格
if( IsWindowVisible(hwnd) )
printf("Windows:%x %s\n",hwnd,g_szWindowName);
return TRUE;
}
int main()
{
HWND hWindow = GetForegroundWindow();
GetWindowTextA(hWindow,g_szWindowName,MAX_PATH);
printf("Windows:%s\n",g_szWindowName);
// 执行一次调用N次回调函数(有多少窗口就调用多少次)
EnumWindows(EnumWindowsProc, 0);
system("pause");
}
有尝试使用如下代码枚举窗口
HWND hwnd=FindWindowA(NULL,NULL);
while( hwnd!=NULL )
{
GetWindowTextA(hwnd, text, 256);
printf("Window:%x %s\n",hwnd,text);
hwnd=FIndWindowA(NULL,NULL);
}
失败原因:FindWindowA(NULL,NULL)函数不是枚举、遍历,运行会发现大部分返回的hwnd值是相同的。
2、窗口置顶(一边看视频一边聊微信)
#include <stdio.h>
#include <Windows.h>
int main()
{
HWND hwnd=FindWindowA(NULL,"Process Monitor - Sysinternals: www.sysinternals.com");
while( hwnd!=INVALID_HANDLE_VALUE)
{
SetWindowPos(hwnd, HWND_TOPMOST, 0, 0, 0, 0, SWP_NOMOVE|SWP_NOSIZE|SWP_SHOWWINDOW);
// SetForegroundWindow(hwnd)不仅会使窗口置顶显示,还会获取焦点,影响操作其他窗口
}
return 0;
}
3、通过窗口句柄可以获取对应的进程ID
GetWindowThreadProcessId(hwnd, &dwPID);