使用this example通过JNA关闭监视器时遇到以下问题: 监视器按预期关闭,但立即在一秒钟内打开。即使我将睡眠和打开显示器的部分注释掉了。都一样。
我认为当控制权返回主线程时,监视器会打开。但这不是那样。在新线程中运行此代码段会得到相同的结果。
我也尝试过Powershell脚本做同样的事情,它很有吸引力。但不是Java代码段。
我在做什么错?或这到底有什么问题。
答案 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片段中看到相同的结果;在这种情况下,您的鼠标单击/击键顺序可能会有所不同。)