AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Win32/Win64 API (native code) Delphi Problem mit Zuordnung der Handle eines Processes
Thema durchsuchen
Ansicht
Themen-Optionen

Problem mit Zuordnung der Handle eines Processes

Ein Thema von Helmi · begonnen am 7. Mär 2012 · letzter Beitrag vom 7. Mär 2012
Antwort Antwort
Seite 1 von 2  1 2      
Benutzerbild von Helmi
Helmi

Registriert seit: 29. Dez 2003
Ort: Erding, Republik Bayern
3.336 Beiträge
 
Delphi XE2 Professional
 
#1

Problem mit Zuordnung der Handle eines Processes

  Alt 7. Mär 2012, 18:45
Hallo,

ich habe folgende Procedure um eine Datei zu starten und dessen Fenster zu verstecken:
Delphi-Quellcode:
procedure start_Process(const FileName: String; out HWindow: HWND; out Process: Cardinal);

  function EnumWindowsProc(hWnd: HWND; lParam: LPARAM): BOOL; stdcall;
   begin
     TList(lParam).Add(Pointer(hWnd));
     Result := True;
   end;

var
   i : Integer;
   StartupInfo: TStartupInfo;
   ProcessInfo: TProcessInformation;
   List : TList;
   ProcessId : DWORD;

