我用下面这个函数得到HWND对应的可执行文件名
CString CMainApp::GetFileName(HWND hWnd)
{
DWORD dwProcessID;
GetWindowThreadProcessId(hWnd,&dwProcessID);
HANDLE hSnap=CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS, 0);
PROCESSENTRY32W pe; pe.dwSize = sizeof(pe);
BOOL bNext=Process32FirstW(hSnap, &pe);
while(bNext)
{
if(pe.th32ProcessID == dwProcessID) return pe.szExeFile;
bNext=Process32NextW(hSnap, &pe);
}
CloseHandle(hSnap);
return "";
}我用的是win2000,如果HWND对应的是英文可执行文件例如kaoqin.exe,返回正确,但是如果HWND对应的是中文可执行文件名例如 考勤管理系统.exe得到的好像是空,但是察看pe.szExeFile的字节分别是3,228,161,6,251,223,46,101,120,101问题出现在哪里,请执教怎样才能得到正确的“考勤管理系统.exe”字符串
CString CMainApp::GetFileName(HWND hWnd)
{
DWORD dwProcessID;
GetWindowThreadProcessId(hWnd,&dwProcessID);
HANDLE hSnap=CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS, 0);
PROCESSENTRY32W pe; pe.dwSize = sizeof(pe);
BOOL bNext=Process32FirstW(hSnap, &pe);
while(bNext)
{
if(pe.th32ProcessID == dwProcessID) return pe.szExeFile;
bNext=Process32NextW(hSnap, &pe);
}
CloseHandle(hSnap);
return "";
}我用的是win2000,如果HWND对应的是英文可执行文件例如kaoqin.exe,返回正确,但是如果HWND对应的是中文可执行文件名例如 考勤管理系统.exe得到的好像是空,但是察看pe.szExeFile的字节分别是3,228,161,6,251,223,46,101,120,101问题出现在哪里,请执教怎样才能得到正确的“考勤管理系统.exe”字符串
PROCESSENTRY32W pe;
Process32FirstW
Process32NextW
都去掉W?我现在程序却省是ANSI我没有定义Unicode
pe.szExeFile的字节变成了3,63,63,6,63,63,46,101,120,101仍然不符合“考勤管理系统.exe”字符串
CString CChaoDunApp::GetGrabFileName(HWND hWnd)
{
DWORD dwProcessID;
GetWindowThreadProcessId(hWnd,&dwProcessID);
HANDLE hSnap=CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS, 0);
PROCESSENTRY32 pe; pe.dwSize =sizeof(PROCESSENTRY32W);
BOOL bNext=Process32First(hSnap, &pe);
while(bNext)
{
if(pe.th32ProcessID == dwProcessID)
{
CloseHandle(hSnap);
return pe.szExeFile;
}
bNext=Process32Next(hSnap, &pe);
}
CloseHandle(hSnap);
return "";
}
记得#include <TCHAR.h>
CString CMainApp::GetFileName(HWND hWnd)
{
DWORD dwProcessID;
GetWindowThreadProcessId(hWnd,&dwProcessID);
HANDLE hSnap=CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS, 0);
PROCESSENTRY32W pe; pe.dwSize = sizeof(pe);
BOOL bNext=Process32First(hSnap, &pe);
while(bNext)
{
if(pe.th32ProcessID == dwProcessID)
return CString(pe.szExeFile);
bNext=Process32Next(hSnap, &pe);
}
CloseHandle(hSnap);
return _T("");
}hWnd
其实你可以通过GetModuleFile取得当前hwnd对应的文件名
去掉之后返回的是"????.exe",好像是乱码。