AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Win32/Win64 API (native code) Delphi hProcess aus dwProcessId bekommen?
Thema durchsuchen
Ansicht
Themen-Optionen

hProcess aus dwProcessId bekommen?

Ein Thema von gandime · begonnen am 3. Feb 2009 · letzter Beitrag vom 3. Feb 2009
Antwort Antwort
gandime
(Gast)

n/a Beiträge
 
#1

hProcess aus dwProcessId bekommen?

  Alt 3. Feb 2009, 00:19
Hi,
ich würde gerne wissen wie ich den hProcess aus einer dwProcessId bekomme?
Hab schon nen bissel gesucht aber bis jetzt läuft das nicht ganz so :/
hProcess:=OpenProcess(PROCESS_QUERY_INFORMATION, true, dwProcessId); Ich bekomme immer den Rückgabewert 0.
Liegt es vlt an Vista?

mfg
gandime
  Mit Zitat antworten Zitat
Benutzerbild von Luckie
Luckie

Registriert seit: 29. Mai 2002
37.621 Beiträge
 
Delphi 2006 Professional
 
#2

Re: hProcess aus dwProcessId bekommen?

  Alt 3. Feb 2009, 00:25
Welches Betriebssystem? Was sagt MSDN-Library durchsuchenGetLastError?
Michael
Ein Teil meines Codes würde euch verunsichern.
  Mit Zitat antworten Zitat
gandime
(Gast)

n/a Beiträge
 
#3

Re: hProcess aus dwProcessId bekommen?

  Alt 3. Feb 2009, 00:36
oh ich hatte dwProcessId ausversehen nicht zugewiesen^^
aber trotzdem bekomme ich nicht den richtigen hProcess den ich möchte^^
Delphi-Quellcode:
var
  StartInfo: TStartupInfo;
  ProcInfo: TProcessInformation;
  i:integer;
begin
  ZeroMemory(@StartInfo, SizeOf(TStartupInfo));
  StartInfo.cb := SizeOf(TStartupInfo);
  CreateProcess(nil,Pchar('notepad'),nil,nil,False,0,nil,nil,StartInfo,ProcInfo);
Diesen ProcInfo.hProcess hätte ich gerne.
Aber von einem bereits gestarteten Process!
  Mit Zitat antworten Zitat
Benutzerbild von jaenicke
jaenicke

Registriert seit: 10. Jun 2003
Ort: Berlin
9.332 Beiträge
 
Delphi 11 Alexandria
 
#4

Re: hProcess aus dwProcessId bekommen?

  Alt 3. Feb 2009, 00:46
Zitat von gandime:
Ich bekomme immer den Rückgabewert 0.
Liegt es vlt an Vista?
Nicht direkt, aber wenn du keine Zugriffsrechte auf den anderen Prozess hast, dann bekommst du 0 zurück. Das merkst du nur unter XP nicht so, weil man standardmäßig mehr Rechte hatte.

Kann es sein, dass es sich um einen Systemprozess oder einen anderen unter einem anderen Benutzerkonto ausgeführten Prozess handelt?

Das von Luckie angesprochene GetLastError wird in dem Fall den Fehler 5 zurückgeben:
"Zugriff verweigert"
ShowMessage('Fehler ' + IntToStr(GetLastError) + ': ' + SysErrorMessage(GetLastError)); // EDIT:
Die Benachrichtigung über Antworten geht wohl irgendwie nicht richtig. Die Antwort habe ich nicht gesehen bei der Antwort.

Zitat von gandime:
aber trotzdem bekomme ich nicht den richtigen hProcess den ich möchte^^
Wie nicht richtig? 0 oder woran siehst du, dass es nicht das richtige Handle ist?
Sebastian Jänicke
Alle eigenen Projekte sind eingestellt, ebenso meine Homepage, Downloadlinks usw. im Forum bleiben aktiv!
  Mit Zitat antworten Zitat
gandime
(Gast)

n/a Beiträge
 
#5

Re: hProcess aus dwProcessId bekommen?

  Alt 3. Feb 2009, 01:00
Meinen letzten Post beachten!
das Problem mit dem Rückgabewert 0 war meine schuld.

hab folgenden Code Gefunden, der Die dwProcessId aus einem hProcess bekommt.
Dafür reicht es warscheinlich folgenden Codeschnipsel zu modifizieren:
Delphi-Quellcode:
  if not Assigned(FNGetProcessId) then
    FNGetProcessId := TFNGetProcessId(
      GetProcAddress(GetModuleHandle(kernel32), 'GetProcessId'));
  if Assigned(FNGetProcessId) then
    Result := FNGetProcessId(Process)
Anstatt "GetProcessId" bestimmt etwas anderes aber was?^^

