[Resolvido] MinGW - GNU gcc - Capturar caminho do aplicativo atua
Estou usando:
-
-
Sistema: Windows 7 Home Premium - 64bit.
-
Programa de desenvolvimento: Code::Blocks 10.05
-
Compilador: GNU GCC (MinGW).
-
Linguagem: C++
-
O que preciso: Preciso pegar o caminho do aplicativo que o usuário está usando, para monitorar as atividades.
Estou desenvolvendo um sistema de monitoramento de janelas do Windows, tentei usar as seguintes funções:
Windows 2000 = GetModuleFileName()
Windows XP x32 = GetProcessImageFileName()
Windows XP x64 = GetProcessImageFileName()
Windows Vista = QueryFullProcessImageName()
Windows 7 = QueryFullProcessImageName()
Porém com todas ocorrem o mesmo Erro:
main.cpp|19|error: 'QueryFullProcessImageName' was not declared in this scope|
Vejam um exemplo do código que busquei na internet:
#include <Windows.h>
#include <iostream>
#include <Psapi.h>
using namespace std;
void printProcPath(DWORD pid) {
//HANDLE hProc = OpenProcess(PROCESS_QUERY_LIMITED_INFORMATION | PROCESS_QUERY_INFORMATION, false, pid);
HANDLE hProc = OpenProcess(PROCESS_ALL_ACCESS, false, pid);
if (NULL == hProc) cout << "Cannot open process.";
LPWSTR path = new WCHAR[MAX_PATH];
DWORD charsCarried = MAX_PATH;
BOOL iResult = QueryFullProcessImageName(hProc, 0, path, &charsCarried);
if (iResult == 0) {
cout << "Cannot get process path.";
}else {
wcout << path;
}
}
int main() {
DWORD PIDs[1024], bytesReturned, procQty;
EnumProcesses(PIDs, sizeof(PIDs), &bytesReturned);
procQty = bytesReturned / sizeof(DWORD);
for (DWORD i = 0; i < procQty; ++i) {
cout << PIDs[i] << ": ";
printProcPath(PIDs[i]);
cout << '\n';
}
cin.get();
return 0;
}
Outra tentativa foi com esse código que fiz tentando usar GetForegroundWindow:
Ele funciona, mas não retorna o caminho do aplicativo que está "FOCADO" ( o que o usuário está usando ), ao invés disso ele retorna o caminho do código compilado. Testem por favor.
#include <iostream>
#include <windows.h>
#include <stdio.h>
#include <string.h>
#include <sstream>
#include <tlhelp32.h>
#include <cstdio>
#include <psapi.h>
using namespace std;
int main(){
HWND hwndHandle;
char janelaGravar[1024];
while(1){
Sleep(10);
//Janela ativa
hwndHandle = GetForegroundWindow();
GetWindowText(hwndHandle, janelaGravar, 1023);
if(hwndHandle){
HINSTANCE hInstance = (HINSTANCE)GetWindowLong( hwndHandle, GWL_HINSTANCE );
if(hInstance==0){
//cout << "Error:" << GetLastError();
} else {
TCHAR path[MAX_PATH];
GetModuleFileName( hInstance, path, MAX_PATH );
cout << endl << path << endl;
}
}
}
}
Grato.
Discussão (1)
Carregando comentários...