进程相关(进程Id获取主窗口)
1.知道進程handle 獲取進程名稱。
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.知道進程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.知道進程id獲取,進程主窗口,如果有的話
通過進程ID獲得該進程主窗口的句柄(來自CSDN)
??? 一個進程可以擁有很多主窗口,也可以不擁有主窗口,所以這樣的函數(shù)是不存在的,所幸的是,相反的函數(shù)是有的。所以我們可以調(diào)用EnumWindows來判斷所有的窗口是否屬于這個進程。
一般網(wǎng)絡上是沒有這一段的
但是一個進程他可以擁有很多窗口,要判斷哪個是主窗口,除了判斷進程Id之外,還要判斷是否可見,因為我們平常看到的窗口一般是可見的,但有些程序它會創(chuàng)建好幾個窗口,主窗口只是其中的一個,其他窗口只是沒有Show出來或者只是沒有大小的窗口,但一樣是頂層窗口,像我試驗了記事本,就有3個頂層窗口,注意不是子窗口。
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;
}?
如果這個進程沒有窗口,函數(shù)返回NULL
轉(zhuǎn)載于:https://www.cnblogs.com/MaxWoods/archive/2013/06/09/3130138.html
總結(jié)
以上是生活随笔為你收集整理的进程相关(进程Id获取主窗口)的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Asp.Net 数据分页
- 下一篇: eclipse tomcat jsp乱码