Ir para conteúdo

POWERED BY:

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

brcontainer

[Resolvido] MinGW - GNU gcc - Capturar caminho do aplicativo atua

Recommended Posts

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.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Tópico resolvido.

 

Solução para o Code::Blocks (com MinGW)

 


  •  
  • Vá até settings
  • clique em compiler and debugger
  • vá até linker settings
  • clique em add
  • E digite psapi

 

Solução por chris: http://stackoverflow.com/users/962089/chris

Compartilhar este post


Link para o post
Compartilhar em outros sites

×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.