如何从java应用程序更改笔记本电脑的屏幕亮度?

问题描述:

我想创建一个Java应用程序来更改Windows XP/7上的笔记本电脑屏幕亮度。请帮忙如何从java应用程序更改笔记本电脑的屏幕亮度?

我不认为有一个标准的API在Java中这样做。

但是,似乎你可以在Windows中使用.NET。请参阅: What API call would I use to change brightness of laptop (.NET)?

您始终可以使用JNI接口调用用C++编写的本地方法 - 因此这可能是一种解决方法。

正如其他人所说,没有任何官方的API使用。然而,使用Windows Powershell(它与Windows相信,所以不需要下载任何东西)和WmiSetBrightness,可以创建一个简单的解决方法,应该适用于签证或以后安装的所有Windows PC。

所有你需要做的就是这个类复制到您的工作空间:

import java.io.BufferedReader; 
import java.io.IOException; 
import java.io.InputStreamReader; 


public class BrightnessManager { 
    public static void setBrightness(int brightness) 
      throws IOException { 
     //Creates a powerShell command that will set the brightness to the requested value (0-100), after the requested delay (in milliseconds) has passed. 
     String s = String.format("$brightness = %d;", brightness) 
       + "$delay = 0;" 
       + "$myMonitor = Get-WmiObject -Namespace root\\wmi -Class WmiMonitorBrightnessMethods;" 
       + "$myMonitor.wmisetbrightness($delay, $brightness)"; 
     String command = "powershell.exe " + s; 
     // Executing the command 
     Process powerShellProcess = Runtime.getRuntime().exec(command); 

     powerShellProcess.getOutputStream().close(); 

     //Report any error messages 
     String line; 

     BufferedReader stderr = new BufferedReader(new InputStreamReader(
       powerShellProcess.getErrorStream())); 
     line = stderr.readLine(); 
     if (line != null) 
     { 
      System.err.println("Standard Error:"); 
      do 
      { 
       System.err.println(line); 
      } while ((line = stderr.readLine()) != null); 

     } 
     stderr.close(); 

    } 
} 

然后调用

BrightnessManager.setBrightness({brightness}); 

凡{亮度}是你要设置在同屏显示亮度0是最暗的支撑亮度,100是最亮的。

非常感谢anquegi为powershell代码找到了here,我适应了这个命令。

+0

遗憾的是它不work.It给出的Windows'10->标准错误此错误: 获取-WmiObject可以:不支持 在行:1个字符:42 + ... myMonitor = GET-WmiObject可以 - 命名根\ WMI -Class WmiMonitorBright ... +' – GOXR3PLUS 2017-01-31 06:43:40

+0

Resume-> '+ CategoryInfo:InvalidOperation:(:) [获取-WmiObject可以],ManagementException + FullyQualifiedErrorId:GetWMIManagementException,Microsoft.PowerShell.Commands.GetWmiObjectCommand 你不能调用一个空值表达式的方法。 在线:1 char:111 + ... torBrightnessMethods; $ myMonitor.wmisetbrightness($ delay,$ brightness) + ~~~~~~~~~~~~~~~~~~~ ~~~~~~~~~~~~~~~~~~~~~~~~~~~信息类别信息:InvalidOperation: – GOXR3PLUS 2017-01-31 06:43:56