begin
  If not FileExists(FileName) then
    exit;

  List := TList.Create;

  try
    //Variable mit nullen auffüllen und Größe setzen
    FillChar(StartupInfo, SizeOf(TStartupInfo), 0);
    StartupInfo.cb := SizeOf(TStartupInfo);

    StartupInfo.dwFlags := STARTF_USESHOWWINDOW;
    StartupInfo.wShowWindow := SW_HIDE;

    If CreateProcess(nil, PChar(FileName + #0), nil, nil, false, 0, nil, nil,
                      StartupInfo, ProcessInfo) then
      begin
        WaitForInputIdle(ProcessInfo.hProcess, INFINITE);

        If EnumWindows(@EnumWindowsProc, Integer(List)) then
          for i := 0 to Pred(List.Count) do
            begin
              GetWindowThreadProcessId(Integer(List.Items[i]), ProcessId);

              If ProcessInfo.dwProcessId = ProcessId then
                begin
                  HWindow := Integer(List.Items[i]);

                  Process := ProcessInfo.hProcess;

                  break;
                end;
            end;

        CloseHandle(ProcessInfo.hProcess);
        CloseHandle(ProcessInfo.hThread);
      end;
  finally
    //Liste löschen und freigeben
    FreeAndNil(List);
  end;
end;

Diese Funktion nutz ich um den Exenamen zu erhalten:
Delphi-Quellcode:
function GetProcessExeName(hProcess: THandle): String;
var
   lpBuffer: array[0..MAX_PATH -1] of Char;
begin
  ZeroMemory(@lpBuffer, SizeOf(lpBuffer));
  If GetModuleFileNameEx(hProcess, 0, lpBuffer, SizeOf(lpBuffer)) > 0 then
    Result := String(lpBuffer)
  else
    Result := SyserrorMessage(GetlastError);
end;

Und diese Funktion um den Titel auszulesen:
Delphi-Quellcode:
function GetWindowText(Wnd: HWND): String;
var
   WndCaption: PWideChar;
   len: Integer;

begin
   len := SendMessage(Wnd, WM_GETTEXTLENGTH, 0, 0);

   If len > 0 then
     begin
       len := len * 2;
       WndCaption := GetMemory(len + 1);

       If Assigned(WndCaption) then
       begin
         SendMessageW(Wnd, WM_GETTEXT, len + 1, Integer(WndCaption));

         Result := String(WndCaption);

         FreeMemory(WndCaption);
       end;
     end;
end;
Ich hab jetzt das Problem, welchen Handle ich zu welcher Funktion nutze.

Also für die letzte Funktion kann ich dieses Handle nutzen aus der ersten Procedure HWindow := Integer(List.Items[i]); Nur welches Handle brauch ich für die zweite Funktion?
Ich hab es mit beiden ausprobiert, aber jedesmal erhalte ich als Systemfehlermeldung "Handle ungültig"

Wen muss man bestechen um eine ordentliche Codeformatierung zu erhalten?
mfg
Helmi

>> Theorie ist Wissen, dass nicht funktioniert - Praxis ist, wenn alles funktioniert und keiner weiss warum! <<

Geändert von Helmi ( 7. Mär 2012 um 18:57 Uhr)
  Mit Zitat antworten Zitat
Benutzerbild von Luckie
Luckie

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

AW: Problem mit Zuordnung der Handle eines Processes

  Alt 7. Mär 2012, 18:54
Sagt doch schon der Datentyp: HWD, ein Fenster Handle, welches man mit FindWindow oder EnumWindows bekommt.
Michael
Ein Teil meines Codes würde euch verunsichern.
  Mit Zitat antworten Zitat
Benutzerbild von Helmi
Helmi

Registriert seit: 29. Dez 2003
Ort: Erding, Republik Bayern
3.336 Beiträge
 
Delphi XE2 Professional
 
#3

AW: Problem mit Zuordnung der Handle eines Processes

  Alt 7. Mär 2012, 18:56
Argl!
Ich komm einfach ins Alter!

Ich meinte natürlich nicht die letzte Funktion sondern die zweite!

Ich werds oben korrigieren
mfg
Helmi

>> Theorie ist Wissen, dass nicht funktioniert - Praxis ist, wenn alles funktioniert und keiner weiss warum! <<
  Mit Zitat antworten Zitat
Benutzerbild von DeddyH
DeddyH

Registriert seit: 17. Sep 2006
Ort: Barchfeld
27.625 Beiträge
 
Delphi 12 Athens
 
#4

AW: Problem mit Zuordnung der Handle eines Processes

  Alt 7. Mär 2012, 19:06
Das sollte eigentlich das Prozesshandle sein, also das, was Du in Process ausgibst.
Detlef
"Ich habe Angst vor dem Tag, an dem die Technologie unsere menschlichen Interaktionen übertrumpft. Die Welt wird eine Generation von Idioten bekommen." (Albert Einstein)
Dieser Tag ist längst gekommen
  Mit Zitat antworten Zitat
Benutzerbild von Helmi
Helmi

Registriert seit: 29. Dez 2003
Ort: Erding, Republik Bayern
3.336 Beiträge
 
Delphi XE2 Professional
 
#5

AW: Problem mit Zuordnung der Handle eines Processes

  Alt 7. Mär 2012, 19:10
Das sollte eigentlich das Prozesshandle sein, also das, was Du in Process ausgibst.
Dacht ich auch - nur bekomme ich mit diesem Handle auch die Meldung "Handle ungültig".
mfg
Helmi

>> Theorie ist Wissen, dass nicht funktioniert - Praxis ist, wenn alles funktioniert und keiner weiss warum! <<
  Mit Zitat antworten Zitat
Benutzerbild von DeddyH
DeddyH

Registriert seit: 17. Sep 2006
Ort: Barchfeld
27.625 Beiträge
 
Delphi 12 Athens
 
#6

AW: Problem mit Zuordnung der Handle eines Processes

  Alt 7. Mär 2012, 19:12
Vielleicht wird das u.U. nicht zugewiesen, initialisiert ist es ja auch nicht. Setz doch die Zeile
Zitat:
Process := ProcessInfo.hProcess;
mal spaßeshalber vor das WaitForInputIdle.
Detlef
"Ich habe Angst vor dem Tag, an dem die Technologie unsere menschlichen Interaktionen übertrumpft. Die Welt wird eine Generation von Idioten bekommen." (Albert Einstein)
Dieser Tag ist längst gekommen
  Mit Zitat antworten Zitat
Benutzerbild von Helmi
Helmi

Registriert seit: 29. Dez 2003
Ort: Erding, Republik Bayern
3.336 Beiträge
 
Delphi XE2 Professional
 
#7

AW: Problem mit Zuordnung der Handle eines Processes

  Alt 7. Mär 2012, 19:14
Vielleicht wird das u.U. nicht zugewiesen, initialisiert ist es ja auch nicht. Setz doch die Zeile
Zitat:
Process := ProcessInfo.hProcess;
mal spaßeshalber vor das WaitForInputIdle.
Leider gleiches Ergebnis
mfg
Helmi

>> Theorie ist Wissen, dass nicht funktioniert - Praxis ist, wenn alles funktioniert und keiner weiss warum! <<
  Mit Zitat antworten Zitat
Benutzerbild von DeddyH
DeddyH

Registriert seit: 17. Sep 2006
Ort: Barchfeld
27.625 Beiträge
 
Delphi 12 Athens
 
#8

AW: Problem mit Zuordnung der Handle eines Processes

  Alt 7. Mär 2012, 19:20
Könnte das mit dem CloseHandle zusammenhängen?
Detlef
"Ich habe Angst vor dem Tag, an dem die Technologie unsere menschlichen Interaktionen übertrumpft. Die Welt wird eine Generation von Idioten bekommen." (Albert Einstein)
Dieser Tag ist längst gekommen
  Mit Zitat antworten Zitat
Benutzerbild von Helmi
Helmi

Registriert seit: 29. Dez 2003
Ort: Erding, Republik Bayern
3.336 Beiträge
 
Delphi XE2 Professional
 
#9

AW: Problem mit Zuordnung der Handle eines Processes

  Alt 7. Mär 2012, 19:23
Könnte das mit dem CloseHandle zusammenhängen?
Ähm - also - wie soll ich sagen *hüstel* - ist scho a bisserl peinlich *hüstel*

Das war das Problem! - Irgendwie logisch!

Dank dir!
mfg
Helmi

>> Theorie ist Wissen, dass nicht funktioniert - Praxis ist, wenn alles funktioniert und keiner weiss warum! <<
  Mit Zitat antworten Zitat
Benutzerbild von DeddyH
DeddyH

Registriert seit: 17. Sep 2006
Ort: Barchfeld
27.625 Beiträge
 
Delphi 12 Athens
 
#10

AW: Problem mit Zuordnung der Handle eines Processes

  Alt 7. Mär 2012, 19:33
Nicht weitersagen: ich bin da auch erst drauf gekommen, nachdem ich nochmal im MSDN unter CreateProcess nachgeschaut hatte und das CloseHandle mir dann in den Bemerkungen ins Auge sprang
Detlef
"Ich habe Angst vor dem Tag, an dem die Technologie unsere menschlichen Interaktionen übertrumpft. Die Welt wird eine Generation von Idioten bekommen." (Albert Einstein)
Dieser Tag ist längst gekommen
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 2  1 2      


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 20:49 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