1. 程式人生 > >根據程序名取程序ID,控制代碼,最前端顯示

根據程序名取程序ID,控制代碼,最前端顯示



#include <Psapi.h>(需連結Psapi.Lib)

DWORD m_dwTstObjID;

HWND m_lmshwnd = NULL;

//回撥函式,根據程序ID獲得程序控制代碼
BOOL CALLBACK EnumWindowsProc(HWND hwnd,DWORD lParam)
{
if(hwnd==NULL)  
return false;


DWORD mpid;
GetWindowThreadProcessId(hwnd,&mpid);
if (mpid==lParam && IsWindowVisible(hwnd) && GetParent(hwnd)==NULL && m_lmshwnd==NULL)
{
m_lmshwnd=hwnd;
m_dwTstObjID = lParam;
}
return TRUE;
}


//根據程序名獲得程序ID
void GetProcessID(DWORD processID)
{
TCHAR szProcessName[MAX_PATH] = TEXT("unknow");
//根據程序ID,開啟程序返回程序的控制代碼
HANDLE hProcess = OpenProcess( PROCESS_QUERY_INFORMATION|PROCESS_VM_READ,FALSE,processID );
//得到程序名
if (NULL!=hProcess )
{
HMODULE hMod;
DWORD cbNeeded;
//EnumProcessModules根據控制代碼獲取例項,儲存到hMod中
if (EnumProcessModules( hProcess,&hMod,sizeof(hMod),&cbNeeded) )
{
//獲取根據程序控制代碼獲取程序名稱 szProcessName
GetModuleBaseName( hProcess, hMod, szProcessName,sizeof(szProcessName)/sizeof(TCHAR) );
}
CloseHandle(hProcess);
}
//取得程序名和程序ID,其程序控制代碼為hProcess
CString strExe = "notepad.exe";


if (strExe.CompareNoCase(szProcessName)==0)
{
EnumWindows((WNDENUMPROC)EnumWindowsProc,processID);
}
}


//獲取指定程序控制代碼
BOOL GetProcessHandle()
{
// 得到程序ID的列表
DWORD aProcesses[1024], cbNeeded, cProcesses;
//列舉所有程序的ID,返回到aProcesses陣列中
if ( !EnumProcesses( aProcesses, sizeof(aProcesses), &cbNeeded ) )
return FALSE;
//計算一共返回了多少個程序ID
cProcesses = cbNeeded / sizeof(DWORD);
//獲得每個程序的名稱和對應的ID
for (unsigned int i = 0; i < cProcesses; i++ )
{
if( aProcesses[i] != 0 )
{
GetProcessID(aProcesses[i]);
}
}
return TRUE;
}

test()

{

if (!GetProcessHandle())
return -1;
CWnd* pMainWnd = CWnd::FromHandle(m_lmshwnd);
CString strTmp;
if(IsWindow(pMainWnd->GetSafeHwnd())==NULL)
{
AfxMessageBox("請開啟記事本程式!");
return -1;
}

//記事本程式最前端顯示
pMainWnd->ShowWindow(SW_MAXIMIZE);
pMainWnd->SetForegroundWindow();

}