用Java中的JNA关闭监视器无法正常工作

时间:2019-03-03 20:59:33

标签: java windows jna monitor

使用this example通过JNA关闭监视器时遇到以下问题: 监视器按预期关闭,但立即在一秒钟内打开。即使我将睡眠和打开显示器的部分注释掉了。都一样。

我认为当控制权返回主线程时,监视器会打开。但这不是那样。在新线程中运行此代码段会得到相同的结果。

我也尝试过Powershell脚本做同样的事情,它很有吸引力。但不是Java代码段。

我在做什么错?或这到底有什么问题。

1 个答案:

答案 0 :(得分:1)

“可能无法按预期工作”表示您的期望有误。

值得注意的是,linked code存在一些问题,我假设您使用了逐字记录。 SendMessage函数被映射两次。第一个映射是正确的,但从未使用过:

  LRESULT SendMessageA(HWND paramHWND, int paramInt, WPARAM paramWPARAM,
        LPARAM paramLPARAM);

第二个映射将int替换为WPARAM,如果这里的某些结果异常,尤其是在64位系统/ JVM上,这也不会令我感到惊讶。这是代码中调用的版本。

  LRESULT SendMessageA(HWND paramHWND, int paramInt, int paramInt2,
        LPARAM paramLPARAM);

所有这些,代码确实按预期工作,activates the power management features关闭显示器!您期望的问题在于您尚未考虑过可能会导致显示器重新打开的问题。移动或单击鼠标(或释放一个按下的鼠标按钮),按下(或释放)某个键,网络活动或其他各种情况都可能生成system events which signal the power saving feature to turn the monitor back on。 (您可能会从Powershell片段中看到相同的结果;在这种情况下,您的鼠标单击/击键顺序可能会有所不同。)