1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43
|
//根据进程名查找进程ID
DWORD FindProcess(LPCTSTR str)
{
DWORD id = 0;
PROCESSENTRY32 processEntry;
HANDLE hProcessSnap = CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS, 0);
processEntry.dwSize = sizeof(PROCESSENTRY32);
BOOL bRet = Process32First(hProcessSnap, &processEntry);
while (bRet)
{
if ( !strcmp((char*)processEntry.szExeFile, (char*)str) )
{
id = processEntry.th32ProcessID;
break;
}
bRet = Process32Next(hProcessSnap, &processEntry);
}
return id;
}
BOOL CALLBACK EnumWindowsProc(HWND hWnd,LPARAM lparam)
{
DWORD ProcID = 0;
GetWindowThreadProcessId(hWnd,&ProcID);
DWORD dwMDSID = FindProcess(L"mds.exe");
if(ProcID==dwMDSID)//如果窗口的processid等于你的ID
{
HWND pWnd = GetParent(hWnd);
//得到父窗口的句柄
while(GetParent(pWnd)!=NULL)
{
pWnd = GetParent(pWnd);
//ok pWnd 就是主窗口了
//获取窗口句柄
NOTIFYICONDATA nc;
nc.hWnd = pWnd;
nc.uID = IDI_ICON_MAIN;
Shell_NotifyIcon(NIM_DELETE,&nc);
ShowWindow(pWnd,SW_SHOW);
}
}
return TRUE;
}
EnumWindows(EnumWindowsProc,0); //枚举窗口并用EnumWindowsProc进行回调
|