枚舉Window窗口、置頂、窗口對應進程

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

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章