gpt4 book ai didi

java - 如何在 OS X 中检测屏幕是否关闭?

转载 作者:行者123 更新时间:2023-12-01 09:33:26 25 4
gpt4 key购买 nike

我正在制作一个应用程序,该应用程序仅应在显示器打开时尝试运行(除其他外),但我找不到通过命令行进行检查的方法。通过 pmset -g 检查用户空闲了多长时间以及他们的首选空闲时间并不总是有效,因为有多种程序可以更改此设置。

有没有办法(通过命令行或 Java)检查 OS X 中的屏幕当前是否关闭?

最佳答案

这部分C将检测屏幕是否处于 sleep 状态或唤醒状态:

CGDirectDisplayID ids[20];
uint32_t num_ids;
if (kCGErrorSuccess != CGGetActiveDisplayList(20, ids, &num_ids)) {
printf("Oops\n");
return 1;
}
boolean_t asleep = true;
for (int i = 0; i < num_ids; i++) {
asleep &= CGDisplayIsAsleep(ids[i]);
}
if (asleep) {
printf("Asleep\n");
return 1;
} else {
printf("Awake\n");
return 0;
}

这可以可怕地翻译成一些JNA使用:

CoreGraphics.java:

import com.sun.jna.*;
import com.sun.jna.ptr.IntByReference;

public interface CoreGraphics extends Library {
CoreGraphics INSTANCE = (CoreGraphics)Native.loadLibrary("CoreGraphics", CoreGraphics.class);

class int32_t extends IntegerType {
public static final int SIZE = 4;
public int32_t() {
this(0);
}
public int32_t(long value) {
super(SIZE, value, false);
}
};

public static class CGError extends int32_t {
public static final CGError Success = new CGError(0);

public CGError() { this(0); }
public CGError(int value) { super(value); }
};

public static class CGDirectDisplayID extends int32_t {
};

CGError CGGetActiveDisplayList(int maxDisplays, CGDirectDisplayID[] activeDisplays, IntByReference displayCount);
boolean CGDisplayIsAsleep(CGDirectDisplayID disp);
}

使用该接口(interface)的示例程序 - jna_monitors_run.java:

import com.sun.jna.*;
import com.sun.jna.ptr.IntByReference;

public class jna_monitors_run {

static final int MAX_DISPLAYS = 20;
public static void main(String[] args) {
IntByReference ib = new IntByReference();
CoreGraphics.CGDirectDisplayID ids[] = new CoreGraphics.CGDirectDisplayID[MAX_DISPLAYS];
if (! CoreGraphics.CGError.Success.equals(CoreGraphics.INSTANCE.CGGetActiveDisplayList(
MAX_DISPLAYS, ids, ib))) {
System.exit(2);
}
boolean is_asleep = true;
int i = ib.getValue();
while (--i >= 0) {
is_asleep &= CoreGraphics.INSTANCE.CGDisplayIsAsleep(ids[i]);
}
System.out.println(is_asleep);
System.exit(is_asleep ? 1 : 0);
}
}

关于java - 如何在 OS X 中检测屏幕是否关闭?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39207494/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com