我想打一個程序,獲取創建一個開放的窗口程序的名稱:GetModuleFileNameEx失敗
#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;
}
,當我運行程序它的工作原理,但它永遠不會檢索程序的名稱,而是它檢索visual C++程序的名稱??? !!! 任何人都可以編輯或幫助我的代碼。 thnx
如果進程或模塊句柄爲NULL,爲什麼你的代碼繼續進行,就像沒有錯誤一樣?另外,如果您還沒有這樣做,請在Visual Studio之外運行。 – PaulMcKenzie