AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Win32/Win64 API (native code) Delphi Titelloses Fenster eines Fremdprogrammes positionieren?
Thema durchsuchen
Ansicht
Themen-Optionen

Titelloses Fenster eines Fremdprogrammes positionieren?

Ein Thema von PeterPanino · begonnen am 8. Mär 2009 · letzter Beitrag vom 9. Mär 2009
Antwort Antwort
Seite 1 von 2  1 2      
PeterPanino

Registriert seit: 4. Sep 2004
1.451 Beiträge
 
Delphi 10.4 Sydney
 
#1

Titelloses Fenster eines Fremdprogrammes positionieren?

  Alt 8. Mär 2009, 21:40
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?
  Mit Zitat antworten Zitat
HalloDu

Registriert seit: 24. Apr 2006
Ort: Oelde
267 Beiträge
 
Delphi 2009 Professional
 
#2

Re: Titelloses Fenster eines Fremdprogrammes positionieren?

  Alt 8. Mär 2009, 21:41
Eventuell ist das über den Fensterklassennamen möglich. WinSpy oder ähnliches sollte da helfen.
Frederic H.
  Mit Zitat antworten Zitat
quendolineDD

Registriert seit: 19. Apr 2007
Ort: Dresden
781 Beiträge
 
Turbo Delphi für Win32
 
#3

Re: Titelloses Fenster eines Fremdprogrammes positionieren?

  Alt 8. Mär 2009, 21:42
Eventuell an dem Namen des Prozesses? Daran kannst du doch die Prozess-Id ermitteln und weiterführend davon die Fenster. Oder liege ich falsch?
Lars S.
Wer nicht mit der Zeit geht, geht mit der Zeit.
  Mit Zitat antworten Zitat
PeterPanino

Registriert seit: 4. Sep 2004
1.451 Beiträge
 
Delphi 10.4 Sydney
 
#4

Re: Titelloses Fenster eines Fremdprogrammes positionieren?

  Alt 8. Mär 2009, 21:54
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 ...!
  Mit Zitat antworten Zitat
PeterPanino

Registriert seit: 4. Sep 2004
1.451 Beiträge
 
Delphi 10.4 Sydney
 
#5

Re: Titelloses Fenster eines Fremdprogrammes positionieren?

  Alt 8. Mär 2009, 23:12
Hallo, ich habe es jetzt geschafft, die PID und das Fensterhandle vom Programmnamen zu bekommen:

Delphi-Quellcode:
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.
GetWindowCaption:
http://img255.imageshack.us/img255/7...dowcaption.gif

GetWindowRect:
http://img24.imageshack.us/img24/5908/getwindowrect.gif

Wie man sieht, funktioniert das Erfassen der Fensterkoordinaten nicht. Könnte jemand weiterhelfen?
  Mit Zitat antworten Zitat
Benutzerbild von Luckie
Luckie

Registriert seit: 29. Mai 2002
37.621 Beiträge
 
Delphi 2006 Professional
 
#6

Re: Titelloses Fenster eines Fremdprogrammes positionieren?

  Alt 8. Mär 2009, 23:41
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?
Michael
Ein Teil meines Codes würde euch verunsichern.
  Mit Zitat antworten Zitat
PeterPanino

Registriert seit: 4. Sep 2004
1.451 Beiträge
 
Delphi 10.4 Sydney
 
#7

Re: Titelloses Fenster eines Fremdprogrammes positionieren?

  Alt 9. Mär 2009, 00:28
Zitat von Luckie:
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?
Eine ganze Menge! Ich bitte dich außerdem, einen anderen Ton mir gegenüber zu verwenden! Wenn du etwa glauben solltest, dass ich nur Fragen stelle ohne selbst etwas zu tun (s. paralleler Thread), dann hast du dich gründlich getäuscht! Ich habe für dieses Forum schon eine Menge eigenen Code geschrieben! Bitte lass deine Vorurteile an jemand anderem aus!

Um wieder zum Thema zurückzukehren: Es ist mir jetzt gelungen, die Koordinaten des Fensters herauszufinden:

Delphi-Quellcode:
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.
Jetzt muss ich nur noch eine Methode finden, die Koordinaten des Fensters zu ändern.
  Mit Zitat antworten Zitat
Benutzerbild von Luckie
Luckie

Registriert seit: 29. Mai 2002
37.621 Beiträge
 
Delphi 2006 Professional
 
#8

Re: Titelloses Fenster eines Fremdprogrammes positionieren?

  Alt 9. Mär 2009, 00:38
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.
Michael
Ein Teil meines Codes würde euch verunsichern.
  Mit Zitat antworten Zitat
verwirrt

Registriert seit: 9. Jun 2006
59 Beiträge
 
Delphi 6 Professional
 
#9

Re: Titelloses Fenster eines Fremdprogrammes positionieren?

  Alt 9. Mär 2009, 01:09
Zitat von PeterPanino:
Jetzt muss ich nur noch eine Methode finden, die Koordinaten des Fensters zu ändern.
SetWindowRect
  Mit Zitat antworten Zitat
PeterPanino

Registriert seit: 4. Sep 2004
1.451 Beiträge
 
Delphi 10.4 Sydney
 
#10

Re: Titelloses Fenster eines Fremdprogrammes positionieren?

  Alt 9. Mär 2009, 01:21
Zitat von Luckie:
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.
Nichts für ungut, ich habe vielleicht etwas überreagiert.

Zitat von Luckie:
Den Klassennamen in diesem Fall zu verwende ist schlecht. Jedes mit der MFC erzeugte Fenster hat diesen Klassennmane, er ist also nicht unbedingt eindeutig.
Du meinst, dass der Klassenname '#32770' womöglich bei mehreren Programmen vorkommt? Und wie kann man sonst über die PID an das fenster-handle kommen?
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 2  1 2      


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 10:04 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