/** * Gets Display Information * * @return An array of Display objects representing monitors, etc. */ public static Display[] getDisplays() { List<Display> displays = new ArrayList<>(); Guid.GUID monitorGuid = new Guid.GUID("E6F07B5F-EE97-4a90-B076-33F57BF4EAA7"); WinNT.HANDLE hDevInfo = SetupApi.INSTANCE.SetupDiGetClassDevs( monitorGuid, null, null, SetupApi.DIGCF_PRESENT | SetupApi.DIGCF_DEVICEINTERFACE); if (!hDevInfo.equals(WinNT.INVALID_HANDLE_VALUE)) { SP_DEVICE_INTERFACE_DATA deviceInterfaceData = new SetupApi.SP_DEVICE_INTERFACE_DATA(); deviceInterfaceData.cbSize = deviceInterfaceData.size(); // build a DevInfo Data structure SP_DEVINFO_DATA info = new SetupApi.SP_DEVINFO_DATA(); for (int memberIndex = 0; SetupApi.INSTANCE.SetupDiEnumDeviceInfo(hDevInfo, memberIndex, info); memberIndex++) { HKEY key = SetupApi.INSTANCE.SetupDiOpenDevRegKey( hDevInfo, info, SetupApi.DICS_FLAG_GLOBAL, 0, SetupApi.DIREG_DEV, WinNT.KEY_QUERY_VALUE); byte[] edid = new byte[1]; Advapi32 advapi32 = Advapi32.INSTANCE; IntByReference pType = new IntByReference(); IntByReference lpcbData = new IntByReference(); if (advapi32.RegQueryValueEx(key, "EDID", 0, pType, edid, lpcbData) == WinError.ERROR_MORE_DATA) { edid = new byte[lpcbData.getValue()]; if (advapi32.RegQueryValueEx(key, "EDID", 0, pType, edid, lpcbData) == WinError.ERROR_SUCCESS) { Display display = new WindowsDisplay(edid); displays.add(display); } } Advapi32.INSTANCE.RegCloseKey(key); } } return displays.toArray(new Display[displays.size()]); }
@Override public void revertToSelf() { Advapi32.INSTANCE.RevertToSelf(); }
/** * Impersonate a logged on user. * * @param windowsIdentity Windows identity obtained via LogonUser. */ public WindowsIdentityImpersonationContextImpl(HANDLE windowsIdentity) { if (!Advapi32.INSTANCE.ImpersonateLoggedOnUser(windowsIdentity)) { throw new Win32Exception(Kernel32.INSTANCE.GetLastError()); } }