Nazwa aktywnego procesu okna

Nazwa aktywnego procesu okna
verijon
  • Rejestracja:około 11 lat
  • Ostatnio:prawie 9 lat
  • Postów:47
0

Nigdzie nie mogę znaleźć w jaki sposób mogę pobrać nazwę procesu okna, które jest na wierzchu np. firefox, na razie mam:

Kopiuj
 
int main(void)
{
	Sleep(3000);

	HWND hOkno=GetForegroundWindow(); 
	DWORD proccesID;
	GetWindowThreadProcessId(hOkno, &proccesID);

	cout << proccesID;
	cin.get();
	return 0;
}

Jednak nie o to mi chodziło, jest to w ogóle możliwe?

Azarien
  • Rejestracja:ponad 21 lat
  • Ostatnio:2 minuty
1

Nie ma bezpośrednio funkcji do tego służącej, ale można pobrać listę wszystkich procesów i znaleźć ten którego potrzebujesz, kiedy już masz process id.
http://msdn.microsoft.com/en-us/library/ms686701(VS.85).aspx

edytowany 1x, ostatnio: Azarien
KA
  • Rejestracja:prawie 20 lat
  • Ostatnio:minuta
  • Lokalizacja:Gorlice
1

OpenProcess
GetModuleFileNameEx lub GetProcessImageFileName lub QueryFullProcessImageName
CloseHandle

EDIT
Nudzi mi się:

Kopiuj
#include "stdafx.h"
#include <iostream>
#include "Windows.h"
#include "Psapi.h"

using namespace std;

int main(void) {	
	Sleep(3000);

	HWND hOkno = GetForegroundWindow();
	DWORD proccesID;
	GetWindowThreadProcessId(hOkno, &proccesID);
	wcout << "PID: " << proccesID << "\n\n";
	HANDLE hProc = OpenProcess(PROCESS_QUERY_INFORMATION | PROCESS_VM_READ, FALSE, proccesID);

	wchar_t processName[MAX_PATH];

	wcout << "GetModuleFileNameEx:\n";
	ZeroMemory(processName, MAX_PATH);
	GetModuleFileNameEx(hProc, NULL, processName, MAX_PATH);
	wcout << processName << "\n\n";

	wcout << "GetProcessImageFileName:\n";
	ZeroMemory(processName, MAX_PATH);
	GetProcessImageFileName(hProc, processName, MAX_PATH);
	wcout << processName << "\n\n";

	wcout << "QueryFullProcessImageName:\n";
	ZeroMemory(processName, MAX_PATH);
	DWORD len = MAX_PATH;
	QueryFullProcessImageName(hProc, 0, processName, &len);
	wcout << processName;

	CloseHandle(hProc);

	wcin.get();
	return 0;
}

Nie odpowiadam na PW w sprawie pomocy programistycznej.
Pytania zadawaj na forum, bo:
od tego ono jest ;) | celowo nie zawracasz gitary | przeczyta to więcej osób a więc większe szanse że ktoś pomoże.
edytowany 1x, ostatnio: kAzek
Zobacz pozostałe 4 komentarze
verijon
Teraz działa, a dałoby się przekonwertować z typu wchar_t na char (wcstombs nie działa)?
Azarien
nie ma po co konwertować. albo definiujesz UNICODE oraz _UNICODE i używasz wchar_t, albo nie definiujesz i używasz char. makro UNICODE automatycznie zmienia typ parametrów w funkcjach winapi.
verijon
cannot convert parameter 3 from 'char [260]' to 'LPWSTR'
KA
To zdecyduj się albo używasz Unicode albo nie jak nie używasz (sprawdź i odpowiednio ustaw we właściwościach projektu) albo "jawnie" wywołuj funkcje ansi (czyli NazwaFunkcjiA)
Azarien
@verijon. co ja napisałem. jeszcze raz: albo definiujesz UNICODE oraz _UNICODE i używasz wchar_t, albo nie definiujesz i używasz char.
KA
  • Rejestracja:prawie 20 lat
  • Ostatnio:minuta
  • Lokalizacja:Gorlice
0

Tylko po co?

Kopiuj
	char buff[MAX_PATH];
	len = lstrlen(processName);
	WideCharToMultiByte(CP_ACP, 0, processName, len, buff, sizeof(buff), NULL, NULL);
	buff[len] = 0;

Nie odpowiadam na PW w sprawie pomocy programistycznej.
Pytania zadawaj na forum, bo:
od tego ono jest ;) | celowo nie zawracasz gitary | przeczyta to więcej osób a więc większe szanse że ktoś pomoże.
edytowany 1x, ostatnio: kAzek

Zarejestruj się i dołącz do największej społeczności programistów w Polsce.

Otrzymaj wsparcie, dziel się wiedzą i rozwijaj swoje umiejętności z najlepszymi.