Ich verwende derzeit die EnumProcesses-Funktion, um eine Liste der laufenden Prozesse zu erhalten. Da meine Anwendung jedoch im Benutzerbereich ausgeführt wird, kann sie keine Prozeduren für Prozesse abrufen, die nicht unter dem Benutzer ausgeführt werden, einschließlich Systemprozesse. Gibt es eine andere Methode, die mir Zugang zu diesen gibt? Alles was ich brauche sind die Prozessnamen.Holen Sie sich die vollständige laufende Prozessliste (Visual C++)
Antwort
Ich habe endlich eine Lösung gefunden (Zahlen nach dem Posten hier als mein letzter verzweifelter Versuch). Wenn jemand anderes nur eine Liste von Prozessnamen benötigt, die auf dem System laufen (alle Prozesse), wird dies für Sie erledigt.
Eine WMI-Abfrage (durchaus möglich mit WMI-COM-Schnittstelle, aber Sie müssen VB (Skript) fokussierte Dokumentation übersetzen) könnte hier helfen. Die Win32_Process
Klasse enthält, was Sie brauchen.
Allerdings habe ich dies nicht getestet, ich denke, Sie werden das gleiche Problem finden: ein Nicht-Administrator kann nur ihre eigenen Prozesse sehen.
Gerade zu dieser Antwort hinzufügen, baute ich dies für die Fälle, wenn Sie nur für einen bestimmten Prozess statt der gesamten Liste suchen sind.
bool FindRunningProcess(AnsiString process) {
/*
Function takes in a string value for the process it is looking for like ST3Monitor.exe
then loops through all of the processes that are currently running on windows.
If the process is found it is running, therefore the function returns true.
*/
AnsiString compare;
bool procRunning = false;
HANDLE hProcessSnap;
PROCESSENTRY32 pe32;
hProcessSnap = CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS, 0);
if (hProcessSnap == INVALID_HANDLE_VALUE) {
procRunning = false;
} else {
pe32.dwSize = sizeof(PROCESSENTRY32);
if (Process32First(hProcessSnap, &pe32)) { // Gets first running process
if (pe32.szExeFile == process) {
procRunning = true;
} else {
// loop through all running processes looking for process
while (Process32Next(hProcessSnap, &pe32)) {
// Set to an AnsiString instead of Char[] to make compare easier
compare = pe32.szExeFile;
if (compare == process) {
// if found process is running, set to true and break from loop
procRunning = true;
break;
}
}
}
// clean the snapshot object
CloseHandle(hProcessSnap);
}
}
return procRunning;
}
Ich stelle fest, sollte hier das in Embarcadero RAD Studio (C++ Builder) und pro @Remy_Lebeau-System geschrieben wurde :: Ansistring ist eine C++ Builder-String-Klasse für 8-Bit-ANSI-Zeichendaten in der VCL/FMX-Frameworks.
Wenn alles, was Sie brauchen nur Prozessnamen sind, dann WTSEnumerateProcesses als solche verwendet werden:
WTS_PROCESS_INFO* pWPIs = NULL;
DWORD dwProcCount = 0;
if(WTSEnumerateProcesses(WTS_CURRENT_SERVER_HANDLE, NULL, 1, &pWPIs, &dwProcCount))
{
//Go through all processes retrieved
for(DWORD i = 0; i < dwProcCount; i++)
{
//pWPIs[i].pProcessName = process file name only, no path!
//pWPIs[i].ProcessId = process ID
//pWPIs[i].SessionId = session ID, if you need to limit it to the logged in user processes
//pWPIs[i].pUserSid = user SID that started the process
}
}
//Free memory
if(pWPIs)
{
WTSFreeMemory(pWPIs);
pWPIs = NULL;
}
Der Vorteil der Verwendung dieser Methode ist, dass Sie für jeden Prozess einzeln nicht öffnen und dann seinen Namen abrufen als Was Sie tun müssten, wenn Sie stattdessen EnumProcesses verwenden würden, was auch nicht funktioniert, wenn Sie versuchen, Prozesse zu öffnen, die mit höheren Rechten als Ihr Benutzerkonto ausgeführt werden.
Zusätzlich ist diese Methode auch viel schneller als Aufruf Process32First()
/Process32Next()
in einer Schleife.
WTSEnumerateProcesses
ist eine weniger bekannte API, die seit Windows XP verfügbar ist.
- 1. Holen Sie sich die vollständige URL in SignalR Hub
- 2. Holen Sie sich Benutzer vollständige Dateipfad für Lebenslauf Datei hochladen
- 3. Reporting Services: Holen Sie sich die PDF eines generierten Berichts
- 4. Holen Sie sich die Zusammenstellung schnell wieder
- 5. Holen Sie sich das Visual Studio Farbschema von einem VSPackage
- 6. Sitecore/GlassMapper Holen Sie sich die Seite
- 7. Swift - Holen Sie sich die Länderliste
- 8. Holen Sie sich die Liste der geöffneten Fenster C#
- 9. Holen Sie sich Fotoreferenz
- 10. Holen Sie sich das Grafikkartenmodell?
- 11. Holen Sie sich die letzte Checkbox
- 12. Holen Sie sich die Array-Elemente
- 13. Holen Sie sich die zuletzt gedrückte Tastaturtaste
- 14. Holen Sie sich die Daten mit Schlüsselwerten
- 15. Holen Sie sich die Datenbankversion in Meteor
- 16. Holen Sie sich die BlackBerry-Gerätenummer
- 17. Android - Holen Sie sich die Bildquelle
- 18. Holen Sie sich die ec2-Konfigurationsinformationen
- 19. Holen Sie sich die IDs mehrerer Dateien
- 20. Holen Sie sich die Daten in Zeilen
- 21. Holen Sie sich die Konsolenprotokoll von chrome
- 22. Holen Sie sich die Subdomain als Parameter
- 23. Woocommerce: Holen Sie sich die aktuelle Produktkategorie
- 24. Batch Prozessliste
- 25. Holen Sie sich die rohe Anfrage mit PHP
- 26. PhoneGap Android Holen Sie sich die App-Versionscode
- 27. Holen Sie sich die Kontrolle Eigenschaften mit Javascript in Firefox
- 28. Holen Sie sich die Webseite und lesen Sie durch JavaScript
- 29. Holen Sie sich die Datensatzdetails und berechnen Sie das Ranking
- 30. Holen Sie sich alle Operationen von AzMan
Das könnte Sie interessieren: http://stackoverflow.com/q/30604485/560648. –
Danke, ich sollte hier notieren, dass dies in Embarcadero RAD Studio geschrieben wurde (C++ Builder) und per @Remy_Lebeau System :: AnsiString ist eine C++ Builder String-Klasse für 8-Bit-ANSI-Zeichendaten in seinen VCL/FMX-Frameworks. – Phil
Auf jeden Fall lohnt es sich, dieses Detail zu Ihrer Antwort hinzuzufügen! Prost. –