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
 
Benutzerbild von Helmi
Helmi

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

Problem mit Zuordnung der Handle eines Processes

  Alt 7. Mär 2012, 17: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 17:57 Uhr)
  Mit Zitat antworten Zitat
 


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 03:37 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