Forums Neueste Beiträge
 

Externes Programm auf sekundär-Monitor plazieren?

21/02/2010 - 15:38 von Olli Goessler | Report spam
Hi Leute,

ich hoffe Ihr habt hier eine Idee wie man dies realisieren könnte:

Meine Applikation kann ich per Auswahl wahlweise auf dem primàren oder dem
sekundàren Monitor anzeigen lassen, bzw. dazwischen umschalten. Klappt
super. Leider wierden durch diese Applikation auch mehrere externe Programme
aufgerufen, z.B. Media Player Classic.
Zu meinem Leidwesen werden diese dann aber immer am primàren Monitor
geöffnet/angezeigt, Sinn macht aber nur diese am selben Monitor auf welcher
meine Appl-Form gezeigt wird anzuzeigen.

Ich habe das mal so versucht:

p.Start();

p.WaitForInputIdle(5000);
IntPtr handle = IntPtr.Zero;
if (p.Id >= 0 && p.Responding)
{
handle = p.MainWindowHandle;
}

Form form = new Form();
form = (Form)Control.FromHandle(handle);

if (!IsOnlyOneDisplay())
{
form.DesktopLocation =
Screen.AllScreens[this.m_OutputScreen].Bounds.Location;
form.FormBorderStyle = System.Windows.Forms.FormBorderStyle.None;
form.DesktopBounds = Screen.AllScreens[this.m_OutputScreen].Bounds;
}

Leider klappt das nicht

Besten Dank und viele Gruesse
Olli
 

Lesen sie die antworten

#1 Frank Dzaebel
21/02/2010 - 17:51 | Warnen spam
Hallo Olli,

Meine Applikation kann ich per Auswahl wahlweise auf dem primàren oder
dem sekundàren Monitor anzeigen lassen, bzw. dazwischen umschalten.
Klappt super. Leider wierden durch diese Applikation auch mehrere
externe Programme aufgerufen, z.B. Media Player Classic.
Zu meinem Leidwesen werden diese dann aber immer am primàren Monitor
geöffnet/angezeigt, Sinn macht aber nur diese am selben Monitor auf
welcher meine Appl-Form gezeigt wird anzuzeigen.



Nutze bei zum Beispiel bei Aufrufen von Show
folgende Methode:

Form2 f2 = new Form2(); f2.Show(this);

Falls eigene Behandlungen nötig werden, benutzte:

Screen.GetWorkingArea(this)

um die Grenzen des aktuellen Desktop-Monitors
festzustellen (ohne Taskleisten, angedockte
Fenster und angedockte Symbolleisten).



handle = p.MainWindowHandle;



Wenn Du unbedingt über "Process.Start" gehen
musst, so ist folgendes zu sagen:

1) p.MainWindowHandle
geht nicht immer, denn Prozesse können
auch relativ kurz nach ihrem Start wieder
einen neuen starten.

2) Control.FromHandle geht dabei nicht
bei nicht managed Apps.

3) Du könntest ggf. über FindWindow mit
bekannten Window-Klassen etc.
gehen, dann würde es aber visuell immer noch
immer noch recht sparsam aussehen.

4) Also ggf. pragmatisch am besten bei Windows
Media Player das Control selber (aus der ToolBox)
in eigener Form hosten. Das gleiche bei "iexplore"
über das WebBrowser-Control. Und dann mit
Show(this).


ciao Frank
Dipl.Inf. Frank Dzaebel [MCP/MVP C#]
http://Dzaebel.NET

Ähnliche fragen