Toon posts:

[C#] Powerpoint Multiple/Dual Monitor

Pagina: 1
Acties:
  • 114 views sinds 30-01-2008
  • Reageer

Verwijderd

Topicstarter
Ik heb deze vraag reeds in de categorie Office suites gesteld, maar wellicht past de vraag toch meer hier thuis. Omdat niemand reageert op mijn vraag om het topic te verplaatsen stel ik de vraag hier maar opnieuw.

Via een C# applicatie maak ik één of meerdere Powerpoint presentaties aan. Op het moment draaien deze allen op dezelfde monitor. Ik wil er echter voor zorgen dat presentatie1 op monitor1 draait, presentatie2 op monitor2, etc. Het is me handmatig gelukt om twee presentaties te draaien op 2 verschillende monitors door ze in windowed mode te verschuiven naar verschillende monitors. Nu wil ik dit echter in fullscreen mode doen en via c# code.

Via de onderstaande code is het me reeds gelukt om de applicatie te verschuiven naar een andere monitor.
code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
class Win32
    {
        [DllImport("user32.dll", EntryPoint = "SetWindowPos")]
        public static extern bool SetWindowPos(
           int hWnd,               // window handle
           int hWndInsertAfter,    // placement-order handle
           int X,                  // horizontal position
           int Y,                  // vertical position
           int cx,                 // width
           int cy,                 // height
           uint uFlags);           // window positioning flags
        public const int HWND_BOTTOM = 0x1;
        public const uint SWP_NOSIZE = 0x1;
        public const uint SWP_NOMOVE = 0x2;
        public const uint SWP_SHOWWINDOW = 0x40;
        public const uint SWP_ASYNCWINDOWPOS = 0x40;

        [DllImport("user32.dll")]
        public static extern int FindWindow(
            string lpClassName, // class name 
            string lpWindowName // window name 
        ); 
    }

Win32.SetWindowPos
(
    Win32.FindWindow("screenClass", null)
   ,0
   ,1440
   ,0
   ,0
   ,0
   ,Win32.SWP_SHOWWINDOW | Win32.SWP_NOSIZE | Win32.SWP_NOMOVE
);


Hierbij wordt echter de gehele applicatie naar de andere monitor verplaatst en ik wil enkel een specifieke presentatie (waarvan er meerdere per applicatie zijn) naar een bepaalde monitor verplaatsen.

Nog een ander stukje code dat ik heb gevonden om de aangesloten schermen te detecteren en een form naar een ander scherm te verplaatsen. (In geval van meer dan monitors een beetje rare code, maar het is slechts ter illustratie)
code:
1
2
3
4
5
6
7
8
foreach (Screen screen in Screen.AllScreens)
{
    if (screen.Primary)
        MessageBox.Show("primary");
    else
        form1.Location = screen.WorkingArea.Location;
    }
}


In het geval van het eerste codevoorbeeld lukt het me niet om een windowhandle van een presentatie te krijgen en in het geval van het tweede voorbeeld kan ik geen location toekennen aan een presentatie.

Heeft iemand enig idee of en hoe het mogelijk gemaakt zou kunnen worden?

  • killercow
  • Registratie: Maart 2000
  • Laatst online: 28-11 15:56

killercow

eth0

Als het je puur en alleen gaat om het displayen van powerpoint slides om verschillende schermen is linux misschien wel een oplossing.

Je kunt erg simpel per scherm een nieuwe X starten waarin fullscreen een openoffice sessie de powerpoint afspeelt.

En waarom niet, linux install is een eitje, je kunt coden, dus alergisch voor config files zul je niet zijn, en je bent een stuk flexibelere dan de windows oplossing voor multi scherm support.

openkat.nl al gezien?


  • RobLemmens
  • Registratie: Juni 2003
  • Laatst online: 19-11 09:29
Kun je in het eerste geval niet proberen om met enumwindows en enumchildwindows de handle te vinden? Anders spy++ eens naast powerpoint opstarten, handle van het window met de presentatie pakken en die even hard in je code zetten.

  • degroot
  • Registratie: December 2003
  • Niet online
killercow schreef op zaterdag 10 maart 2007 @ 18:27:
Als het je puur en alleen gaat om het displayen van powerpoint slides om verschillende schermen is linux misschien wel een oplossing.

Je kunt erg simpel per scherm een nieuwe X starten waarin fullscreen een openoffice sessie de powerpoint afspeelt.

En waarom niet, linux install is een eitje, je kunt coden, dus alergisch voor config files zul je niet zijn, en je bent een stuk flexibelere dan de windows oplossing voor multi scherm support.
Dat is natuurlijk geen nette oplossing voor het probleem van de TS.

In de wereld van programmeren is alles mogelijk , dus voor het probleem van de TS ligt ook zeker weer een antwoord klaar.

Een nieuw OS installeren is natuurlijk een slordige oplossing voor een probleem dat misschien met een paar regels code is opgelost.

