Prozess PID rausfinden in C++

Diskutiere Prozess PID rausfinden in C++ im Developer Network Forum im Bereich Hardware & Software Forum; Also ich hab gerade ein Programm, das eig aber nix zu Frage tut, deswegen erspare ich euch den code. mit system("kill xxx"); kann man ja den...
  • Prozess PID rausfinden in C++ Beitrag #1
Homie1

Homie1

Bekanntes Mitglied
Dabei seit
08.12.2008
Beiträge
98
Reaktionspunkte
0
Ort
NRW
Also ich hab gerade ein Programm, das eig aber nix zu Frage tut, deswegen erspare ich euch den code.

mit
Code:
system("kill xxx");
kann man ja den Prozess mit der PID xxx beenden. ( Funktioniert )

Mir ist gerade aufgefallen das z.b. die Icq.exe jedes mal eine andere PID hat, bitte net lachen :D ...

jetzt benötige ich den Code der mir die PID von z.b. der Icq.exe raussucht und in eine Variable eingibt.

Danke im Vorraus und noch einen schönen 4ten Advent
 
  • Prozess PID rausfinden in C++ Beitrag #2
Homie1

Homie1

Bekanntes Mitglied
Dabei seit
08.12.2008
Beiträge
98
Reaktionspunkte
0
Ort
NRW
Zusatz:
Damit der Befehl "kill" in der Eingebaeaufforderung funktioniert muss erst folgende Datei ins Windows-Verzeichnis gepackt werden.
http://homie1.ho.ohost.de/kill.exe ( Wer dem download nicht traut kann auch gerne im I-net nach einer anderen downloadmöglichkeit googeln ;-) )
 
  • Prozess PID rausfinden in C++ Beitrag #3
Max11.111

Max11.111

Bekanntes Mitglied
Dabei seit
12.06.2008
Beiträge
2.416
Reaktionspunkte
0
du startest deinen Prozess mit CreateProcess oder OpenProcess (ist leichter;)), der dir eine Prozess-ID zurückgibt (brauchst du später). Mit TerminateProcess kannst du den Prozess dann wieder killen.

Beispiel:
hWnd = FindWindow ("DeineApp", NULL);
threadID = GetWindowThreadProcessID (hWnd, &processID);
hProcess = OpenProcess (PROCESS_ALL_ACCESS, TRUE, processID);
TerminateProcess (hProcess, 0);
 
Zuletzt bearbeitet:
  • Prozess PID rausfinden in C++ Beitrag #4
Homie1

Homie1

Bekanntes Mitglied
Dabei seit
08.12.2008
Beiträge
98
Reaktionspunkte
0
Ort
NRW
oke vllt. sollte ich doch noch was zum prinzip sagen, ich will ne .exe haben die mir einem alle "unwichtigen" Prozesse killt und außerdem n Spiel startet damit ich mehr ressourcen zu verfügung hab zum zocken :D ... bei meinem rechner leider notwendig ... also sind das prozesse die ich nicht erst mit dieser .exe starte sonden jene die schon vorher laufen
 
  • Prozess PID rausfinden in C++ Beitrag #5
the ubm

the ubm

Senior Moderator
Dabei seit
29.05.2005
Beiträge
9.464
Reaktionspunkte
1
Ich würde das gar nicht über C++ machen, wenn es nur darum geht mehr Resourcen zu bekommen.
Einfach eine kleine Batchdatei schreiben und alle Anwendungen über tskill killen, bsp:
Code:
tskill icq
Und schon ist dein ICQ geschlossen.
Ganz am Ende des Scripts dann noch einfügen
Code:
start "C:\Programme\Mein Spiel\Meinspiel.exe"
 
  • Prozess PID rausfinden in C++ Beitrag #6
Max11.111

Max11.111

Bekanntes Mitglied
Dabei seit
12.06.2008
Beiträge
2.416
Reaktionspunkte
0
taskkill ist aber nur in der Professional Version von Windows XP vorhanden:no:, was mache ich jetzt?!

//Edit:
Stop, ich weis die Lösung selbst: Dafür gibt es dann tskill;)
 
  • Prozess PID rausfinden in C++ Beitrag #7
