![]() |
Titelloses Fenster eines Fremdprogrammes positionieren?
Hallo! Alle mir bekannten Utilities zur Positionierung von Fremdprogrammen auf dem Desktop verwenden zur Identifizierung eines bestimmten Programmes, dessen Bildschirmposition verändert werden soll, den Titeltext (Caption) des betreffenden Programmfensters. Nun habe ich aber den Fall eines GUI-Programmes, das keinen Fenstertitel hat. Wie kann ein solches Programm identifiziert und dann seine Bildschirmposition verändert werden?
|
Re: Titelloses Fenster eines Fremdprogrammes positionieren?
Eventuell ist das über den Fensterklassennamen möglich. WinSpy oder ähnliches sollte da helfen.
|
Re: Titelloses Fenster eines Fremdprogrammes positionieren?
Eventuell an dem Namen des Prozesses? Daran kannst du doch die Prozess-Id ermitteln und weiterführend davon die Fenster. Oder liege ich falsch?
|
Re: Titelloses Fenster eines Fremdprogrammes positionieren?
In WinSpy++ wird bei Class "#32770 (Unicode)" angezeigt. Ist das ein temporärer Wert oder kann dies einer Fensterklasse explizit zugeordnet werden?
Aus dem Prgrammnamen das Fensterhandle ermitteln? Werde dem mal nachgehen. Sollte jemand da schon eine fertige Lösung haben, wäre das natürlich erst mal positiv ...! |
Re: Titelloses Fenster eines Fremdprogrammes positionieren?
Hallo, ich habe es jetzt geschafft, die PID und das Fensterhandle vom Programmnamen zu bekommen:
Delphi-Quellcode:
GetWindowCaption:
program RepositionWindowFromExeName;
{$APPTYPE CONSOLE} uses Dialogs, // debug JclSysInfo, SysUtils, Windows; var APID: Cardinal; AHandle: THandle; rc: TRect; begin try APID := GetPidFromProcessName('QGet.exe'); // 11424 if APID <> INVALID_HANDLE_VALUE then begin AHandle := GetMainAppWndFromPid(APID); MessageDlg(GetWindowCaption(AHandle), mtInformation, [mbOK], 0); // leer! GetWindowRect(AHandle, rc); MessageDlg(IntToStr(rc.Left) + #13#10 + IntToStr(rc.Top) + #13#10 + IntToStr(rc.Right) + #13#10 + IntToStr(rc.Bottom) + #13#10 , mtInformation, [mbOK], 0); end; except on E:Exception do Writeln(E.Classname, ': ', E.Message); end; end. ![]() GetWindowRect: ![]() Wie man sieht, funktioniert das Erfassen der Fensterkoordinaten nicht. Könnte jemand weiterhelfen? |
Re: Titelloses Fenster eines Fremdprogrammes positionieren?
Nicht nur das Erfassen funktioniert nicht. Hast du denn schon mal geguckt, ob das Fensterhandle überhaupt gütig ist? nd woher kommt die Funktion GetMainAppWndFromPid? Kommt die aus Jcl? hast du diese schon mal debuggt und geguckt, was da passiert?
Was hast du überhaupt schon unternommen, um den Fehler zu finden? |
Re: Titelloses Fenster eines Fremdprogrammes positionieren?
Zitat:
Um wieder zum Thema zurückzukehren: Es ist mir jetzt gelungen, die Koordinaten des Fensters herauszufinden:
Delphi-Quellcode:
Jetzt muss ich nur noch eine Methode finden, die Koordinaten des Fensters zu ändern.
program RepositionWindowFromExeName;
{$APPTYPE CONSOLE} uses Dialogs, // debug JclSysInfo, SysUtils, Windows; var AHandle: THandle; rc: TRect; begin try AHandle := FindWindow('#32770', nil); GetWindowRect(AHandle, rc); MessageDlg(IntToStr(rc.Left) + #13#10 + IntToStr(rc.Top) + #13#10 + IntToStr(rc.Right) + #13#10 + IntToStr(rc.Bottom) + #13#10 , mtInformation, [mbOK], 0); except on E:Exception do Writeln(E.Classname, ': ', E.Message); end; end. |
Re: Titelloses Fenster eines Fremdprogrammes positionieren?
Also ich wüßte nicht, was an meinem neutralen Ton daneben war. Und die Frage. was du schon probiert hast, habe ich nur gestellt, damit wir nicht Vorschläge machen, die du schon alle probiert hast.
Den Klassennamen in diesem Fall zu verwende ist schlecht. Jedes mit der MFC erzeugte Fenster hat diesen Klassennmane, er ist also nicht unbedingt eindeutig. |
Re: Titelloses Fenster eines Fremdprogrammes positionieren?
Zitat:
![]() |
Re: Titelloses Fenster eines Fremdprogrammes positionieren?
Zitat:
Zitat:
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 18:37 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz