【轉載】進程,視窗,可執行檔名的相互擷取

來源:互聯網
上載者:User

【轉自】http://blog.donews.com/zwell/articles/37069.aspx 

下面是如何由進程得到視窗標題文字的例子:


typedef struct tagWNDINFO
{
DWORD dwProcId;
HWND hWnd;
} WNDINFO, *LPWNDINFO;

BOOL CALLBACK MyEnumProc(HWND hWnd,LPARAM lParam)
{
DWORD dwProcId;

GetWindowThreadProcessId(hWnd, &dwProcId);

LPWNDINFO pInfo = (LPWNDINFO)lParam;

if(dwProcId == pInfo->dwProcId)
{
pInfo->hWnd = hWnd;
return FALSE;
}

return TRUE;
}

HWND GetProcessMainWnd(DWORD dwProcId)
{
WNDINFO wi;

wi.dwProcId = dwProcId;
wi.hWnd = NULL;

EnumWindows(MyEnumProc,(LPARAM)&wi);

return wi.hWnd;

通過函數GetProcessMainWnd得到視窗的控制代碼後,就可以

調用GetWindowText(Hwnd)得到視窗標題了。

註:具體函數的調用參數請參考MSDN Library!

如何由視窗得到可執行檔名 :
下面是如何由視窗得到可執行檔名的例子:

void __fastcall GetExeByWnd(HWND hWnd)
{
HANDLE hProc;
char szProcessName [80];
HMODULE hMod;
DWORD dwProcId;

hMod = GetClassLong(hWnd,GCL_HMODULE);</P><P> GetWindowThreadProcessId(hWnd,&dwProcId);</P><P> hProc = OpenProcess (PROCESS_QUERY_INFORMATION|PROCESS_VM_READ,
FALSE,
dwProcId);
if (hProc)
{
if (GetModuleBaseName (hProc, 
hMod, 
szProcessName, 
sizeof(szProcessName)))
{
//加入自己的處理常式
}
else
{
//加入自己的處理常式

CloseHandle (hProc);
}
}</P><P> GetModuleBaseName可以用GetModuleFileNameEx這個函數替換,

它可以查指定進程中任何模組的檔案名稱,而且帶有路徑。

但這個函數在Win9X下有時候不行,這樣的話,只有枚舉進程來得到檔案名稱及路徑資訊了。

註:具體函數的調用參數請參考MSDN Library!

如何由進程得到可執行檔名 :
下面是如何由進程得到可執行檔名的簡單例子:

void __fastcall GetExeByProcId(DWORD dProcID)
{
HANDLE hProc;
char szProcessName [80];
HMODULE ahMod [10];
DWORD dwNeeded;

hProc = OpenProcess (PROCESS_QUERY_INFORMATION|PROCESS_VM_READ,
FALSE,
dProcID);
if (hProc)
{
if (EnumProcessModules (hProc, 
ahMod, 
sizeof(ahMod), 
&dwNeeded))
{
if (GetModuleBaseName (hProc, 
ahMod[0], 
szProcessName, 
sizeof(szProcessName)))
{
//加入自己的處理常式
}
else
{
//加入自己的處理常式

}
CloseHandle (hProc);
}
}</P><P>
有關進程ID擷取的API函數:
::GetCurrentProcessId() 得到當前運行程式的進程ID;

下面三個API函數可枚取系統中所有的進程ID:
::CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS,0),
::Process32First(hSnapshot,&lpProc),
::Process32Next(hSnapshot,&lpProc)

註:具體函數的調用參數請參考MSDN Library!

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.