the ubm

the ubm

Senior Moderator
Dabei seit
29.05.2005
Beiträge
9.464
Reaktionspunkte
1
  • Prozess PID rausfinden in C++ Beitrag #8
Max11.111

Max11.111

Bekanntes Mitglied
Dabei seit
12.06.2008
Beiträge
2.416
Reaktionspunkte
0
Sorry, da habe ich mich verlesen...
Ich den Text nur überflogen...
Ich habe das t und das kill gelesen und das im Zusammenhang von Task beenden und schon war der Gedanke an taskkill da:no:

Wer lesen kann, ist im Vorteil;)
 
  • Prozess PID rausfinden in C++ Beitrag #9
Homie1

Homie1

Bekanntes Mitglied
Dabei seit
08.12.2008
Beiträge
98
Reaktionspunkte
0
Ort
NRW
so, danke eurer Hile läuft es jetzt.

Allerdings ergibt sich ein weiteres Problem.

Code:
system("tskill iPodService");
hat zur Folge:
Code:
Abbrechen des Prozesses für ipodservice ist fehlgeschlagen. Zugriff verweigert

Bei allen anderen Prozessen funktioniert es :klatsch

edit: Ich bin als Admin angemeldet, falls das was zu sagen hat.
 
  • Prozess PID rausfinden in C++ Beitrag #10
Max11.111

Max11.111

Bekanntes Mitglied
Dabei seit
12.06.2008
Beiträge
2.416
Reaktionspunkte
0
Vielleicht liegt das daran das der Prozess als Systemprozess und Systemprozesse nicht beendet werden können?!

Ich weiß jetzt auch nicht, warum der iTunes-Prozesse als SYSTEM-Prozess gestartet wird:confused:
Systemprozesse sind [normalerweise] wirklich wichtig für den PC. Das ist du als wenn du das Brett auf dem du stehst absägst.:D


Lösche mal folgende Einträge im Registrierungseditor:
unter
Code:
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Run
den Eintrag
 
Zuletzt bearbeitet:
  • Prozess PID rausfinden in C++ Beitrag #11
Homie1

Homie1

Bekanntes Mitglied
Dabei seit
08.12.2008
Beiträge
98
Reaktionspunkte
0
Ort
NRW
oke hab ich gemacht ,

bei dem Pfad hat sich auch noch eine Frage ergeben.
Hab 3 Versuche unternommen

1:
Code:
ShellExecute(0, "open", "F:\\COD 4\\iw3mp.exe", 0, 0, 0);

2:
Code:
system(start "\"F:\\COD~1\\iw3mp.exe\"");

