29#undef LPPROCESSENTRY32
46 TCHAR path[MAX_PATH+1];
58 if (SUCCEEDED(SHGetSpecialFolderLocation(NULL, folder, &idl))) {
60 result = SHGetPathFromIDList(idl, path);
65 if (SUCCEEDED(result)) {
67 return QString::fromUtf16(
static_cast<const ushort *
>(path));
69 return QString::fromLocal8Bit(
static_cast<const char *
>(path));
81 CSIDL_PROGRAM_FILES, QDir::rootPath() +
"\\Program Files");
89 CSIDL_LOCAL_APPDATA, QDir::homePath() +
"\\Application Data");
99 DWORD size =
sizeof(data);
102 if (RegOpenKeyExA(HKEY_CURRENT_USER,
103 qPrintable(keyLocation),
104 0L, KEY_READ, &key) == ERROR_SUCCESS) {
107 RegQueryValueExA(key, qPrintable(keyName),
108 NULL, NULL, (LPBYTE)data, &size);
114 return QString(data);
124 if (RegOpenKeyExA(HKEY_CURRENT_USER,
125 qPrintable(keyLocation),
126 0, KEY_WRITE, &key) != ERROR_SUCCESS) {
129 RegCreateKeyExA(HKEY_CURRENT_USER,
130 qPrintable(keyLocation),
131 0, NULL, REG_OPTION_NON_VOLATILE, KEY_ALL_ACCESS, NULL,
136 RegSetValueExA(key, qPrintable(keyName), 0, REG_SZ,
137 (BYTE *)qPrintable(keyValue),
138 (DWORD)keyValue.length() + 1);
151 if (RegOpenKeyExA(HKEY_CURRENT_USER,
152 qPrintable(keyLocation),
153 0, KEY_SET_VALUE, &key) == ERROR_SUCCESS) {
156 RegDeleteValueA(key, qPrintable(keyName));
173 GetWindowThreadProcessId(hwnd, &hwndPID);
174 if (hwndPID == (DWORD)targetPID)
175 PostMessage(hwnd, WM_QUIT, 0, (LPARAM)NULL);
210 if (procList.isEmpty()) {
215 QHashIterator<qint64, QString>
i(procList);
216 while (
i.hasNext()) {
218 if (
i.value().toLower() == filename) {
227QHash<qint64, QString>
230 QHash<qint64, QString> procList;
240 pCreateToolhelp32Snapshot =
242 pProcess32First = (
Process32First_fn)QLibrary::resolve(
"kernel32",
"Process32First");
243 pProcess32Next = (
Process32Next_fn)QLibrary::resolve(
"kernel32",
"Process32Next");
245 if (!pCreateToolhelp32Snapshot || !pProcess32First || !pProcess32Next) {
246 qWarning(
"Unable to load tool help functions. Running process information "
247 "will be unavailable.");
248 return QHash<qint64, QString>();
252 hSnapshot = pCreateToolhelp32Snapshot(TH32CS_SNAPPROCESS, 0);
253 if (hSnapshot != INVALID_HANDLE_VALUE) {
254 proc.dwSize =
sizeof(PROCESSENTRY32);
257 if (pProcess32First(hSnapshot, &proc)) {
260 pid = (qint64)proc.th32ProcessID;
261 exeFile = QString::fromAscii((
const char *)proc.szExeFile);
264 procList.insert(pid, exeFile);
265 }
while (pProcess32Next(hSnapshot, &proc));
267 CloseHandle(hSnapshot);
BOOL(WINAPI * Process32Next_fn)(HANDLE, LPPROCESSENTRY32)
void win32_registry_remove_key(QString keyLocation, QString keyName)
void win32_end_process_by_pid(DWORD pid)
QString win32_app_data_folder()
void win32_end_process_by_filename(QString filename)
void win32_registry_set_key_value(QString keyLocation, QString keyName, QString keyValue)
QString win32_program_files_folder()
QString win32_registry_get_key_value(QString keyLocation, QString keyName)
QHash< qint64, QString > win32_process_list()
BOOL(WINAPI * Process32First_fn)(HANDLE, LPPROCESSENTRY32)
BOOL CALLBACK quitWindowCallback(HWND hwnd, LPARAM targetPID)
QString win32_get_folder_location(int folder, QString defaultPath)
HANDLE(WINAPI * CreateToolhelp32Snapshot_fn)(DWORD, DWORD)