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

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

拜乔布斯

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值