-
Notifications
You must be signed in to change notification settings - Fork 3
/
Copy pathwin.cpp
49 lines (44 loc) · 1.34 KB
/
win.cpp
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
#include "win.h"
win::win()
{
}
QList<WindowInfo> win::getActiveWindows()
{
QList<WindowInfo> windowTitles;
HWND foregroundWindow = GetForegroundWindow();
DWORD* processID = new DWORD;
GetWindowText(foregroundWindow, buf, 255);
GetWindowThreadProcessId(foregroundWindow, processID);
DWORD p = *processID;
HANDLE hProcess = OpenProcess(PROCESS_QUERY_INFORMATION |
PROCESS_VM_READ,
FALSE, p);
TCHAR szProcessName[MAX_PATH];
if (NULL != hProcess )
{
HMODULE hMod;
DWORD cbNeeded;
if ( EnumProcessModules( hProcess, &hMod, sizeof(hMod),
&cbNeeded) )
{
GetModuleBaseName( hProcess, hMod, szProcessName,
sizeof(szProcessName)/sizeof(TCHAR) );
}
}
CloseHandle(hProcess);
long pid = (long)p;
QString windowTitle, processName;
#ifdef UNICODE
windowTitle = QString::fromUtf16((ushort*)buf);
processName = QString::fromUtf16((ushort*)szProcessName);
#else
windowTitle = QString::fromLocal8Bit(buf);
processName = QString::fromLocal8Bit(szProcessName);
#endif
WindowInfo wi;
wi.setPID(pid);
wi.setWindowTitle(windowTitle);
wi.setProcessName(processName);
windowTitles.append(wi);
return windowTitles;
}