Zum Testen habe ich folgendes geschreiben:
Delphi-Quellcode:
var
  StartInfo: TStartupInfo;
  ProcInfo: TProcessInformation;
  i:integer;
begin
  ZeroMemory(@StartInfo, SizeOf(TStartupInfo));
  StartInfo.cb := SizeOf(TStartupInfo);
  CreateProcess(nil,Pchar('notepad'),nil,nil,False,0,nil,nil,StartInfo,ProcInfo);
  sleep(1000);
  if OpenProcess(PROCESS_CREATE_PROCESS , false, ProcInfo.dwProcessId)=ProcInfo.hProcess then
    showmessage('ok')
  else
    showmessage('');
und es sind unterschiedliche hProcess!
  Mit Zitat antworten Zitat
Benutzerbild von jaenicke
jaenicke

Registriert seit: 10. Jun 2003
Ort: Berlin
9.332 Beiträge
 
Delphi 11 Alexandria
 
#6

Re: hProcess aus dwProcessId bekommen?

  Alt 3. Feb 2009, 01:06
Zitat von gandime:
Meinen letzten Post beachten!
das Problem mit dem Rückgabewert 0 war meine schuld.
Das habe ich ja dann auch dazu editiert, ich hatte die Antwort nicht angezeigt bekommen.

Zitat von gandime:
und es sind unterschiedliche hProcess!
Das heißt aber ja nicht, dass die falsch sind. Du kannst ja verschiedene Handles zum selben Prozess haben.

Das kannst du durch wiederholten Aufruf von OpenProcess ja auch ausprobieren, du bekommst verschiedene weitere Handles. Und du kannst mit diesen verschiedenen Handles trotzdem z.B. die Priorität des selben Prozesses verändern.
Sebastian Jänicke
Alle eigenen Projekte sind eingestellt, ebenso meine Homepage, Downloadlinks usw. im Forum bleiben aktiv!
  Mit Zitat antworten Zitat
Benutzerbild von Luckie
Luckie

Registriert seit: 29. Mai 2002
37.621 Beiträge
 
Delphi 2006 Professional
 
#7

Re: hProcess aus dwProcessId bekommen?

  Alt 3. Feb 2009, 01:07
Was willst du denn eigentlich mit dem Prozesshandle machen und warum nimmst du gerade PROCESS_CREATE_PROCESS als Zugriffsrecht?
Michael
Ein Teil meines Codes würde euch verunsichern.
  Mit Zitat antworten Zitat
gandime
(Gast)

n/a Beiträge
 
#8

Re: hProcess aus dwProcessId bekommen?

  Alt 3. Feb 2009, 01:44
ich weiss auch nicht warum es nicht funktioniert hat aber ich konnte CreateRemoteThread() nicht mit dem HProcess aufrufen Oo
jetzt funktioniert es aber wunderbar
danke
  Mit Zitat antworten Zitat
Benutzerbild von jaenicke
jaenicke

Registriert seit: 10. Jun 2003
Ort: Berlin
9.332 Beiträge
 
Delphi 11 Alexandria
 
#9

Re: hProcess aus dwProcessId bekommen?

  Alt 3. Feb 2009, 01:48
Zitat von gandime:
ich weiss auch nicht warum es nicht funktioniert hat aber ich konnte CreateRemoteThread() nicht mit dem HProcess aufrufen Oo
Naja, am Anfang hattest du als Parameter PROCESS_QUERY_INFORMATION übergeben. Mit einem so erhaltenen Handle kannst du eben auch nur das tun: Informationen abfragen...

Du brauchst aber mehrere Rechte, diese stehen in der Dokumentation zu CreateRemoteThread:
Zitat:
A handle to the process in which the thread is to be created. The handle must have the PROCESS_CREATE_THREAD, PROCESS_QUERY_INFORMATION, PROCESS_VM_OPERATION, PROCESS_VM_WRITE, and PROCESS_VM_READ access rights.
Sebastian Jänicke
Alle eigenen Projekte sind eingestellt, ebenso meine Homepage, Downloadlinks usw. im Forum bleiben aktiv!
  Mit Zitat antworten Zitat
mr_emre_d
(Gast)

n/a Beiträge
 
#10

Re: hProcess aus dwProcessId bekommen?

  Alt 3. Feb 2009, 04:52
Delphi-Quellcode:
hWnd, dwPid,
hProcess: Cardinal;
begin
  hWnd := FindWindow('Notepad', 0);
  if hWnd <> 0 then
  begin
    GetWindowThreadProcessID( hWnd, dwPid );
    if dwPid <> 0 then
    begin
      hProcess := OpenProcess( PROCESS_ALL_ACCESS, False, dwPid );
      if hProcess <> 0 then
      begin
        // code
      end else
        // Errorbehandlung
    end else
      // Errorbehandlung
  end else
    // Errorbehandlung
end;
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 06:00 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz