Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Win32/Win64 API (native code) (https://www.delphipraxis.net/17-win32-win64-api-native-code/)
-   -   Delphi Fensterposition/-größe einer fremden Anwendung (https://www.delphipraxis.net/79343-fensterposition-groesse-einer-fremden-anwendung.html)

MuTzE 20. Okt 2006 15:27


Fensterposition/-größe einer fremden Anwendung
 
Hallo,

ich möchte eine fremde Anwendung fernsteuern und brauche dafür die Position des Fensters auf dem Desktop, da ich das Handle eines Menüreiters nicht ermitteln kann. Halt so ein Skinproggy.

Kann mir da jemand helfen?

Sunlight7 20. Okt 2006 15:33

Re: Fensterposition/-größe einer fremden Anwendung
 
Wenn Du das Handle des Fensters hast: GetWindowRect

MuTzE 20. Okt 2006 15:50

Re: Fensterposition/-größe einer fremden Anwendung
 
Also das mit der Größe wäre ja dann erledigt, aber wie bestimme ich die Position des Fensters, das ist wichtiger.

Sunlight7 20. Okt 2006 16:08

Re: Fensterposition/-größe einer fremden Anwendung
 
Die Position steht in der Rect.Left und Rect.Top :zwinker:

Oder meinst Du die Position in der Z-Order? :gruebel:

MuTzE 20. Okt 2006 16:17

Re: Fensterposition/-größe einer fremden Anwendung
 
Die Position auf dem Desktop!

Ich kann komischer weise nehmen was ich will, ich bekomme immer 512 und 384 raus!
Egal wie oft ich das Fenster verschiebe. Selbst wenn ich nach meiner Anwendung suche!

Oder mache ich was falsch?


Delphi-Quellcode:
procedure TForm1.Button1Click(Sender: TObject);
var
  TheWindowHandle: THandle;
  aRect: TRect;
begin
  ...
  GetWindowRect(TheWindowHandle, aRect);
  label1.Caption := IntToStr(aRect.Left);
  label2.Caption := IntToStr(aRect.Top);
end;

EWeiss 20. Okt 2006 16:28

Re: Fensterposition/-größe einer fremden Anwendung
 
Zitat:

Zitat von MuTzE
Die Position auf dem Desktop!

Ich kann komischer weise nehmen was ich will, ich bekomme immer 512 und 384 raus!
Egal wie oft ich das Fenster verschiebe. Selbst wenn ich nach meiner Anwendung suche!

Oder mache ich was falsch?


Delphi-Quellcode:
procedure TForm1.Button1Click(Sender: TObject);
var
  TheWindowHandle: THandle;
  aRect: TRect;
begin
  ...
  GetWindowRect(TheWindowHandle, aRect);
  label1.Caption := IntToStr(aRect.Left);
  label2.Caption := IntToStr(aRect.Top);
end;


Bei mir gehts!
Delphi-Quellcode:
procedure TForm1.Button1Click(Sender: TObject);
var
  TheWindowHandle: THandle;
  aRect: TRect;
begin
  TheWindowHandle := self.Handle;
  GetWindowRect(TheWindowHandle, aRect);
  label1.Caption := IntToStr(aRect.Left);
  label2.Caption := IntToStr(aRect.Top);
end;
gruß

MuTzE 20. Okt 2006 16:41

Re: Fensterposition/-größe einer fremden Anwendung
 
Hm wenn ich es so mache gehts bei mir auch. Komisch.


Ich habe diesen Code benutzt um an das Handle des Fensters zu kommen:


Delphi-Quellcode:
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(WinCaption: string; WinClassName: string): THandle;
var WindowInfo: TFindWindowStruct;
begin
  with WindowInfo do begin
    caption := WinCaption;
    className := WinClassName;
    WindowHandle := 0;
    EnumWindows(@EnumWindowsProc, LongInt(@WindowInfo));
    result := WindowHandle;
  end;
end;

Und damit gehts irgendwie net.

Hat jemand ne andere Lösung um an das Fensterhandle zu kommen?

Sunlight7 20. Okt 2006 16:50

Re: Fensterposition/-größe einer fremden Anwendung
 
Hier im Forum suchenFindWindow

PS: Neue Frage: Neuer Thread

MuTzE 20. Okt 2006 17:43

Re: Fensterposition/-größe einer fremden Anwendung
 
Ja toll und warum geht der scheiss nicht?

Delphi-Quellcode:
procedure TForm1.Button1Click(Sender: TObject);
var
 TheWindowHandle: THandle;
 aRect: TRect;
begin
 TheWindowHandle := FindWindow(PChar('TApplication'), PChar('Project1'));
 GetWindowRect(TheWindowHandle, aRect);
 label4.Caption := IntToStr(aRect.Left);
 label5.Caption := IntToStr(aRect.Top);
end;


EDIT:


Gut, damit gehts.

TheWindowHandle := FindWindow(PChar('TForm1'), nil);


Aber wie jetz den Namen der anderen Anwendung herausfinden?

EWeiss 20. Okt 2006 17:52

Re: Fensterposition/-größe einer fremden Anwendung
 
Zitat:

Aber wie jetz den Namen der anderen Anwendung herausfinden?
Hier im Forum suchenGetWindowText
Pufferlänge kannst du über Hier im Forum suchenGetWindowTextLength in erfahrung bringen

gruß


Alle Zeitangaben in WEZ +1. Es ist jetzt 07:27 Uhr.

Powered by vBulletin® Copyright ©2000 - 2022, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2021 by Daniel R. Wolf