使用this example关闭监视器与JNA我遇到了以下问题:监视器按预期关闭,但立即打开一秒钟。即使我通过睡眠和打开显示器评论部分。全都一样。
当控制返回到主线程时,我认为监视器会打开。但它不是那样的。在新线程中运行此代码段会导致相同的结果。
我也试过PowerShell脚本做同样的事情,它作为一个魅力。但不是Java片段。
我究竟做错了什么?或者这根本没问题。
“不能按预期工作”可能意味着您的期望是错误的。
值得注意的是,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片段中看到相同的结果;在这种情况下,您的鼠标单击/按键序列可能会有所不同。)