【发布时间】:2019-03-03 20:59:32
【问题描述】:
使用this example 的JNA 关闭显示器我遇到了以下问题: 显示器按预期关闭,但在一秒钟内立即打开。即使我在睡觉和打开显示器时注释掉部分。都一样。
我认为当控制权返回主线程时监视器会打开。但事实并非如此。在新线程中运行这个 sn-p 会导致相同的结果。
我也尝试过 powershell 脚本做同样的事情,它就像一个魅力。但不是 Java sn-p。
我做错了什么?或者这有什么问题。
【问题讨论】:
使用this example 的JNA 关闭显示器我遇到了以下问题: 显示器按预期关闭,但在一秒钟内立即打开。即使我在睡觉和打开显示器时注释掉部分。都一样。
我认为当控制权返回主线程时监视器会打开。但事实并非如此。在新线程中运行这个 sn-p 会导致相同的结果。
我也尝试过 powershell 脚本做同样的事情,它就像一个魅力。但不是 Java sn-p。
我做错了什么?或者这有什么问题。
【问题讨论】:
“没有按预期工作”可能意味着您的期望是错误的。
值得注意的是,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 sn-p 看到相同的结果;在这种情况下,您的鼠标单击/击键顺序可能不同。)
【讨论】:
SendMessageA 通话之前,我已经使用了睡眠 2 秒。同样的事情。
user32 var,你怎么看?