AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Win32/Win64 API (native code) Delphi Window-Handel rausfinden, was mach ich falsch?
Thema durchsuchen
Ansicht
Themen-Optionen

Window-Handel rausfinden, was mach ich falsch?

Ein Thema von burning · begonnen am 29. Dez 2003 · letzter Beitrag vom 29. Dez 2003
Antwort Antwort
burning

Registriert seit: 29. Dez 2003
25 Beiträge
 
#1

Window-Handel rausfinden, was mach ich falsch?

  Alt 29. Dez 2003, 14:43
Hi,
Habe bisher nur ein bisschen mit Delphi rumgespielt, aber jetzt wollte ich mal wieder richtig anfangen.
Mein Ziel ist es, das Handle eines Fensters herauszubekommen ("Delphi"). Durch rumspielen hab ich kein brauchbares Ergebnis erzielt, also hab ich den Code von http://www.tipps.delphi-source.de/sy...001003-1.shtml einfach in mein eigenes Programm kopiert (ja es ist noch richtig schön mit TFORM1 etc. ), das sieht wie folgt aus, liefert aber immer das Ergebnis, dass kein Fenster gefunden werden kann, egal ob ich 'Delphi" angebe, oder '', oder sonst einen Namen eines Fensters. Woran liegts?
Ich wäre für jegliche Hilfe echt dankbar.

--- Programm ---


Delphi-Quellcode:
unit Unit1;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls;

type


  TForm1 = class(TForm)
    Button1: TButton;
    procedure Button1Click(Sender: TObject);
  private
    { Private-Deklarationen }
  public
    { Public-Deklarationen }

  end;

var
  Form1: TForm1;

implementation

{$R *.dfm}

type
  PFindWindowStruct = ^TFindWindowStruct;
  TFindWindowStruct = record
    Caption: string;
    ClassName: String;
    WindowHandle: THandle;
end;

function EnumWindowsProc(hWindow: hWnd; lParam: LongInt): boolean; stdcall;
var lpBuffer: PChar;
    WindowCaptionFound: boolean;
    ClassNameFound: boolean;
begin
  GetMem(lpBuffer, 255);
  result:=true;
  WindowCaptionFound:=false;
  ClassNameFound:=false;
  try
    if GetWindowText(hWindow, lpBuffer,255)>0 then
      if Pos(PFindWindowStruct(lParam).Caption, StrPas(lpBuffer))>0
      then WindowCaptionFound:=true;
    if PFindWindowStruct(lParam).ClassName='then
      ClassNameFound:=true
      else if GetClassName(hWindow, lpBuffer, 255)>0 then
        if Pos(PFindWindowStruct(lParam).ClassName, StrPas(lpBuffer))>0
        then ClassNameFound:=true;
    if (WindowCaptionFound and ClassNameFound) then begin
      PFindWindowStruct(lParam).WindowHandle:=hWindow;
      result:=false;
    end;
  finally
    FreeMem(lpBuffer, sizeof(lpBuffer^));
  end;
end;

function FindAWindow(caption: string; ClassName: string): THandle;
var WindowInfo: TFindWindowStruct;
begin
  with WindowInfo do begin
    caption:=caption;
    className:=ClassName;
    WindowHandle:=0;
    EnumWindows(@EnumWindowsProc,LongInt(@WindowInfo));
    result:=WindowHandle;
  end;
end;

procedure TForm1.Button1Click(Sender: TObject);
var TheWindowHandle: THandle;
begin
  TheWindowHandle:=FindAWindow('Delphi', '');
  if TheWindowHandle=0 then
    ShowMessage('Window not found!')
  else
    BringWindowToTop(TheWindowHandle);
end;

end.
[edit=sakura] [delphi]-Tags gesetzt. Mfg, sakura[/edit]
  Mit Zitat antworten Zitat
Benutzerbild von fkerber
fkerber
(CodeLib-Manager)

Registriert seit: 9. Jul 2003
Ort: Ensdorf
6.723 Beiträge
 
Delphi XE Professional
 
#2

Re: Window-Handel rausfinden, was mach ich falsch?

  Alt 29. Dez 2003, 14:52
Hi!

Ich mach das so:

Delphi-Quellcode:
function EnumWindowsProc(const hWnd : Longword; Param: lParam): LongBool; stdcall;
var
  Buffer: array[0..1024] of Char;
begin
  Result := True;
  GetWindowText(hWnd, Buffer, sizeof(Buffer));
  if lstrlen(Buffer) = 0 then
   begin
    exit;
   end
  else
   begin
    Form1.listbox1.items.Add (buffer);
   end;
end;


procedure TForm1.Button1Click(Sender: TObject);
var
LPARRAM : DWord;

begin
EnumWindows (@EnumWindowsProc,Integer(@LPARRAM));
end;


