如何检测我的 Swing 应用程序是否正在从 Windows RDP 会话运行?
仅使用 Java 的解决方案是首选,但该应用程序保证可以在 Windows 上运行,所以我可以接受。
我认为您必须调用本机 Windows 库才能实现此目的。尝试这样的事情:
import com.sun.jna.Library;
import com.sun.jna.Native;
import com.sun.jna.ptr.IntByReference;
import com.sun.jna.win32.*;
import com.sun.jna.examples.win32.Kernel32;
...
public static boolean isLocalSession() {
Kernel32 kernel32;
IntByReference pSessionId;
int consoleSessionId;
Kernel32 lib = (Kernel32) Native.loadLibrary("kernel32", Kernel32.class);
pSessionId = new IntByReference();
if (lib.ProcessIdToSessionId(lib.GetCurrentProcessId(), pSessionId)) {
consoleSessionId = lib.WTSGetActiveConsoleSessionId();
return (consoleSessionId != 0xFFFFFFFF && consoleSessionId == pSessionId.getValue());
} else return false;
}
那种看起来很奇怪的情况consoleSessionId
来自文档WTSGetActiveConsoleSessionId http://msdn.microsoft.com/en-us/library/aa383835%28VS.85%29.aspx,其中说:
返回值
附加到物理控制台的会话的会话标识符。如果没有会话连接到物理控制台(例如,如果物理控制台会话正在连接或分离),则此函数返回 0xFFFFFFFF。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)