3:
Code:
system(start "F:\\COD 4\\iw3sp.exe\");

alle führen zum falschen Ergebnis ... , es soll die Datei F:\COD 4\iw3sp.exe gestartet werden.
 
  • Prozess PID rausfinden in C++ Beitrag #12
Max11.111

Max11.111

Bekanntes Mitglied
Dabei seit
12.06.2008
Beiträge
2.416
Reaktionspunkte
0
oke hab ich gemacht ,

bei dem Pfad hat sich auch noch eine Frage ergeben.
Hab 3 Versuche unternommen

1:
Code:
ShellExecute(0, "open", "F:\\COD 4\\iw3mp.exe", 0, 0, 0);

2:
Code:
system(start "\"F:\\COD~1\\iw3mp.exe\"");

3:
Code:
system(start "F:\\COD 4\\iw3sp.exe\");

alle führen zum falschen Ergebnis ... , es soll die Datei F:\COD 4\iw3sp.exe gestartet werden.



  1. Code:
    ShellExecute(NULL, "open", "iw3mp.exe", NULL, "\"F:\\COD 4\\\"", SW_SHOWNORMAL);
    HINSTANCE ShellExecute(
    HWND hwnd,
    LPCTSTR lpOperation,
    LPCTSTR lpFile,
    LPCTSTR lpParameters,
    LPCTSTR lpDirectory,
    INT nShowCmd
    );
    --------------------------------------------------------------------------
    hwnd
    [...]

    lpOperation
    [...]

    lpFile
    [in] A pointer to a null-terminated string that specifies the file or object on which to execute the specified verb. To specify a Shell namespace object, pass the fully qualified parse name. Note that not all verbs are supported on all objects. For example, not all document types support the "print" verb. If a relative path is used for the lpDirectory parameter do not use a relative path for lpFile

    lpParameters
    [...]

    lpDirectory
    [in] A pointer to a null-terminated string that specifies the default (working) directory for the action. If this value is NULL, the current working directory is used. If a relative path is provided at lpFile, do not use a relative path for lpDirectory.

    nShowCmd
    [...]
    Quelle: ShellExecute Funktion()
    Bei absoluten Pfadangaben(F:/irgendwas) soll man also den Pfad bei lpDirectory hinschreiben (bei relativen nicht(/Sepp/start.exe), hier wird der Pfad zu lpFile dazu geschrieben).
  2. Code:
    system("start \"F:\\COD~1\\iw3mp.exe\"");
    Die System Funktion() will nur einen String, desshalb müssen das Anführungszeichen(") schon vor start sein, wobei start nicht benötigt wird und weggelassen werden kann.
    Die Abkürzung mit ~1 wurde nochmalerweise nur auf den alten Windowssystemen benutzt, bei denen Pfadangaben nur max. 8 Zeichen lang sein durften. COD 4 ist aber keine 8 Zeichen lang und funktioniert auf keinem Windows 98er, desshalb würde ich COD 4 oder Call of Duty 4 ausschreiben.
  3. Code:
    system("start \"F:\\COD 4\\iw3sp.exe\"");
    Mach macht das " vor Pfadangaben, wenn ein Leerzeichen enthalten ist. Wegen der Escapesequenz schreibt man also: \".
    Man kann bei Pfadangaben auf jedem System einen Slash (/) verwenden (wie im Internet).
    Also ist F:/Call of Duty 4/ äquivalent zu F:\Call of Duty 4\.

Alles Klar?!;)
 
Zuletzt bearbeitet:
  • Prozess PID rausfinden in C++ Beitrag #13
Homie1

Homie1

Bekanntes Mitglied
Dabei seit
08.12.2008
Beiträge
98
Reaktionspunkte
0
Ort
NRW
Code:
ShellExecute(NULL, "open", "iw3mp.exe", NULL, "\"F:\\COD 4\\\"", SW_SHOWNORMAL);

hab ich gemacht .... kommt aber nix ... hab oben noch

Code:
#include <shellapi.h>
eingefügt

Glaub ich solte erst noch n paar Kapitel weiterlernen da ich den größten Teil von deinem Post net verstanden hab :)
 
  • Prozess PID rausfinden in C++ Beitrag #14
Max11.111

Max11.111

Bekanntes Mitglied
Dabei seit
12.06.2008
Beiträge
2.416
Reaktionspunkte
0
Bau doch mal schnell ein, das der Fehler angezeigt wird:
0 The operating system is out of memory or resources.
ERROR_FILE_NOT_FOUND The specified file was not found.
ERROR_PATH_NOT_FOUND The specified path was not found.
ERROR_BAD_FORMAT The .exe file is invalid (non-Microsoft Win32 .exe or error in .exe image).
SE_ERR_ACCESSDENIED The operating system denied access to the specified file.
SE_ERR_ASSOCINCOMPLETE The file name association is incomplete or invalid.
SE_ERR_DDEBUSY The Dynamic Data Exchange (DDE) transaction could not be completed because other DDE transactions were being processed.
SE_ERR_DDEFAIL The DDE transaction failed.
SE_ERR_DDETIMEOUT The DDE transaction could not be completed because the request timed out.
SE_ERR_DLLNOTFOUND The specified DLL was not found.
SE_ERR_FNF The specified file was not found.
SE_ERR_NOASSOC There is no application associated with the given file name extension. This error will also be returned if you attempt to print a file that is not printable.
SE_ERR_OOM There was not enough memory to complete the operation.
SE_ERR_PNF The specified path was not found.
SE_ERR_SHARE A sharing violation occurred.

Code:
#include <windows.h>
#include <stdio.h>

int main(void)
{
int ret=-1; 

//gaaanz viel Code ;-)


ret= (int)ShellExecute(NULL, "open", "iw3mp.exe", NULL, "\"F:\\COD 4\\\"", SW_SHOWNORMAL);

switch (ret)
{
case '0':
printf("The operating system is out of memory or resources!");
break;

case 'ERROR_FILE_NOT_FOUND':
printf("The specified file was not found!");
break;

case 'ERROR_PATH_NOT_FOUND':
printf("The specified path was not found!");
break;

case 'ERROR_BAD_FORMAT':
printf("The .exe file is invalid (non-Microsoft Win32 .exe or error in .exe image)!");
break;

//und so weiter...
}
getch();
}
Du kannst die Ausgabe natürlich auch mit <iostream> über std::cout machen!;)
 
