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 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71
|
#include <psapi.h>
QString NameOfProcessID(DWORD processID)
{
TCHAR szProcessName[MAX_PATH] = TEXT("<unknown>");
HANDLE hProcess = OpenProcess( PROCESS_QUERY_INFORMATION |
PROCESS_VM_READ,
FALSE, processID );
if (NULL != hProcess )
{
HMODULE hMod;
DWORD cbNeeded;
if ( EnumProcessModules( hProcess, &hMod, sizeof(hMod),
&cbNeeded) ) {
GetModuleBaseName( hProcess, hMod, szProcessName,
sizeof(szProcessName)/sizeof(TCHAR) );
}
}
QString qstrMessage;
#ifdef UNICODE
qstrMessage = QString::fromUtf16((ushort*)szProcessName);
#else
qstrMessage = QString::fromLocal8Bit(szProcessName);
#endif
CloseHandle(hProcess);
return qstrMessage;
}
static BOOL CALLBACK EnumWindowsProc(HWND hwnd, LPARAM lParam)
{
MainWindow* m_window=(MainWindow*) lParam;
DWORD windowpid;
GetWindowThreadProcessId(hwnd, &windowpid);
m_window->SwitchToWindow(NameOfProcessID(windowpid), "nom_du_prog.exe", windowpid, hwnd);
return 1;
}
....
void MainWindow::slotSwitchWindow() //// connection vers un SLOT (à créer) qui éxécute la fonction
{
EnumWindows(EnumWindowsProc, (LPARAM) this);
}
void MainWindow::SwitchToWindow(QString processName, QString program, unsigned long pid, HWND handle)
{
DWORD windowpid=pid;
HANDLE hProcess = OpenProcess( PROCESS_QUERY_INFORMATION |
PROCESS_VM_READ,
FALSE, windowpid );
if (processName==program){
if(NULL != hProcess){
if(GetCurrentProcessId()!=windowpid){
SwitchToThisWindow(handle, true);
return;
}
}
}
CloseHandle(hProcess);
} |
Partager