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);