Zuletzt bearbeitet:
  • Prozess PID rausfinden in C++ Beitrag #15
Homie1

Homie1

Bekanntes Mitglied
Dabei seit
08.12.2008
Beiträge
98
Reaktionspunkte
0
Ort
NRW
kann er mir net Kompiliren ... 22 duplicate case value
 
  • Prozess PID rausfinden in C++ Beitrag #16
Max11.111

Max11.111

Bekanntes Mitglied
Dabei seit
12.06.2008
Beiträge
2.416
Reaktionspunkte
0
Welche Kompiler auf welchem System?

Mach mal lieber mit if:
Code:
#include <windows.h>
#include <stdio.h>

int main(void)
{
int ret=-1; 

//gaaanz viel Code ;-)


ret= (int)ShellExecute(NULL, "open", "iw3mp.exe", NULL, "\"F:\\COD 4\\\"", SW_SHOWNORMAL);

if (ret ==0)
printf("The operating system is out of memory or resources!");

else if (ret == ERROR_FILE_NOT_FOUND)
printf("The specified file was not found!");

else if (ret == ERROR_PATH_NOT_FOUND)
printf("The specified path was not found!");

else if (ret == ERROR_BAD_FORMAT)
printf("The .exe file is invalid (non-Microsoft Win32 .exe or error in .exe image)!");

//und so weiter...
else
printf("Unbekannter Fehler!");

getchar();
}
 
Zuletzt bearbeitet:
  • Prozess PID rausfinden in C++ Beitrag #17
Homie1

Homie1

Bekanntes Mitglied
Dabei seit
08.12.2008
Beiträge
98
Reaktionspunkte
0
Ort
NRW
Dev C++ auf Win XP

ganz zum schluss fehlte dem auch noch eine } ... hab ich aber einfah mal hingemacht

