2010-05-26 6 views
1

Je corrige quelques bugs dans l'application pour le contrôle à distance (à la manière d'un bureau à distance) pour Windows. Et il y a une fonctionnalité que vous pouvez effacer l'écran sur la machine distante - tous les programmes continuent à fonctionner sans être affectés, mais la personne qui regarde dans l'affichage sur le PC distant ne voit que l'écran noir.Eteindre l'affichage sur le PC distant

Il est implémenté en envoyant la requête IoCtl IOCTL_VIDEO_SET_OUTPUT_DEVICE_POWER_STATE, qui n'est pas documentée. Et cette demande ne fonctionne pas sur Vista et au-dessus.

Existe-t-il une autre façon de faire ce que je veux?

En fait, SendMessage(-1,WM_SOMMAND,SC_MONITORPOWER,2) fait l'affaire, mais l'écran se rallume si quelqu'un touche le clavier/la souris.

+0

Non, l'utilisateur est toujours en contrôle. Qu'essayez-vous de cacher? –

Répondre

1

Vous devriez être en mesure d'envoyer un WM_SYSCOMMAND avec l'ensemble SC_MONITORPOWER à 2. Malheureusement, je ne suis pas à un ordinateur avec des capacités de test, donc je ne l'ai pas essayé.

Je crois que chaque fois que vous touchez la souris/clavier, Windows essaie de se réveiller à nouveau, mais vous devriez être capable de piéger ces messages et renvoyer le 2.

LRESULT CALLBACK WndProc(HWND hWnd, UINT msg, WPARAM wParam, LPARAM lParam){ 
    switch (msg){ 
     ... 
     case WM_SYSCOMMAND: 
      switch (wParam){ 
       case SC_MONITORPOWER: 
       return 2; 
      } 
     break; 
     ... 
    } 
} 

S'il vous plaît noter que ce n'est pas testé.

0

Vous pouvez essayer un clavier et une souris de bas niveau (que l'application de bureau à distance devrait déjà avoir). Assurez-vous que le niveau est faible, c'est-à-dire SetWindowsHookEx(WH_KEYBOARD_LL) et SetWindowsHookEx (WH_MOUSE_LL).

l'intérieur de vos fonctions de rappel crochet:

  • NE PAS APPELER CallNextHookEx()
  • retour -1 dans LowLevelKeyboardProc (que vous devez mettre en œuvre). Faites la même chose pour LowLevelMouseProc.

AVERTISSEMENT: Désactivera le clavier (même si elle ne fonctionne pas correctement) jusqu'à ce que votre code n'appelle CallNextHookEx() et retourne 0 dans vos procédures de rappel.

Questions connexes