在Java中关闭带有JNA的监视器无法按预期工作

在Java中关闭带有JNA的监视器无法按预期工作,java,windows,jna,monitor,Java,Windows,Jna,Monitor,使用JNA关闭监视器时,我遇到以下问题: 监视器按预期关闭,但在一秒钟内立即打开。即使我在睡觉和打开显示器的时候说了一部分。尽管如此 我认为当控件返回到主线程时,监视器会打开。但事实并非如此。在新线程中运行此代码段会导致相同的结果 我也尝试过powershell脚本做同样的事情,它就像一个符咒。但不是Java代码片段 我做错了什么?或者说这到底是怎么回事。有可能不按预期工作,这意味着你的预期是错误的 需要注意的是,有一些问题,我假设您使用的是逐字逐句。函数被映射两次。第一个映射是正确的,但从未使

使用JNA关闭监视器时,我遇到以下问题: 监视器按预期关闭,但在一秒钟内立即打开。即使我在睡觉和打开显示器的时候说了一部分。尽管如此

我认为当控件返回到主线程时,监视器会打开。但事实并非如此。在新线程中运行此代码段会导致相同的结果

我也尝试过powershell脚本做同样的事情,它就像一个符咒。但不是Java代码片段


我做错了什么?或者说这到底是怎么回事。

有可能不按预期工作,这意味着你的预期是错误的

需要注意的是,有一些问题,我假设您使用的是逐字逐句。函数被映射两次。第一个映射是正确的,但从未使用过:

  LRESULT SendMessageA(HWND paramHWND, int paramInt, WPARAM paramWPARAM,
        LPARAM paramLPARAM);
第二个映射用int替换WPARAM,如果这里的某些结果不寻常,尤其是在64位系统/JVM上,我也不会感到惊讶。这是代码中调用的版本

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

除此之外,代码确实如预期的那样工作,它需要关闭显示器!您期望的问题是,您没有考虑什么可能会重新打开显示器。移动或单击鼠标,或者释放按下的鼠标按钮,按下或释放键,网络活动,或者其他各种可能产生的结果。您可能会在powershell代码片段中看到相同的结果;在这种情况下,您的鼠标单击/击键顺序可能不同。

在发送消息之前,我已经使用了睡眠2秒钟。同样的事情。你认为GC在调用后立即吃掉User32var怎么样?GC不是问题所在,实例仍然在延迟范围内。我还看到过其他报告,即使使用powershell,监视器也会暂时关闭。可能需要检查计算机的省电设置,例如,插入电源时从不睡觉可能会覆盖关闭电源。这里的要点是,我相信代码正在工作,以关闭显示器。重新开始是另一个问题。你说得对。它工作了好几次。但这是非常不可预测的。不可预测的是唤醒事件。您是否启用了局域网唤醒功能?