edit: sry der hat nur die hälfte kopiert .... :( .... versuchs eben nochmal

edit2: okee ... kommt das gleiche bei raus .. außerdem kennt er getch() net

edit3: das getch() hab ich durch
Code:
int a;
cin >> a;
ersetzt
 
Zuletzt bearbeitet:
  • Prozess PID rausfinden in C++ Beitrag #18
Max11.111

Max11.111

Bekanntes Mitglied
Dabei seit
12.06.2008
Beiträge
2.416
Reaktionspunkte
0
Ich habe jetzt oben noch mal
edit.gif
gedrückt...
Die Error-Definitionen waren zu lange, deshalb mach ichs jetzt mit if.

Code:
#include <windows.h>
#include <stdio.h>

int main(void)
{
int ret=-1; 

//gaaanz viel Code ;-)


ret= (int)ShellExecute(NULL, "open", "iw3mp.exe", NULL, "\"F:\\COD 4\\\"", SW_SHOWNORMAL);

if (ret ==0)
printf("The operating system is out of memory or resources!");

else if (ret == ERROR_FILE_NOT_FOUND)
printf("The specified file was not found!");

else if (ret == ERROR_PATH_NOT_FOUND)
printf("The specified path was not found!");

else if (ret == ERROR_BAD_FORMAT)
printf("The .exe file is invalid (non-Microsoft Win32 .exe or error in .exe image)!");

else if (ret == SE_ERR_ACCESSDENIED)
printf("The operating system denied access to the specified file.");

else if (ret == SE_ERR_ASSOCINCOMPLETE)
printf("The file name association is incomplete or invalid.");

else if (ret == SE_ERR_DDEBUSY)
printf("The Dynamic Data Exchange (DDE) transaction could not be completed because other DDE transactions were being processed.");

else if (ret == SE_ERR_DDEFAIL)
printf("The DDE transaction failed");

else if (ret == SE_ERR_DDETIMEOUT)
printf("The DDE transaction could not be completed because the request timed out.");

else if (ret == SE_ERR_DLLNOTFOUND)
printf("The specified DLL was not found.");

else if (ret == SE_ERR_FNF)
printf("The specified file was not found.");

else if (ret == SE_ERR_NOASSOC)
printf("There is no application associated with the given file name extension. This error will also be returned if you attempt to print a file that is not printable.");

else if (ret == SE_ERR_OOM)
printf("There was not enough memory to complete the operation.");

else if (ret == SE_ERR_PNF)
printf("The specified path was not found.");

else if (ret == SE_ERR_SHARE)
printf("A sharing violation occurred.");

else
printf("Unbekannter Fehler!");

getchar();
}
 
Zuletzt bearbeitet:
  • Prozess PID rausfinden in C++ Beitrag #19
the ubm

the ubm

Senior Moderator
Dabei seit
29.05.2005
Beiträge
9.464
Reaktionspunkte
1
Welchen komplizierten Code ihr hier fabriziert um einen Service zu beenden, finde ich erstaunlich.
Einfach "net stop SERVICENAME" ausführen und der Service beendet sich. Den Namen kriegt man indem man "services.msc" ausführt. Nun sieht man alle Dienste, die auf dem PC installiert sind. Hier noch den Namen finden und hinter "net stop" setzen und der Service wird beendet.
 
  • Prozess PID rausfinden in C++ Beitrag #20
RTW-Fahrer

RTW-Fahrer

Bekanntes Mitglied
Dabei seit
14.10.2008
Beiträge
1.724
Reaktionspunkte
0
Ort
Mal hier - mal dort - Aber immer in deiner Nähe!!!
Okay, nicht ganz C++ ;)
Code:
'------------- Anfang Projektdatei Project1.vbp -------------
'--------- Anfang Formular "Form1" alias Form1.frm  ---------
' Steuerelement: Schaltfläche "Command1"
' Steuerelement: Schaltfläche "Command2"
' Steuerelement: Kontrollkästchen-Steuerelement "Check1"
' Steuerelement: Listen-Steuerelement "List1" (Index von 0 bis 2)
' Steuerelement: Optionsfeld-Steuerelement "Option2"
' Steuerelement: Optionsfeld-Steuerelement "Option1"
' Steuerelement: Beschriftungsfeld "Label3"
' Steuerelement: Beschriftungsfeld "Label2"
' Steuerelement: Beschriftungsfeld "Label1"

Option Explicit

Private Declare Function GetDesktopWindow Lib "user32" () _
        As Long

Private Declare Function GetWindow Lib "user32" (ByVal hWnd _
        As Long, ByVal wCmd As Long) As Long
        
Private Declare Function GetWindowLong Lib "user32" Alias _
        "GetWindowLongA" (ByVal hWnd As Long, ByVal wIndx As _
        Long) As Long
        
Private Declare Function GetWindowTextLength Lib "user32" _
        Alias "GetWindowTextLengthA" (ByVal hWnd As Long) _
        As Long
        
Private Declare Function GetWindowText Lib "user32" Alias _
        "GetWindowTextA" (ByVal hWnd As Long, ByVal lpString _
        As String, ByVal cch As Long) As Long
               
Private Declare Function GetParent Lib "user32" (ByVal hWnd _
        As Long) As Long
        
Private Declare Function GetWindowThreadProcessId Lib "user32" _
        (ByVal hWnd As Long, lpdwProcessId As Long) As Long
        