www.degroot-it.nl


Verwijderd

@TS: voeg een browsercontrol toe aan een form, dock dit control center

vervolgens maak je instances van dit form voor iedere presentatie, met het browsercontrol kan je navigeren naar de ppt's

gebruikt Screen, om ze juist te positioneren.

get the point?

-edit: met andere woorden, gewoon even een nette klasse schrijven :P

[ Voor 12% gewijzigd door Verwijderd op 10-03-2007 21:44 ]


  • killercow
  • Registratie: Maart 2000
  • Laatst online: 28-11 15:56

killercow

eth0

degroot schreef op zaterdag 10 maart 2007 @ 21:34:
[...]

Dat is natuurlijk geen nette oplossing voor het probleem van de TS.

In de wereld van programmeren is alles mogelijk , dus voor het probleem van de TS ligt ook zeker weer een antwoord klaar.

Een nieuw OS installeren is natuurlijk een slordige oplossing voor een probleem dat misschien met een paar regels code is opgelost.
Ik ga er van uit dat TS een soort van kiosk wil maken waar een pc, meerdere reclame schermen toont. Zoals je wel eens in wachtkamers ziet.

Dan is een nieuw OS misschien wel heel erg frisse kijk, er is in die situatie geen nut voor windows, het geeft een probleem, en met de oplossing die ik aangeef heb je binnen een uur een werkende situatie die nog gemakkelijker is ook.

openkat.nl al gezien?


  • riezebosch
  • Registratie: Oktober 2001
  • Laatst online: 31-10 11:58
killercow schreef op zaterdag 10 maart 2007 @ 23:32:
[...]
Ik ga er van uit dat TS een soort van kiosk wil maken waar een pc, meerdere reclame schermen toont. Zoals je wel eens in wachtkamers ziet.

Dan is een nieuw OS misschien wel heel erg frisse kijk, er is in die situatie geen nut voor windows, het geeft een probleem, en met de oplossing die ik aangeef heb je binnen een uur een werkende situatie die nog gemakkelijker is ook.
Waarom zou dat met Windows/Office niet ook zo kunnen? Je kan dan toch ook gewoon je desktop extenden en op iedere extra monitor een aparte presentatie starten?

Canon EOS 400D + 18-55mm F3.5-5.6 + 50mm F1.8 II + 24-105 F4L + 430EX Speedlite + Crumpler Pretty Boy Back Pack


Verwijderd

4 regels code .. http://www.mediafire.com/?5n0gmj5jn0m

werkt met alle office files en web 'documenten'

@TS: ik ga er vanuit dat MoveToScreen() goed werkt, als dit niet zo is hoor/zie ik het wel:)
kan hier atm ff niet op een multimonitor setup testen

Verwijderd

Topicstarter
Verwijderd schreef op zondag 11 maart 2007 @ 01:42:
4 regels code .. http://www.mediafire.com/?5n0gmj5jn0m

werkt met alle office files en web 'documenten'

@TS: ik ga er vanuit dat MoveToScreen() goed werkt, als dit niet zo is hoor/zie ik het wel:)
kan hier atm ff niet op een multimonitor setup testen
Hee bedankt!!! Op het moment heb ik even geen tijd om het te testen, maar ik ga er snel mee aan de slag!!

Verwijderd

Er zit een klein foutje in, vervang alle "ShowDialog();" -> "Show();"
anders werkt het niet goed..

of je pakt gewoon deze.. http://www.mediafire.com/?cohayyimkya

Verwijderd

Topicstarter
Verwijderd schreef op zondag 11 maart 2007 @ 12:50:
Er zit een klein foutje in, vervang alle "ShowDialog();" -> "Show();"
anders werkt het niet goed..

of je pakt gewoon deze.. http://www.mediafire.com/?cohayyimkya
Slim idee om de webbrowser te gebruiken om zo de controle over de individuele presentatie te krijgen. Het gaat voor mij echter niet werken, omdat ik de powerpoint presentatie dynamisch genereer. Er zijn dus geen ppt files die ik kan openen omdat de presentatie runtime wordt gevuld. Verder krijg ik een securitymelding (Vista, IE7, Office 2007) voordat de presentatie opent.

Verwijderd

Topicstarter
RobLemmens schreef op zaterdag 10 maart 2007 @ 20:23:
Kun je in het eerste geval niet proberen om met enumwindows en enumchildwindows de handle te vinden? Anders spy++ eens naast powerpoint opstarten, handle van het window met de presentatie pakken en die even hard in je code zetten.
Helaas heb ik spy++ niet draaien, omdat ik Visual Studio Express gebruik. Zijn er alternatieven?

Vond net een link (http://support.microsoft.com/kb/258511) die me verder lijkt te helpen bij het vinden van de handle van de presentatie. Dit ga ik, zodra ik tijd heb, eens proberen.
Pagina: 1