AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Win32/Win64 API (native code) Delphi Prozess-Handle vs. Fenster-Handle
Thema durchsuchen
Ansicht
Themen-Optionen

Prozess-Handle vs. Fenster-Handle

Ein Thema von Chewie · begonnen am 26. Jul 2002 · letzter Beitrag vom 9. Aug 2002
Antwort Antwort
Seite 2 von 2     12   
jbg

Registriert seit: 12. Jun 2002
3.483 Beiträge
 
Delphi 10.1 Berlin Professional
 
#11
  Alt 27. Jul 2002, 22:14
Dein Weg kann theoretisch auch funktionieren. Man weiß ja nie wie Windows reagiert.
  Mit Zitat antworten Zitat
Chewie

Registriert seit: 10. Jun 2002
Ort: Deidesheim
2.886 Beiträge
 
Turbo Delphi für Win32
 
#12
  Alt 27. Jul 2002, 23:02
Na ja, wenigstens etwas. Aber heut abend nicht mehr, ich hab zu viel getrunken, um das noch hinzukriegen und zu wenig, um es problemlos zu programmieren
Martin Leim
Egal wie dumm man selbst ist, es gibt immer andere, die noch dümmer sind
  Mit Zitat antworten Zitat
Chewie

Registriert seit: 10. Jun 2002
Ort: Deidesheim
2.886 Beiträge
 
Turbo Delphi für Win32
 
#13
  Alt 28. Jul 2002, 14:18
Ich glaub, ich bin zu blöd, um EnumWindows zu benutzen. Folgenden Code benutze ich zum Testen:

Code:
function EnumWindowsProc(Hnd: HWND; Lines: TStrings): Boolean; stdcall;
var
  FileName: Array[0..255] of Char;
begin
  GetWindowModuleFileName(Hnd, @FileName, 255);
  Lines.Add(InttoStr(Hnd) + ': ' + FileName);
  if FileName = AppName then
  begin
    Result := False;
  end
  else
  begin
    Result := True;
  end;
end;
und
Code:
AppName := ParamStr(0);
  EnumWindows(@EnumWindowsProc, Integer(Form1.Memo1.Lines));
Doch komischerweise kommen in dieser Liste immer die gleichen Handles vor. Wenn ich die in einem ShowWindow-Aufruf verwende, veränder ich nicht das Fenster, das ich gewollt hab (also das meines Programmes), sondern irgendein anderes, meistens eins von meinem AntiVirus-Programm. Was heißt eigentlich genau "top-level-window"? Weil das, was ich gedacht habb, dass es heißt, kann es wohl nicht heißen, denn sonst hätt ich wohl kaum 30 dieser Fenster mit dem gleichen Pfad und Dateinamen gefunden.
Martin Leim
Egal wie dumm man selbst ist, es gibt immer andere, die noch dümmer sind
  Mit Zitat antworten Zitat
jbg

Registriert seit: 12. Jun 2002
3.483 Beiträge
 
Delphi 10.1 Berlin Professional
 
#14
  Alt 28. Jul 2002, 15:32
top-level-window = Hauptfenster der Anwendung.

mit diesem Code kannst du herausfinden welches deiner Fenster du gefunden hast:
Code:
var
  Buf: array[0..1024] of Char;
  ClassName: string;
begin
  SetString(ClassName, Buf, GetClassName(Hnd, Buf, 1024));
  if ClassName = 'TApplication' then ...
   else if ClassName = 'TForm1' then ...
   else if ClassName = 'TForm2' ...
end;
  Mit Zitat antworten Zitat
Chewie

Registriert seit: 10. Jun 2002
Ort: Deidesheim
2.886 Beiträge
 
Turbo Delphi für Win32
 
#15
  Alt 9. Aug 2002, 16:04
So, nachdem ich schon aufgegeben hatte, hab ich jetzt doch mal weiter gemacht. Auch wenn ich es sehr seltsam finde, dass ich in meiner Anwendung auch Handles, die laut ClassName zu WinAmp gehören, finde, scheint eine Sache zu funktionieren: Wenn ich das Handle von 'Form1' als Parameter in ShowWindow einsetze, funktioniert es. Das Problem ist nur, dass es jeweils zwei Handles zu TForm1, TApplication etc. gibt.

Falls es jemanden interessiert, hier soweit der Code der Callback-Funnktion:
Code:
function EnumWindowsProc(Hnd: HWND; Lines: TStrings): Boolean; stdcall;
var
  FileName: Array[0..255] of Char;
  ClassName: String;
  Buf: Array[0..1023] of Char;
begin
  GetWindowModuleFileName(Hnd, @FileName, 255);
  if FileName = AppName then
  begin
    SetString(ClassName, Buf, GetClassName(Hnd, Buf, 1024));
    if Classname = 'TForm1' then
    begin
      Lines.Add(Classname + ':' + InttoStr(Hnd));
      Result := False;
      ShowWindow(hnd,SW_MAXIMIZE);
    end;
  end
  else
  begin
    Result := True;
  end;
end;
Auf der Form befindet sich z. B. eine Listbox. Folgendermaßen wird die Callback-Funktion aufgerufen:
Code:
AppName := ParamStr(0);
EnumWindows(@EnumWindowsProc, Integer(Listbox1.Items));
Jetzt versuch ich das gleiche Mal für Anwendungen, die nicht in Delphi geschrieben sind.
Martin Leim
Egal wie dumm man selbst ist, es gibt immer andere, die noch dümmer sind
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 2 von 2     12   


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 16:01 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