EnumDisplayMonitors/ depuis un service Windows

EnumDisplayMonitors/ depuis un service Windows - API Win32 - Programmation

Marsh Posté le 01-08-2018 à 17:58:44    

Bonjour à tous,
 
Je cherche à utiliser l'API EnumDisplayMonitors depuis un service Windows (sous Windows 10, voire truc un poil plus vieux), mais le hic, c'est que cela ne semble pas fonctionner depuis un service (depuis une appli, ça marche impeccable).
 
Quelqu'un s'est déjà heurté à ce problème et est parvenu à le régler ?
 
J'ai tripatouillé le service dans tous les sens : cocher la case "accès au bureau" (ou truc dans le genre), mettre en user ma pomme puis l'administrateur, mais non, pas moyen...  :sweat:  
 
Bon... Si ça se trouve, cette API là fonctionne et c'est une des suivantes qui foirent : GetPhysicalMonitorsFromHMONITOR ou encore SetMonitorBrightness...
 
En farfouillant sur le web, il y a une notion de session 0, blabla, tout ça... Mais j'avoue ne pas maitriser du tout :o

Reply

Marsh Posté le 01-08-2018 à 17:58:44   

Reply

Marsh Posté le 01-08-2018 à 19:26:55    

Et GetSystemMetrics(SM_CMONITORS) ne fonctionne pas ?
C'est souvent préférable de l'utiliser à la place de EnumDisplayMonitors (si ton but est de compter les moniteurs présents)


Message édité par Harkonnen le 01-08-2018 à 19:27:41

---------------
J'ai un string dans l'array (Paris Hilton)
Reply

Marsh Posté le 02-08-2018 à 23:35:14    

Pas uniquement en fait... Mon but est de chopper un handle sur chacun des moniteurs physiques pour pouvoir régler leurs luminosités via la méthode SetMonitorBrightness...

 

Merci pour ton retour :jap:


Message édité par Kalipok le 02-08-2018 à 23:35:47
Reply

Marsh Posté le 03-08-2018 à 09:07:39    

De toute façon, ma réponse est fausse car GetSystemMetrics() ne fonctionnera pas non plus, car à partir de Windows Server 2008, les services sont exécutés dans la session 0. Avant Windows Server 2008, la session 0 était la session console (la session que tu vois quand tu branches un moniteur directement sur le serveur), ce qui n'est plus le cas depuis Windows Server 2008 (la session 0 isole les services, et les applications sont ouvertes dans les sessions utilisateur). Du coup, sans console, pas d'informations d'écran, ce qui explique ton souci.

 

Ce que tu peux faire, c'est créer une petite application au démarrage de ta session utilisateur qui va appeler EnumDisplayMonitors(). Dans la callback MONITORENUMPROC que tu transmets à cette fonction, tu vas récupérer le HDC de ton moniteur, puis le transmettre à ton service via un named pipe par exemple. Ton service se chargera ensuite d'appeler SetMonitorBrightness() avec le HDC transmis.


Message édité par Harkonnen le 03-08-2018 à 09:41:51

---------------
J'ai un string dans l'array (Paris Hilton)
Reply

Marsh Posté le 03-08-2018 à 12:52:05    

Excellente idée :jap:
 
Edit : Je n'aurai peut être pas le temps de le faire, mais si ma méthode bourrin de lancer une app au démarrage de Windows, sans service du tout, ne convient pas, je me lancerai dans cette solution  [:cerveau charlest]


Message édité par Kalipok le 03-08-2018 à 12:55:28
Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed