枚举Window窗口、置顶、窗口对应进程

1、枚举Window窗口、获取当前激活窗口、根据窗口句柄获取获取标题栏文本

#include 
#include 

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 
#include 

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

 

你可能感兴趣的:(Windows,API)