获取任务栏打开程序窗口是许多程序需要实现的功能之一,下面简要介绍一下C++如何获取任务栏打开程序窗口。
一、获取窗口句柄
获取窗口句柄是许多操作的第一步,C++获取窗口句柄的方法如下:
HWND hwndWindow = ::FindWindow(NULL, TEXT("窗口标题"));
该方法通过窗口的标题查找窗口句柄的,其中第一个参数为类名,传入NULL表示不限制类名;第二个参数为窗口标题,需要传入窗口的具体名称。如果窗口名称为空,可以传入NULL。
二、获取窗口类名
获取窗口类名和窗口标题一样也是非常有用的,C++获取窗口类名的方法如下:
TCHAR szClassName[MAX_PATH];
::GetClassName(hwndWindow, szClassName, MAX_PATH);
该方法通过窗口句柄获取窗口类名,其中第一个参数为窗口句柄,第二个参数为缓冲区,第三个参数为缓冲区长度。
三、获取窗口进程信息
获取窗口进程信息也是很常见的操作,C++获取窗口进程信息的方法如下:
DWORD dwProcessId;
HANDLE hProcess;
::GetWindowThreadProcessId(hwndWindow, &dwProcessId);
hProcess = ::OpenProcess(PROCESS_QUERY_INFORMATION | PROCESS_VM_READ, FALSE, dwProcessId);
该方法通过窗口句柄获取窗口所在进程的ID,然后通过OpenProcess打开该进程句柄,然后就可以得到许多该进程的信息了。
示例一:获取文件资源管理器窗口句柄
下面给出一个获取文件资源管理器窗口句柄的示例:
HWND GetExplorerHwnd()
{
HWND hwndWindow = ::FindWindow(NULL, TEXT("资源管理器"));
if (hwndWindow != NULL)
{
TCHAR szClassName[MAX_PATH];
::GetClassName(hwndWindow, szClassName, MAX_PATH);
if (_tcscmp(szClassName, TEXT("CabinetWClass")) == 0)
{
return hwndWindow;
}
}
HWND hwndChild = ::FindWindowEx(NULL, NULL, TEXT("WorkerW"), NULL);
while (hwndChild != NULL)
{
TCHAR szClassName[MAX_PATH];
::GetClassName(hwndChild, szClassName, MAX_PATH);
if (_tcscmp(szClassName, TEXT("CabinetWClass")) == 0)
{
return hwndChild;
}
hwndChild = ::FindWindowEx(NULL, hwndChild, TEXT("WorkerW"), NULL);
}
return NULL;
}
该代码先通过窗口标题获取文件资源管理器的窗口句柄,如果未找到,则遍历所有窗口的子窗口,查找CabinetWClass类窗口,并返回其句柄。
示例二:获取记事本进程信息
下面给出一个获取记事本进程信息的示例:
void GetNotepadProcessInfo()
{
HWND hwndWindow = ::FindWindow(TEXT("Notepad"), NULL);
if (hwndWindow != NULL)
{
DWORD dwProcessId;
HANDLE hProcess;
::GetWindowThreadProcessId(hwndWindow, &dwProcessId);
hProcess = ::OpenProcess(PROCESS_QUERY_INFORMATION | PROCESS_VM_READ, FALSE, dwProcessId);
if (hProcess)
{
TCHAR szFilePath[MAX_PATH];
if (::GetModuleFileNameEx(hProcess, 0, szFilePath, MAX_PATH))
{
printf("Process file path: %s\n", szFilePath);
}
else
{
printf("Failed to get process file path!\n");
}
}
else
{
printf("Open process failed!\n");
}
}
else
{
printf("Notepad window not found!\n");
}
}
该代码通过窗口标题获取记事本的窗口句柄,然后获取该窗口所在进程的ID,并打开该进程句柄。随后再通过GetModuleFileNameEx函数获取该进程的文件路径。
以上就是C++获取任务栏打开程序窗口的简要攻略,希望对大家有所帮助。
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:C++获取任务栏打开程序窗口示例 - Python技术站