我想创建一个程序来获取创建一个打开窗口的程序的名称:
#include <iostream>
using namespace std;
#include <windows.h>
#include <Psapi.h>
#pragma comment(lib, "Psapi.lib")
int main()
{
system("color 1f");
DWORD dwProcessId;
DWORD dwThreadId ;
while(1)
{
Sleep(2000);
HWND hForg = GetForegroundWindow();
dwThreadId = GetWindowThreadProcessId(hForg, &dwProcessId);
//cout << "Thread Id: " << dwThreadId << endl;
//cout << "Process Id: " << dwProcessId << endl;
DWORD dwDesiredAccess = PROCESS_QUERY_INFORMATION | PROCESS_VM_READ;
bool bInheritHandle = false;
HANDLE hProcess = OpenProcess(dwDesiredAccess,
bInheritHandle, dwProcessId);
if(INVALID_HANDLE_VALUE == hProcess)
cout << "Failed to open process!" << endl;
HMODULE hMod = (HMODULE)GetWindowLongPtr(hForg, GWLP_HINSTANCE);
if(!hMod)
cout << "Null Module!" << endl;
char szModFileName[MAX_PATH];
GetModuleFileNameEx(hProcess, (HMODULE)hMod, szModFileName, MAX_PATH);
char szWindowName[MAX_PATH];
GetWindowText(hForg, szWindowName, MAX_PATH);
cout << "Window Name: " << szWindowName << endl;
cout << "Created by: " << szModFileName << endl << endl;
}
cout << endl << endl << endl;
return 0;
}
当我运行程序时,它可以工作,但它永远不会检索程序的名称,而是检索可视化c ++程序的名称??? !!! 任何人都可以编辑或帮助我的代码。 thnx提前
答案 0 :(得分:0)
INVALID_HANDLE_VALUE
定义为-1
,而OpenProcess如果函数失败则返回NULL。如果给出一个NULL进程句柄,我不知道GetModuleFileNameEx
将会做什么,但如果HMODULE为NULL,则返回当前可执行文件的名称,以便它可以为其他无效输入执行此操作。
根据GetModuleFileNameEx
的MSDN文档,获取进程可执行文件名称的推荐方法是调用GetProcessImageFileName
而不是GetModuleFileNameEx
。您必须先使用OpenProcess
解决问题。