AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Sprachen und Entwicklungsumgebungen Sonstige Fragen zu Delphi Delphi fremde Anwendung starten und Position vorschreiben
Thema durchsuchen
Ansicht
Themen-Optionen

fremde Anwendung starten und Position vorschreiben

Ein Thema von padavan · begonnen am 24. Feb 2005 · letzter Beitrag vom 24. Feb 2005
Antwort Antwort
padavan

Registriert seit: 12. Jan 2005
271 Beiträge
 
Delphi 7 Enterprise
 
#1

fremde Anwendung starten und Position vorschreiben

  Alt 24. Feb 2005, 10:32
Hallo Delphianer,

habe folgendes Problem:
Ich möchte von meiner Anwendung aus ein anderes autarkes Programm starten und auch beenden.
Dies klappt soweit alles wunderbar, aber.....
Wie stelle ich es an, dass ich dieser Anwendung eine Position auf dem Deskop vorschreiben kann?
(ich meine nicht "Show_normal" usw.)
Der Programmierer der Anwendung hat es woll auf Screen- oder Desktopcenter gesetzt.
Da ich von diesem Programm keinen Quellcode besitze, kann ich daran auch nichts ändern.
Gibt es überhaupt eine Möglichkeit einem fremden Programm die Position vorzuschreiben?

Danke im Voraus
Padavan
  Mit Zitat antworten Zitat
Benutzerbild von gmarts
gmarts

Registriert seit: 4. Apr 2004
Ort: Templin
290 Beiträge
 
Delphi 6 Enterprise
 
#2

Re: fremde Anwendung starten und Position vorschreiben

  Alt 24. Feb 2005, 10:50
Zitat von padavan:
Gibt es überhaupt eine Möglichkeit einem fremden Programm die Position vorzuschreiben?
Klar!
Du brauchts lediglich das Handle des Fensters.
Schau mal in die OH zu Setwindowpos

Delphi-Quellcode:
BOOL SetWindowPos(

    HWND hWnd,   // handle of window
    HWND hWndInsertAfter,   // placement-order handle
    int X,   // horizontal position
    int Y,   // vertical position
    int cx,   // width
    int cy,   // height
    UINT uFlags    // window-positioning flags
   );
MfG GM
procedure TForm1.Button1Click(Sender: TObject);
begin
button1.Click;
end;
  Mit Zitat antworten Zitat
Benutzerbild von Sprint
Sprint

Registriert seit: 18. Aug 2004
Ort: Edewecht
712 Beiträge
 
Delphi 5 Professional
 
#3

Re: fremde Anwendung starten und Position vorschreiben

  Alt 24. Feb 2005, 11:18
Wenn du das Programm mit CreateProcess startest, kannst du in TStartupInfo auch die Position mit angeben. Das klappt aber nicht bei jedem Programm. Andere Möglichkeit wäre, das Programm zu starten. Warten bis das Fenster erzeugt worden ist. Gültiges Fensterhandle mit EnumWindows & GetWindowThreadProcessId suchen und mit MoveWindow verschieben.

Delphi-Quellcode:
procedure RunApp(const FileName: String; Left, Top, Width, Height: Integer);

  function EnumWindowsProc(hWnd: HWND; lParam: LPARAM): BOOL; stdcall;
  begin
    TList(lParam).Add(Pointer(hWnd));
    Result := True;
  end;

  function GetWndHandle(ProcessId: DWORD): HWND;
  var
    List: TList;
    I: Integer;
    PID: DWORD;
  begin
    Result := 0;
    List := TList.Create;
    try
      EnumWindows(@EnumWindowsProc, LPARAM(List));
      for I := 0 to List.Count - 1 do
        if GetWindowThreadProcessId(HWND(List.Items[I]), @PID) <> 0 then
          if PID = ProcessId then
          begin
            Result := HWND(List.Items[I]);
            Break;
          end;
    finally
      List.Free;
    end;
  end;

var
  SI: TStartupInfo;
  PI: TProcessInformation;
  AppHWnd: HWND;
begin
  FillChar(SI, SizeOf(TStartupInfo), 0);
  SI.cb := SizeOf(TStartupInfo);
  if CreateProcess(nil, PChar(FileName), nil, nil, False, 0, nil, nil, SI, PI) then
  begin
    WaitForInputIdle(PI.hProcess, INFINITE);
    AppHWnd := GetWndHandle(PI.dwProcessId);
    if IsWindow(AppHWnd) then
      MoveWindow(AppHWnd, Left, Top, Width, Height, True);
    CloseHandle(PI.hProcess);
    CloseHandle(PI.hThread);
  end;
end;
Ciao, Sprint.

"I don't know what I am doing, but I am sure I am having fun!"
  Mit Zitat antworten Zitat
padavan

Registriert seit: 12. Jan 2005
271 Beiträge
 
Delphi 7 Enterprise
 
#4

Re: fremde Anwendung starten und Position vorschreiben

  Alt 24. Feb 2005, 12:18
Hallo Sprint, hallo gmarts,

habe mal deinen Vorschlag in die Tat umsetzen wollen, weil bei gmarts´s Vorschlag vorausgesetzt wurde das man weiß wie man an das Handle kommt. Leider bin ich noch nicht so fit im Programmieren, sodass mir das so vorkam, als hättest du dieses in deinem Programmrumpf bereits umgesetzt.

Diesen habe ich in mein Programm mit eingebunden und den entsprechenden Pfadnamen mit eingetragen. Die Zeile
procedure RunApp(const FileName: String; Left, Top, Width, Height: Integer); habe ich durch
procedure RunApp; ersetzt, um sie leichter aufrufen zu können. Wiegesagt, mir fehlen noch einige Kenntnisse.
Soweit funktioniert dein Programmteil auch, allerdings setzt er mein Hauptanwendung gleich mit auf die entsprechende Bildschirmposition, welche eigentlich für die von mir gestartete bestimmt war.
  Mit Zitat antworten Zitat
Benutzerbild von gmarts
gmarts

Registriert seit: 4. Apr 2004
Ort: Templin
290 Beiträge
 
Delphi 6 Enterprise
 
#5

Re: fremde Anwendung starten und Position vorschreiben

  Alt 24. Feb 2005, 13:18
Handle finden z.B: mit diesem Tool:
X-Spy


Das generiert dir auch den Code:

Hier am Beispiel von Wordpad.
Delphi-Quellcode:
var
  wnd: HWND;
begin
  wnd := FindWindow('WordPadClass', nil);

  if wnd <> 0 then
  begin
      setwindowpos(bla bla bla..siehe oh);
  end;
end;
procedure TForm1.Button1Click(Sender: TObject);
begin
button1.Click;
end;
  Mit Zitat antworten Zitat
padavan

Registriert seit: 12. Jan 2005
271 Beiträge
 
Delphi 7 Enterprise
 
#6

Re: fremde Anwendung starten und Position vorschreiben

  Alt 24. Feb 2005, 13:39
Vielen Dank,
so verstehe ich das auch.
  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 01:26 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