I ’ m en essayant de déclencher la même chose que le système lorsque vous cliquez sur “ Détecter Affiche ” dans “ Affiche le volet ” Préférences système. Y a-t-il un moyen de faire cela par programme? Mon but est de créer un LaunchAgent qui le fait lors de la connexion pour réinitialiser la résolution d'affichage au cas où un utilisateur dérangerait avec elle.Déclencher par programme "détecter les affichages".
2
A
Répondre
3
Vous devrez utiliser une routine CoreGraphics privée pour obtenir la liste de tous les affichages, y compris ceux qui sont inactifs, puis demander une nouvelle analyse du bus. Essayez-le comme ceci:
#include <IOKit/IOKitLib.h>
#include <IOKit/IOTypes.h>
CGDisplayErr CGSGetDisplayList(CGDisplayCount maxDisplays,
CGDirectDisplayID * onlineDspys,
CGDisplayCount * dspyCnt);
static void DetectDisplays()
{
CGDirectDisplayID displays[8];
CGDisplayCount dspCount = 0;
if (CGSGetDisplayList(8, displays, &dspCount) == noErr)
{
for(int i = 0; i < dspCount; i++)
{
io_service_t service = CGDisplayIOServicePort(displays[i]);
if (service)
IOServiceRequestProbe(service, kIOFBUserRequestProbe);
}
}
}
Et lien vers ApplicationServices et IOKit.
4
Depuis le CGDisplayIOServicePort
appel a été dépréciée dans OS X 10.9 Mavericks, il peut être préférable d'acquérir le service IOFramebuffer par un appel correspondant approprié comme ceci:
void triggerDetectDisplays()
{
// loop over all IOFramebuffer services
CFMutableDictionaryRef matchingDict = IOServiceMatching("IOFramebuffer");
mach_port_t masterPort;
IOMasterPort(MACH_PORT_NULL, &masterPort);
io_iterator_t serviceIterator;
IOServiceGetMatchingServices(masterPort, matchingDict, &serviceIterator);
io_service_t obj = IOIteratorNext(serviceIterator);
while (obj)
{
kern_return_t kr = IOServiceRequestProbe(obj, 0);
obj = IOIteratorNext(serviceIterator);
}
}
Questions connexes
- 1. Déclencher un événement par programme?
- 2. Détecter VMWare par programme
- 3. Comment détecter les bots par programme
- 4. Android: Ajouter deux affichages de texte par programme
- 5. Comment déclencher jquery Redimensionnement redimensionnable par programme?
- 6. comment déclencher l'événement dropdownlist.selectedindexchanged par programme
- 7. Comment détecter par programme Game Center?
- 8. Comment faire pour détecter par programme les fichiers supprimés?
- 9. Comment détecter par programme l'écouteur dans l'iphone?
- 10. Détecter l'identité du premier répondeur par programme
- 11. comment déclencher un événement de navigationitem rightBarButtonItem par programme?
- 12. Auto Détecter le périphérique Windows Mobile par programme
- 13. Comment détecter si un programme s'exécute dans une archive PAR?
- 14. Comment détecter par programme qu'Internet Explorer est désactivé?
- 15. Comment puis-je détecter par programme ASP.NET 3.5?
- 16. Détecter par programme si une application est installée sur l'iPhone
- 17. Détecter par programme la configuration du cluster Windows?
- 18. Détecter par programme si je suis en mode transparent VirtualBox
- 19. Comment faire pour détecter la caméra frontale Android par programme
- 20. Affichages Drupal: fractionnement des champs par type de contenu
- 21. android défilement des affichages linéaires
- 22. Détecter si le programme s'exécute avec les droits d'administrateur complets
- 23. Exactement les mêmes affichages Xhtml différemment sur le nom d'hôte
- 24. Comment détecter par programme la liaison de touches d'un commnand pour les plugins eclipse?
- 25. Comment puis-je détecter par programme les types d'authentification ssh disponibles?
- 26. déclencher un événement par code dans android
- 27. Comment détecter quand le programme est inactif?
- 28. Comment puis-je tester par programme les cookies?
- 29. Comment détecter les méthodes obsolètes dans un programme?
- 30. Comment détecter des informations vulnérables/personnels dans les CV par programme (par analyse syntaxique/analyse syntaxique etc ...)
Désolé, il m'a fallu si longtemps pour répondre, je devait arriver à l'endroit où je pourrais tester cela. Cela a fonctionné, mais je recommande quelques changements. Tout d'abord, ajoutez la ligne '#include', ce qui vous permet de changer 'CGSGetDisplayList' (en supprimant sa déclaration) en' CGGetOnlineDisplayList' et d'obtenir l'achèvement du code dans Xcode. –
Okay, super. Je n'avais aucun écran externe à tester et je ne savais pas si vous pouviez utiliser CGGetOnlineDisplayList au lieu de CGSGetDisplayList. Je sais que CGSGetDisplayList renvoie tous les affichages, qu'ils soient en ligne ou non (il retournait 4 affichages sur mon MacBook Pro) alors que CGGetOnlineDisplayList en renvoyait seulement un. Si cela fonctionne avec CGGetOnlineDisplayList, alors il vaut mieux éviter l'API privée;) –