Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Sonstige Fragen zu Delphi (https://www.delphipraxis.net/19-sonstige-fragen-zu-delphi/)
-   -   Delphi shellexecute auf zweitem bildschirm ausführen (https://www.delphipraxis.net/128756-shellexecute-auf-zweitem-bildschirm-ausfuehren.html)

milchbrötchen 5. Feb 2009 12:29


shellexecute auf zweitem bildschirm ausführen
 
hi,
ich möchte ein programm via shellexecute auf meinem zweiten monitor ausführen..

ich habs mal mit
Delphi-Quellcode:
ShellExecute(screen.Monitors[1].Handle,PChar('open'),PChar('c:\'),nil,nil,SW_MAXIMIZE);
probiert, aber iwie funktioniert das nicht, das programm bzw in diesem fall der ordner wird auf dem hauptbildschirm geöffnet...
danke schonmal für eure beiträge..

Bernhard Geyer 5. Feb 2009 12:31

Re: shellexecute auf zweitem bildschirm ausführen
 
IDEE:

Erstelle den Prozess mit CreateProzess, suche das Hauptfenster dieses Prozesses und setze per API-Befehle die Koordinaten neu.

Tyrael Y. 5. Feb 2009 14:11

Re: shellexecute auf zweitem bildschirm ausführen
 
Delphi-Quellcode:
procedure TForm1.FormCreate(Sender: TObject);
begin
  self.left  := Screen.monitors[1].left;
  self.top   := Screen.monitors[1].top;
  self.Height := Screen.monitors[1].Height;
  self.Width := Screen.monitors[1].Width;
end;
Das sollte auf dem zweiten Monitor eine Form erzeugen, die den gesamten Monitor einnimmt.

Zu deinem Shellexecute müsstest du den Monitorindex als Parameter übergeben und im FormCreate auswerten.

milchbrötchen 5. Feb 2009 14:29

Re: shellexecute auf zweitem bildschirm ausführen
 
Zitat:

Zitat von Tyrael Y.
Delphi-Quellcode:
procedure TForm1.FormCreate(Sender: TObject);
begin
  self.left  := Screen.monitors[1].left;
  self.top   := Screen.monitors[1].top;
  self.Height := Screen.monitors[1].Height;
  self.Width := Screen.monitors[1].Width;
end;

mein programm läuft auch schon die ganze zeit auf dem zweiten bildschirm.. und sie nimmt auch den ganzen monitor ein... mit borderstyle=bsnone und so wie du es gemacht hast...

was genau meinst du mit Monitorindex als Parameter übergeben und im FormCreate auswerten?

taaktaak 5. Feb 2009 15:18

Re: shellexecute auf zweitem bildschirm ausführen
 
Worum geht es hier denn nun?
Mit ShellExecute() startet man vorzugsweise fremde Programme, daher der Hinweis von Bernhard Geyer, einen Prozess zu starten. Die Hinweise mit FormCreate() kann ich (in diesem Zusammenhang) nicht so recht nachvollziehen.

Tyrael Y. 5. Feb 2009 15:32

Re: shellexecute auf zweitem bildschirm ausführen
 
Delphi-Quellcode:
ShellExecute(nil,nil,PChar('c:\myProgram'),1,nil,SW_MAXIMIZE);
Delphi-Quellcode:
procedure TForm1.FormCreate(Sender: TObject);
var MonitorIndex: Integer;
begin
  if ParamCount > 1 then
  begin
    MonitorIndex = StrToIntDef(Params(1), 0);
   
    self.left  := Screen.monitors[MonitorIndex].left;
    self.top   := Screen.monitors[MonitorIndex].top;
    self.Height := Screen.monitors[MonitorIndex].Height;
    self.Width := Screen.monitors[MonitorIndex].Width;
  end;
end;
Mit dem vierten Parameter von Shellexecute kannst du zusätzliche Parameter an dein Programm mitgeben.
Im obigen Beispiel 1 für Monitor 2.
Im FormCreate von der MainForm guckst du, ob du einen Paramter zum Aufruf hattest und zeigst dann
deine Form auf dem Monitor auf dem die Anzeige gewünscht ist.

Edit:
Zitat:

Zitat von taaktaak
Die Hinweise mit FormCreate() kann ich (in diesem Zusammenhang) nicht so recht nachvollziehen.

Nur weil er selbst das so gerne aufrufen wollte, hab ich für diesen Weg eine Lösung geschrieben.


Alle Zeitangaben in WEZ +1. Es ist jetzt 14: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