在Java中使用JNA关闭监视器无法按预期工作

问题描述 投票:0回答:1

使用this example关闭监视器与JNA我遇到了以下问题:监视器按预期关闭,但立即打开一秒钟。即使我通过睡眠和打开显示器评论部分。全都一样。

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

我也试过PowerShell脚本做同样的事情,它作为一个魅力。但不是Java片段。

我究竟做错了什么?或者这根本没问题。

java windows jna monitor
1个回答
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片段中看到相同的结果;在这种情况下,您的鼠标单击/按键序列可能会有所不同。)

© www.soinside.com 2019 - 2024. All rights reserved.