枚举窗口,获得窗口的句柄,为什么还是不行?
废话不多说 直接上代码
QString sUGRaf = "ugraf.exe";
DWORD dwUGProcessId = NULL;
dwUGProcessId = kill_process( sUGRaf );
WNDINFO *wi=new WNDINFO;
wi->dwProcessId = dwUGProcessId;//将获取到的进程ID传给结构体
wi->hWnd = NULL;
EnumWindows( EnumWindowsAllProc, (LPARAM)wi );
DWORD kill_process(const QString& sExeName)
{
int rc = -1;
HANDLE hSysSnapshot = NULL;
PROCESSENTRY32 proc;
hSysSnapshot = CreateToolhelp32Snapshot( TH32CS_SNAPPROCESS, 0 );
if ( hSysSnapshot == ( HANDLE )-1 ) return 1;
USES_CONVERSION;
proc.dwSize = sizeof( proc );
if ( Process32First( hSysSnapshot, &proc ) ) {
do {
QString getname = QString( W2A( proc.szExeFile ) );
if ( getname.compare( sExeName, Qt::CaseInsensitive ) == 0 )
return proc.th32ProcessID;
} while ( Process32Next( hSysSnapshot, &proc ) );
}
}
//定义一个进程ID和窗口句柄的结构体
typedef struct tagWNDINFO
{
DWORD dwProcessId;
HWND hWnd;
} WNDINFO, *LPWNDINFO;
BOOL CALLBACK EnumWindowsAllProc(HWND hwnd,LPARAM lParam)
{
/*g_AllWindows.push_back( hwnd );
return TRUE;*/
DWORD dwProcessId;
//通过窗口句柄获取进程ID
GetWindowThreadProcessId(hwnd, &dwProcessId);
LPWNDINFO pInfo = (LPWNDINFO)lParam;
//匹配遍历窗口进程号与通过进程名得到的进程号
if(dwProcessId == pInfo->dwProcessId)
{
pInfo->hWnd = hwnd;//返回找到的窗口句柄
return FALSE;
}
return TRUE;
}