进程相关(进程Id获取主窗口)
1.知道進(jìn)程handle 獲取進(jìn)程名稱(chēng)。
PROCESS_INFORMATION* processInfo =(PROCESS_INFORMATION*)pid();
?? HANDLE hProcess =processInfo->hProcess;
?? char buffer[255];
?? ZeroMemory(buffer,255*sizeof(char));
?? GetModuleFileNameExA(hProcess,0,buffer,255*sizeof(char));
2.知道進(jìn)程handle,獲取內(nèi)存使用率
PROCESS_INFORMATION* processInfo = (PROCESS_INFORMATION*)pid();
?? HANDLE hProcess = processInfo->hProcess;
?? PROCESS_MEMORY_COUNTERS mem;
?? mem.cb = sizeof(PROCESS_MEMORY_COUNTERS);
?? if (GetProcessMemoryInfo(hProcess,&mem,sizeof(mem)))
?? {
??? SIZE_T workingMem = mem.WorkingSetSize ;
??? return workingMem;
?? }
3.知道進(jìn)程id獲取,進(jìn)程主窗口,如果有的話
通過(guò)進(jìn)程ID獲得該進(jìn)程主窗口的句柄(來(lái)自CSDN)
??? 一個(gè)進(jìn)程可以擁有很多主窗口,也可以不擁有主窗口,所以這樣的函數(shù)是不存在的,所幸的是,相反的函數(shù)是有的。所以我們可以調(diào)用EnumWindows來(lái)判斷所有的窗口是否屬于這個(gè)進(jìn)程。
一般網(wǎng)絡(luò)上是沒(méi)有這一段的
但是一個(gè)進(jìn)程他可以擁有很多窗口,要判斷哪個(gè)是主窗口,除了判斷進(jìn)程Id之外,還要判斷是否可見(jiàn),因?yàn)槲覀兤匠?吹降拇翱谝话闶强梢?jiàn)的,但有些程序它會(huì)創(chuàng)建好幾個(gè)窗口,主窗口只是其中的一個(gè),其他窗口只是沒(méi)有Show出來(lái)或者只是沒(méi)有大小的窗口,但一樣是頂層窗口,像我試驗(yàn)了記事本,就有3個(gè)頂層窗口,注意不是子窗口。
typedef struct tagWNDINFO
{
DWORD dwProcessId;
HWND hWnd;
} WNDINFO, *LPWNDINFO;
BOOL CALLBACK YourEnumProc(HWND hWnd,LPARAM lParam)
{
DWORD dwProcessId;
GetWindowThreadProcessId(hWnd, &dwProcessId);
LPWNDINFO pInfo = (LPWNDINFO)lParam;
if(dwProcessId == pInfo->dwProcessId)
{
bool isWindowVisible = IsWindowVisible(hWnd);
if(isWindowVisible == true)
{
pInfo->hWnd = hWnd;
return FALSE;
}
}
return TRUE;
}
HWND GetProcessMainWnd(DWORD dwProcessId)
{
WNDINFO wi;
wi.dwProcessId = dwProcessId;
wi.hWnd = NULL;
EnumWindows(YourEnumProc,(LPARAM)&wi);
return wi.hWnd;
}?
如果這個(gè)進(jìn)程沒(méi)有窗口,函數(shù)返回NULL
轉(zhuǎn)載于:https://www.cnblogs.com/MaxWoods/archive/2013/06/09/3130138.html
總結(jié)
以上是生活随笔為你收集整理的进程相关(进程Id获取主窗口)的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: Asp.Net 数据分页
- 下一篇: 《Windows核心编程》学习笔记(9)