Private Declare Function CloseHandle Lib "kernel32" (ByVal _
        hObject As Long) As Long
        
Private Declare Function OpenProcess Lib "kernel32" (ByVal _
        dwDesiredAccess As Long, ByVal bInheritHandle As Long, _
        ByVal dwProcessId As Long) As Long
        
Private Declare Function TerminateProcess Lib "kernel32" (ByVal _
        hProcess As Long, ByVal uExitCode As Long) As Long
        
Const GW_HWNDFIRST = 0
Const GW_HWNDLAST = 1
Const GW_HWNDNEXT = 2
Const GW_HWNDPREV = 3
Const GW_OWNER = 4
Const GW_CHILD = 5
Const GW_MAX = 5

Const GWL_STYLE = (-16)

Const WS_VISIBLE = &H10000000
Const WS_BORDER = &H800000

Const PROCESS_TERMINATE = &H1

Private Sub Check1_Click()
  Call EnumWindows
End Sub

Private Sub Command1_Click()
  Call EnumWindows
End Sub

Private Sub Command2_Click()
  Dim Result&, Task&
    
    If List1(2).ListIndex > -1 Then
      Result = CLng(List1(2).List(List1(2).ListIndex))
     
      Task = OpenProcess(PROCESS_TERMINATE, 0&, Result)
      Result = TerminateProcess(Task, 1&)
      Result = CloseHandle(Task)
    End If
End Sub

Private Sub Form_Load()
  Call EnumWindows
End Sub

Private Sub List1_Click(Index As Integer)
  Static Flag, x%
    If Flag Then Exit Sub
    Flag = True
    For x = 0 To List1.UBound
      List1(x).ListIndex = List1(Index).ListIndex
      List1(x).TopIndex = List1(Index).TopIndex
    Next x
    Flag = False
End Sub

Private Sub EnumWindows()
  Dim hWnd&
  
    List1(0).Clear
    List1(1).Clear
    List1(2).Clear
    
    'Auch der Desktop ist ein Fenster
    hWnd = GetDesktopWindow
    Call GetWindowInfo(hWnd)
    
    'Einstieg
    hWnd = GetWindow(Me.hWnd, GW_HWNDFIRST)
    
    'Alle vorhandenen Fenster abklappern
    Do
      Call GetWindowInfo(hWnd)
      hWnd = GetWindow(hWnd, GW_HWNDNEXT)
    Loop Until hWnd = 0
End Sub

Private Sub GetWindowInfo(ByVal hWnd&)
  Dim Parent&, Task&, Result&, x&, Style&, Title$
  
    'Darstellung des Fensters
    Style = GetWindowLong(hWnd, GWL_STYLE)
    Style = Style And (WS_VISIBLE Or WS_BORDER)
            
    'Title des Fenster auslesen
    Result = GetWindowTextLength(hWnd) + 1
    Title = Space$(Result)
    Result = GetWindowText(hWnd, Title, Result)
    Title = Left$(Title, Len(Title) - 1)
    
    'In Abhängigkeit der Optionen die Ausgabe erstellen
    If (Title <> "" Or (Check1.Value = vbChecked)) And _
       (Style = (WS_VISIBLE Or WS_BORDER) Or Option2.Value) Then
       
      List1(0).AddItem CStr(hWnd)
      List1(1).AddItem Title
      
      'Elternfenster ermitteln
      Parent = hWnd
      Do
        Parent = GetParent(Parent)
      Loop Until Parent = 0
      
      'Task Id ermitteln
      Result = GetWindowThreadProcessId(hWnd, Task)
      List1(2).AddItem Task
    End If
End Sub

Private Sub Option1_Click()
  Call EnumWindows
End Sub

Private Sub Option2_Click()
  Call EnumWindows
End Sub
'---------- Ende Formular "Form1" alias Form1.frm  ----------

*ggg*
 
Thema:

Prozess PID rausfinden in C++

ANGEBOTE & SPONSOREN

https://www.mofapower.de/

Statistik des Forums

Themen
213.179
Beiträge
1.579.172
Mitglieder
55.878
Neuestes Mitglied
Satan666
Oben