Quel appel API devrais-je utiliser pour changer la luminosité de l'ordinateur portable (.NET)?

StackOverflow https://stackoverflow.com/questions/373297

  •  22-08-2019
  •  | 
  •  

Question

Windows Server 2008 installé sur un ordinateur portable Sony et le contrôle de la luminosité ne fonctionne pas. Je voudrais écrire un programme pour me permettre de le changer.

À l'heure actuelle ce que je dois faire est d'ouvrir le panneau de contrôle de l'alimentation, cliquez sur Paramètres avancés, et combattre à travers tant de boîtes CCU que tout le monde me regarde dois penser que je suis complètement fou.

Je veux juste un petit programme simple de le faire, mais je ne sais pas ce que l'API pour appeler

Était-ce utile?

La solution

Je levais les yeux WmiSetBrightness MSDN et est venu avec ceci:

ManagementClass mclass = new ManagementClass("WmiMonitorBrightnessMethods");
mclass.Scope = new ManagementScope(@"\\.\root\wmi");
ManagementObjectCollection instances = mclass.GetInstances();

// I assume you get one instance per monitor
foreach(ManagementObject instance in instances)
{
    ulong timeout = 1; // in seconds
    ushort brightness = 50; // in percent
    object[] args = new object[] { timeout, brightness };
    instance.InvokeMethod("WmiSetBrightness", args);
}

Note: ManagementClass, ManagementObjectCollection et ManagementObject tout mettre en œuvre IDisposable. Vous devez appeler Dispose() ou utiliser « using » pour éviter une fuite des ressources.

Autres conseils

Ceci est vista seulement:

http://msdn.microsoft.com/en-us/library /ms775232.aspx

Vous devez identifier le moniteur avec GetPhysicalMonitorsFromHMONITOR avant de sa luminosité avec SetMonitorBrightness. Je pense que personne ne l'a fait avant dans .net de sorte que vous aurez probablement besoin d'écrire votre propre Interop. Le api ne semble pas être particulièrement difficile si vous devriez être en mesure de le faire assez facilement.

Pour autant que je sache, il n'y a pas d'API gérées (.NET) pour cela. Cependant, pour Vista, il existe des API non gérés disponibles via Interop. Voir MSDN: moniteur API de configuration et WmiSetBrightness .

Il peut être des moyens gérés de frapper la méthode WmiSetBrightness, mais je ne suis pas au courant.

Si vous n'êtes pas sur Vista ou Server 2008, vous êtes dans un monde de unpleasantness: La configuration du logiciel devrait être fait directement par le pilote du moniteur. Sur la base de votre mention ci-dessus UAC, je soupçonne que ce n'est pas le cas pour vous, mais le gars à côté peut-être envie de savoir. :)

Juste un brainstormer ici ... Sur l'ordinateur portable, vous pouvez changer la luminosité à l'aide des clés kombinations sur le clavier. Il devrait être possible d'envoyer ces keyspresses Si vous voulez juste pour le rendre plus sombre / plus léger et ne pas avoir à le mettre à une valeur spécifique.

Pour ajouter à la réponse DaEagles, http://www.pinvoke.net/ site peut être un épargnant de vie lorsque vous travaillez avec win32-apis en .Net. Si l'information n'existe pas là, s'il vous plaît ajouter lorsque vous avez un Interop pour .Net succesful.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top