大家好,又见面了,我是你们的朋友全栈君。
HWND FindMainWindow(unsigned int processID)
{
struct HANDLE_DATA {
unsigned int processID;
HWND handle;
} data;
data.processID = processID;
data.handle = 0;
static auto IsMainWindow=[](HWND handle)->BOOL
{
return GetWindow(handle, GW_OWNER) == (HWND)0 && IsWindowVisible(handle);
};
static auto EnumWindowsCallback=[](HWND handle, LPARAM lParam)
{
HANDLE_DATA& data = *(HANDLE_DATA*)lParam;
unsigned long process_id = 0;
GetWindowThreadProcessId(handle, &process_id);
if (data.processID != process_id || !IsMainWindow(handle)) {
return TRUE;
}
data.handle = handle;
return FALSE;
};
EnumWindows(EnumWindowsCallback, (LPARAM)&data);
return data.handle;
}
DWORD GetProcessID(const char *ProcessName)
{
PROCESSENTRY32 pe32;
pe32.dwSize = sizeof(PROCESSENTRY32);
//获取进程快照
HANDLE hProcessSnap = ::CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS, 0);
if (hProcessSnap == INVALID_HANDLE_VALUE)
{
// qDebug("CreateToolhelp32Snapshot 调用失败.");
return -1;
}
//遍历进程快照,轮流显示每个进程的信息
BOOL bMore = ::Process32First(hProcessSnap, &pe32);
while (bMore)
{
// qDebug("进程名称:%ls", pe32.szExeFile); //这里得到的应该是宽字符,用%ls,不然无法正常打印
// qDebug("进程ID:%u", pe32.th32ProcessID);
if ( QString( pe32.szExeFile ) == ( ProcessName ) )
{
qDebug("进程名称:%ls", pe32.szExeFile);
qDebug("进程ID:%u", pe32.th32ProcessID);
qDebug("pcPriClassBase :%u", pe32.pcPriClassBase);
qDebug("th32ParentProcessID :%u", pe32.th32ParentProcessID);
qDebug("cntThreads :%u", pe32.cntThreads);
break;
}
bMore = ::Process32Next(hProcessSnap, &pe32);
}
//不要忘记清除掉snapshot对象
::CloseHandle(hProcessSnap);
return pe32.th32ProcessID;
}
发布者:全栈程序员-用户IM,转载请注明出处:https://javaforall.cn/162554.html原文链接:https://javaforall.cn
【正版授权,激活自己账号】: Jetbrains全家桶Ide使用,1年售后保障,每天仅需1毛
【官方授权 正版激活】: 官方授权 正版激活 支持Jetbrains家族下所有IDE 使用个人JB账号...