procedure TForm1.Button2Click(Sender: TObject);
var
hHandle: THandle;
i: integer;
begin
for i:=0 to Listbox1.Items.count-1 do begin
hHandle := FindWindow(nil, PChar(Listbox1.Items[i]));
//[...] für jedes Elemnt der LB ein Handle, das ich dann hier verwende
end;
end;
Ciao fkerber
Frederic Kerber
  Mit Zitat antworten Zitat
burning

Registriert seit: 29. Dez 2003
25 Beiträge
 
#3

Re: Window-Handel rausfinden, was mach ich falsch?

  Alt 29. Dez 2003, 15:04
THX!
Button 1 liefert mir nun ja eine nette Auflistung aller Prozess-Namen (oda?), das geht einwandfrei, aber Button 2 hat bei mir dann keinen Effekt...selbst wenn ich dort sowas wie

qwerHandle := FindWindow(nil,'Delphi');
BringWindowToTop(qwerHandle);

ergänze.
  Mit Zitat antworten Zitat
burning

Registriert seit: 29. Dez 2003
25 Beiträge
 
#4

Re: Window-Handel rausfinden, was mach ich falsch?

  Alt 29. Dez 2003, 16:44
des kann doch ned so schwer sein was zum teufel mach ich eigentlich falsch...
ich hoffe immernoch auf jemanden, der mir einen vollständigen code liefern kann, mit dem ich das handle eines fensters mit dem namen "xy*"herausbekommen kann...bitte...
  Mit Zitat antworten Zitat
Benutzerbild von fkerber
fkerber
(CodeLib-Manager)

Registriert seit: 9. Jul 2003
Ort: Ensdorf
6.723 Beiträge
 
Delphi XE Professional
 
#5

Re: Window-Handel rausfinden, was mach ich falsch?

  Alt 29. Dez 2003, 16:52
Hi!

Als Ergänzung (an der Stelle [...] (es wird noch eine Variable str: string definiert):

Delphi-Quellcode:
str:=gettext(hhandle);
if pos('Windows Media Player', str)<> 0 then begin ...
In dem Moment wo die If-Bedingung zutrifft, steht das Handle auf das den MediaPlayer.
Anstelle von Windows Media Player setzt du das ein, was in der Liste steht!


Ciao fkerber

[Edit]
Da fehlt noch die Funktion GetText:
Delphi-Quellcode:
function GetText(Wnd: HWND): string;
var
  textlength: Integer;
  Text: PChar;
begin
  textlength := SendMessage(Wnd, WM_GETTEXTLENGTH, 0, 0);
  if textlength = 0 then Result := ''
  else
  begin
    GetMem(Text, textlength + 1);
// Änderung ->
    if Assigned(Text) then
    try
      SendMessage(Wnd, WM_GETTEXT, textlength + 1, Integer(Text));
// Result := Text;
// Änderung ->
    SetString(Result, Text, lstrlen(Text));
    finally
      FreeMem(Text);
    end;
  end;
end;
[/Edit]
Ciao fkerber
Frederic Kerber
  Mit Zitat antworten Zitat
burning

Registriert seit: 29. Dez 2003
25 Beiträge
 
#6

Re: Window-Handel rausfinden, was mach ich falsch?

  Alt 29. Dez 2003, 17:29
Zitat von fkerber:
Hi!

Anstelle von Windows Media Player setzt du das ein, was in der Liste steht!

Ciao fkerber
Wohl eher den Namen des Programms von dem ich den Handle will, oda?
  Mit Zitat antworten Zitat
Benutzerbild von fkerber
fkerber
(CodeLib-Manager)

Registriert seit: 9. Jul 2003
Ort: Ensdorf
6.723 Beiträge
 
Delphi XE Professional
 
#7

Re: Window-Handel rausfinden, was mach ich falsch?

  Alt 29. Dez 2003, 17:59
Hi!

Eija, aber du kannst in der ListBox gucken, wie das Fenster genau heißt. z.B. bei Delphi heißt das Fenster ja Delphi7 in der Titelzeile steht aber immer noch das Projekt hintendran, so meinte ich das. Nicht alle Fenster heißen so, wie es in der Titelleiste steht, deswegen, da mal nachschauen!

Ciao fkerber

p.S. gehts ansonsten?
Frederic Kerber
  Mit Zitat antworten Zitat
burning

Registriert seit: 29. Dez 2003
25 Beiträge
 
#8

Re: Window-Handel rausfinden, was mach ich falsch?

  Alt 29. Dez 2003, 18:06
Danke, ich denke ich werde später nochmal alles von Grund auf durchgehen und schauen, obs dann geht. Im Moment bekomm ich meinen PC noch ned dazu bewegt, das Fenster nach vorne zu holen, welches ich will...

/EDIT:
Es geht

Vielen Dank!
Nun werd ich mal noch ein bisschen rumspielen und noch ein paar Sachen testen...
  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:29 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