Merge remote-tracking branch 'twall/master' into knownfolder
Esse commit está contido em:
@@ -9,6 +9,7 @@ Features
|
|||||||
--------
|
--------
|
||||||
* Updated AIX natives and build - [@twall](https://github.com/twall).
|
* Updated AIX natives and build - [@twall](https://github.com/twall).
|
||||||
* [#290](https://github.com/twall/jna/pull/290): Improved the stacktrace for the exceptions thrown by `com.sun.jna.Structure` - [@ebourg](https://github.com/ebourg).
|
* [#290](https://github.com/twall/jna/pull/290): Improved the stacktrace for the exceptions thrown by `com.sun.jna.Structure` - [@ebourg](https://github.com/ebourg).
|
||||||
|
* [#332](https://github.com/twall/jna/pull/332): Added Win32 Monitor Configuration API in `com.sun.jna.platform.win32.Dxva2` - [@msteiger](https://github.com/msteiger).
|
||||||
* Added Winspool monitor sample and updated Kernel32, WinBase, Winspool - [@wolftobias](https://github.com/wolftobias).
|
* Added Winspool monitor sample and updated Kernel32, WinBase, Winspool - [@wolftobias](https://github.com/wolftobias).
|
||||||
* Added Some minor changes to MS Office samples Test and small changes to the MS Office samples Bug Fixes - [@wolftobias](https://github.com/wolftobias).
|
* Added Some minor changes to MS Office samples Test and small changes to the MS Office samples Bug Fixes - [@wolftobias](https://github.com/wolftobias).
|
||||||
* [#333](https://github.com/twall/jna/pull/333): Added `CoTaskMemAlloc`, `CoTaskMemRealloc` and `CoTaskMemFree` to `com.sun.jna.platform.win32.Ole32` - [@msteiger](https://github.com/msteiger).
|
* [#333](https://github.com/twall/jna/pull/333): Added `CoTaskMemAlloc`, `CoTaskMemRealloc` and `CoTaskMemFree` to `com.sun.jna.platform.win32.Ole32` - [@msteiger](https://github.com/msteiger).
|
||||||
|
|||||||
@@ -0,0 +1,206 @@
|
|||||||
|
/*
|
||||||
|
* Copyright 2014 Martin Steiger
|
||||||
|
*
|
||||||
|
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||||
|
* you may not use this file except in compliance with the License.
|
||||||
|
* You may obtain a copy of the License at
|
||||||
|
*
|
||||||
|
* http://www.apache.org/licenses/LICENSE-2.0
|
||||||
|
*
|
||||||
|
* Unless required by applicable law or agreed to in writing, software
|
||||||
|
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||||
|
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||||
|
* See the License for the specific language governing permissions and
|
||||||
|
* limitations under the License.
|
||||||
|
*/
|
||||||
|
|
||||||
|
package com.sun.jna.contrib.demo;
|
||||||
|
|
||||||
|
import com.sun.jna.Memory;
|
||||||
|
import com.sun.jna.platform.EnumUtils;
|
||||||
|
import com.sun.jna.platform.win32.Dxva2;
|
||||||
|
import com.sun.jna.platform.win32.HighLevelMonitorConfigurationAPI;
|
||||||
|
import com.sun.jna.platform.win32.HighLevelMonitorConfigurationAPI.MC_COLOR_TEMPERATURE;
|
||||||
|
import com.sun.jna.platform.win32.HighLevelMonitorConfigurationAPI.MC_DISPLAY_TECHNOLOGY_TYPE;
|
||||||
|
import com.sun.jna.platform.win32.HighLevelMonitorConfigurationAPI.MC_DRIVE_TYPE;
|
||||||
|
import com.sun.jna.platform.win32.HighLevelMonitorConfigurationAPI.MC_GAIN_TYPE;
|
||||||
|
import com.sun.jna.platform.win32.HighLevelMonitorConfigurationAPI.MC_POSITION_TYPE;
|
||||||
|
import com.sun.jna.platform.win32.HighLevelMonitorConfigurationAPI.MC_SIZE_TYPE;
|
||||||
|
import com.sun.jna.platform.win32.LowLevelMonitorConfigurationAPI.MC_TIMING_REPORT;
|
||||||
|
import com.sun.jna.platform.win32.PhysicalMonitorEnumerationAPI.PHYSICAL_MONITOR;
|
||||||
|
import com.sun.jna.platform.win32.User32;
|
||||||
|
import com.sun.jna.platform.win32.WTypes.LPSTR;
|
||||||
|
import com.sun.jna.platform.win32.WinDef.DWORD;
|
||||||
|
import com.sun.jna.platform.win32.WinDef.DWORDByReference;
|
||||||
|
import com.sun.jna.platform.win32.WinDef.HDC;
|
||||||
|
import com.sun.jna.platform.win32.WinDef.LPARAM;
|
||||||
|
import com.sun.jna.platform.win32.WinDef.RECT;
|
||||||
|
import com.sun.jna.platform.win32.WinNT.HANDLE;
|
||||||
|
import com.sun.jna.platform.win32.WinUser;
|
||||||
|
import com.sun.jna.platform.win32.WinUser.HMONITOR;
|
||||||
|
import com.sun.jna.platform.win32.WinUser.MONITORENUMPROC;
|
||||||
|
import com.sun.jna.platform.win32.WinUser.MONITORINFOEX;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* A small demo that tests the Win32 monitor API.
|
||||||
|
* All available physical and virtual monitors are enumerated and
|
||||||
|
* their capabilities printed to stdout
|
||||||
|
* @author Martin Steiger
|
||||||
|
*/
|
||||||
|
public class MonitorInfoDemo
|
||||||
|
{
|
||||||
|
/**
|
||||||
|
* @param args (ignored)
|
||||||
|
*/
|
||||||
|
public static void main(String[] args)
|
||||||
|
{
|
||||||
|
System.out.println("Installed Physical Monitors: " + User32.INSTANCE.GetSystemMetrics(WinUser.SM_CMONITORS));
|
||||||
|
|
||||||
|
User32.INSTANCE.EnumDisplayMonitors(null, null, new MONITORENUMPROC() {
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public int apply(HMONITOR hMonitor, HDC hdc, RECT rect, LPARAM lparam)
|
||||||
|
{
|
||||||
|
enumerate(hMonitor);
|
||||||
|
|
||||||
|
return 1;
|
||||||
|
}
|
||||||
|
|
||||||
|
}, new LPARAM(0));
|
||||||
|
}
|
||||||
|
|
||||||
|
static void enumerate(HMONITOR hMonitor)
|
||||||
|
{
|
||||||
|
System.out.println("Found HMONITOR: " + hMonitor.getPointer().toString());
|
||||||
|
|
||||||
|
MONITORINFOEX info = new MONITORINFOEX();
|
||||||
|
User32.INSTANCE.GetMonitorInfo(hMonitor, info);
|
||||||
|
System.out.println("Screen " + info.rcMonitor);
|
||||||
|
System.out.println("Work area " + info.rcWork);
|
||||||
|
boolean isPrimary = (info.dwFlags & WinUser.MONITORINFOF_PRIMARY) != 0;
|
||||||
|
System.out.println("Primary? " + (isPrimary ? "yes" : "no"));
|
||||||
|
System.out.println("Device " + new String(info.szDevice));
|
||||||
|
|
||||||
|
DWORDByReference pdwNumberOfPhysicalMonitors = new DWORDByReference();
|
||||||
|
Dxva2.INSTANCE.GetNumberOfPhysicalMonitorsFromHMONITOR(hMonitor, pdwNumberOfPhysicalMonitors);
|
||||||
|
int monitorCount = pdwNumberOfPhysicalMonitors.getValue().intValue();
|
||||||
|
|
||||||
|
System.out.println("HMONITOR is linked to " + monitorCount + " physical monitors");
|
||||||
|
|
||||||
|
PHYSICAL_MONITOR[] physMons = new PHYSICAL_MONITOR[monitorCount];
|
||||||
|
Dxva2.INSTANCE.GetPhysicalMonitorsFromHMONITOR(hMonitor, monitorCount, physMons);
|
||||||
|
|
||||||
|
for (int i = 0; i < monitorCount; i++)
|
||||||
|
{
|
||||||
|
HANDLE hPhysicalMonitor = physMons[0].hPhysicalMonitor;
|
||||||
|
System.out.println("Monitor " + i + " - " + new String(physMons[i].szPhysicalMonitorDescription));
|
||||||
|
|
||||||
|
enumeratePhysicalMonitor(hPhysicalMonitor);
|
||||||
|
}
|
||||||
|
|
||||||
|
Dxva2.INSTANCE.DestroyPhysicalMonitors(monitorCount, physMons);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @param hPhysicalMonitor
|
||||||
|
*/
|
||||||
|
private static void enumeratePhysicalMonitor(HANDLE hPhysicalMonitor)
|
||||||
|
{
|
||||||
|
MC_DISPLAY_TECHNOLOGY_TYPE.ByReference techType = new MC_DISPLAY_TECHNOLOGY_TYPE.ByReference();
|
||||||
|
Dxva2.INSTANCE.GetMonitorTechnologyType(hPhysicalMonitor, techType);
|
||||||
|
System.out.println("TECHTYPE: " + techType.getValue());
|
||||||
|
|
||||||
|
DWORDByReference temps = new DWORDByReference();
|
||||||
|
DWORDByReference caps = new DWORDByReference();
|
||||||
|
Dxva2.INSTANCE.GetMonitorCapabilities(hPhysicalMonitor, caps, temps);
|
||||||
|
System.out.println("CAPS " + EnumUtils.setFromInteger(caps.getValue().intValue(), HighLevelMonitorConfigurationAPI.MC_CAPS.class));
|
||||||
|
System.out.println("Temps " + temps.getValue());
|
||||||
|
|
||||||
|
// Brightness
|
||||||
|
DWORDByReference pdwMinimumBrightness = new DWORDByReference();
|
||||||
|
DWORDByReference pdwCurrentBrightness = new DWORDByReference();
|
||||||
|
DWORDByReference pdwMaximumBrightness = new DWORDByReference();
|
||||||
|
Dxva2.INSTANCE.GetMonitorBrightness(hPhysicalMonitor, pdwMinimumBrightness, pdwCurrentBrightness, pdwMaximumBrightness);
|
||||||
|
|
||||||
|
System.out.println("Brightness Min: " + pdwMinimumBrightness.getValue());
|
||||||
|
System.out.println("Brightness Current: " + pdwCurrentBrightness.getValue());
|
||||||
|
System.out.println("Brightness Max: " + pdwMaximumBrightness.getValue());
|
||||||
|
|
||||||
|
// Contrast
|
||||||
|
DWORDByReference pdwMinimumContrast = new DWORDByReference();
|
||||||
|
DWORDByReference pdwCurrentContrast = new DWORDByReference();
|
||||||
|
DWORDByReference pdwMaximumContrast = new DWORDByReference();
|
||||||
|
Dxva2.INSTANCE.GetMonitorContrast(hPhysicalMonitor, pdwMinimumContrast, pdwCurrentContrast, pdwMaximumContrast);
|
||||||
|
|
||||||
|
System.out.println("Contrast Min: " + pdwMinimumContrast.getValue());
|
||||||
|
System.out.println("Contrast Current: " + pdwCurrentContrast.getValue());
|
||||||
|
System.out.println("Contrast Max: " + pdwMaximumContrast.getValue());
|
||||||
|
|
||||||
|
// Temperature
|
||||||
|
MC_COLOR_TEMPERATURE.ByReference pctCurrentColorTemperature = new MC_COLOR_TEMPERATURE.ByReference();
|
||||||
|
Dxva2.INSTANCE.GetMonitorColorTemperature(hPhysicalMonitor, pctCurrentColorTemperature);
|
||||||
|
System.out.println("Current Temp: " + pctCurrentColorTemperature.getValue());
|
||||||
|
|
||||||
|
// Capabilities string
|
||||||
|
DWORDByReference pdwCapabilitiesStringLengthInCharacters = new DWORDByReference();
|
||||||
|
Dxva2.INSTANCE.GetCapabilitiesStringLength(hPhysicalMonitor, pdwCapabilitiesStringLengthInCharacters);
|
||||||
|
DWORD capStrLen = pdwCapabilitiesStringLengthInCharacters.getValue();
|
||||||
|
|
||||||
|
LPSTR pszASCIICapabilitiesString = new LPSTR(new Memory(capStrLen.intValue()));
|
||||||
|
Dxva2.INSTANCE.CapabilitiesRequestAndCapabilitiesReply(hPhysicalMonitor, pszASCIICapabilitiesString, capStrLen);
|
||||||
|
System.out.println("Cap-String:" + new String(pszASCIICapabilitiesString.getPointer().getString(0)));
|
||||||
|
|
||||||
|
// Position
|
||||||
|
MC_POSITION_TYPE ptPositionType = MC_POSITION_TYPE.MC_HORIZONTAL_POSITION;
|
||||||
|
DWORDByReference pdwMinimumPosition = new DWORDByReference();
|
||||||
|
DWORDByReference pdwCurrentPosition = new DWORDByReference();
|
||||||
|
DWORDByReference pdwMaximumPosition = new DWORDByReference();
|
||||||
|
Dxva2.INSTANCE.GetMonitorDisplayAreaPosition(hPhysicalMonitor, ptPositionType, pdwMinimumPosition, pdwCurrentPosition, pdwMaximumPosition);
|
||||||
|
|
||||||
|
System.out.println("Position (horz) Min: " + pdwMinimumPosition.getValue());
|
||||||
|
System.out.println("Position (horz) Current: " + pdwCurrentPosition.getValue());
|
||||||
|
System.out.println("Position (horz) Max: " + pdwMaximumPosition.getValue());
|
||||||
|
|
||||||
|
// Size
|
||||||
|
MC_SIZE_TYPE ptSizeType = MC_SIZE_TYPE.MC_WIDTH;
|
||||||
|
DWORDByReference pdwMinimumSize = new DWORDByReference();
|
||||||
|
DWORDByReference pdwCurrentSize = new DWORDByReference();
|
||||||
|
DWORDByReference pdwMaximumSize = new DWORDByReference();
|
||||||
|
Dxva2.INSTANCE.GetMonitorDisplayAreaSize(hPhysicalMonitor, ptSizeType, pdwMinimumSize, pdwCurrentSize, pdwMaximumSize);
|
||||||
|
|
||||||
|
System.out.println("Width Min: " + pdwMinimumSize.getValue());
|
||||||
|
System.out.println("Width Current: " + pdwCurrentSize.getValue());
|
||||||
|
System.out.println("Width Max: " + pdwMaximumSize.getValue());
|
||||||
|
|
||||||
|
// Gain
|
||||||
|
MC_GAIN_TYPE ptGainType = MC_GAIN_TYPE.MC_RED_GAIN;
|
||||||
|
DWORDByReference pdwMinimumGain = new DWORDByReference();
|
||||||
|
DWORDByReference pdwCurrentGain = new DWORDByReference();
|
||||||
|
DWORDByReference pdwMaximumGain = new DWORDByReference();
|
||||||
|
Dxva2.INSTANCE.GetMonitorRedGreenOrBlueGain(hPhysicalMonitor, ptGainType, pdwMinimumGain, pdwCurrentGain, pdwMaximumGain);
|
||||||
|
|
||||||
|
System.out.println("Red Gain Min: " + pdwMinimumSize.getValue());
|
||||||
|
System.out.println("Red Gain Current: " + pdwCurrentSize.getValue());
|
||||||
|
System.out.println("Red Gain Max: " + pdwMaximumSize.getValue());
|
||||||
|
|
||||||
|
// Drive
|
||||||
|
MC_DRIVE_TYPE ptDriveType = MC_DRIVE_TYPE.MC_RED_DRIVE;
|
||||||
|
DWORDByReference pdwMinimumDrive = new DWORDByReference();
|
||||||
|
DWORDByReference pdwCurrentDrive = new DWORDByReference();
|
||||||
|
DWORDByReference pdwMaximumDrive = new DWORDByReference();
|
||||||
|
Dxva2.INSTANCE.GetMonitorRedGreenOrBlueDrive(hPhysicalMonitor, ptDriveType, pdwMinimumDrive, pdwCurrentDrive, pdwMaximumDrive);
|
||||||
|
|
||||||
|
System.out.println("Red Drive Min: " + pdwMinimumSize.getValue());
|
||||||
|
System.out.println("Red Drive Current: " + pdwCurrentSize.getValue());
|
||||||
|
System.out.println("Red Drive Max: " + pdwMaximumSize.getValue());
|
||||||
|
|
||||||
|
// Timing Report
|
||||||
|
MC_TIMING_REPORT pmtrMonitorTimingReport = new MC_TIMING_REPORT();
|
||||||
|
Dxva2.INSTANCE.GetTimingReport(hPhysicalMonitor, pmtrMonitorTimingReport);
|
||||||
|
System.out.println("HorizontalFrequencyInHZ " + pmtrMonitorTimingReport.dwHorizontalFrequencyInHZ);
|
||||||
|
System.out.println("VerticalFrequencyInHZ " + pmtrMonitorTimingReport.dwVerticalFrequencyInHZ);
|
||||||
|
|
||||||
|
System.out.println("--------------------------------------");
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
@@ -0,0 +1,62 @@
|
|||||||
|
/*
|
||||||
|
* Copyright 2014 Martin Steiger
|
||||||
|
*
|
||||||
|
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||||
|
* you may not use this file except in compliance with the License.
|
||||||
|
* You may obtain a copy of the License at
|
||||||
|
*
|
||||||
|
* http://www.apache.org/licenses/LICENSE-2.0
|
||||||
|
*
|
||||||
|
* Unless required by applicable law or agreed to in writing, software
|
||||||
|
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||||
|
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||||
|
* See the License for the specific language governing permissions and
|
||||||
|
* limitations under the License.
|
||||||
|
*/
|
||||||
|
|
||||||
|
package com.sun.jna.platform;
|
||||||
|
|
||||||
|
import com.sun.jna.FromNativeContext;
|
||||||
|
import com.sun.jna.ToNativeContext;
|
||||||
|
import com.sun.jna.TypeConverter;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* A {@link TypeConverter} that maps an integer enum value to
|
||||||
|
* an actual Java enum.
|
||||||
|
* @param <T> the enum type
|
||||||
|
* @author Martin Steiger
|
||||||
|
*/
|
||||||
|
public class EnumConverter<T extends Enum<T>> implements TypeConverter {
|
||||||
|
|
||||||
|
private final Class<T> clazz;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @param clazz the enum class
|
||||||
|
*/
|
||||||
|
public EnumConverter(Class<T> clazz)
|
||||||
|
{
|
||||||
|
this.clazz = clazz;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public T fromNative(Object input, FromNativeContext context) {
|
||||||
|
Integer i = (Integer) input;
|
||||||
|
|
||||||
|
T[] vals = clazz.getEnumConstants();
|
||||||
|
return vals[i];
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public Integer toNative(Object input, ToNativeContext context) {
|
||||||
|
T t = clazz.cast(input);
|
||||||
|
|
||||||
|
return Integer.valueOf(t.ordinal());
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public Class<Integer> nativeType() {
|
||||||
|
return Integer.class;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
@@ -0,0 +1,105 @@
|
|||||||
|
/*
|
||||||
|
* Copyright 2014 Martin Steiger
|
||||||
|
*
|
||||||
|
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||||
|
* you may not use this file except in compliance with the License.
|
||||||
|
* You may obtain a copy of the License at
|
||||||
|
*
|
||||||
|
* http://www.apache.org/licenses/LICENSE-2.0
|
||||||
|
*
|
||||||
|
* Unless required by applicable law or agreed to in writing, software
|
||||||
|
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||||
|
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||||
|
* See the License for the specific language governing permissions and
|
||||||
|
* limitations under the License.
|
||||||
|
*/
|
||||||
|
|
||||||
|
package com.sun.jna.platform;
|
||||||
|
|
||||||
|
import java.util.HashSet;
|
||||||
|
import java.util.Set;
|
||||||
|
|
||||||
|
import com.sun.jna.platform.win32.FlagEnum;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Several helper methods to convert integer flag (sets)
|
||||||
|
* into enum (sets)
|
||||||
|
* @author Martin Steiger
|
||||||
|
*/
|
||||||
|
public class EnumUtils
|
||||||
|
{
|
||||||
|
/**
|
||||||
|
* Uninitialized integer flag
|
||||||
|
*/
|
||||||
|
public static final int UNINITIALIZED = -1;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @param val the enum
|
||||||
|
* @return the index of the enum in the enum list
|
||||||
|
*/
|
||||||
|
public static <E extends Enum<E>> int toInteger(E val)
|
||||||
|
{
|
||||||
|
@SuppressWarnings("unchecked")
|
||||||
|
E[] vals = (E[]) val.getClass().getEnumConstants();
|
||||||
|
|
||||||
|
for (int idx = 0; idx < vals.length; idx++)
|
||||||
|
{
|
||||||
|
if (vals[idx] == val)
|
||||||
|
return idx;
|
||||||
|
}
|
||||||
|
|
||||||
|
throw new IllegalArgumentException();
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @param idx the enum index
|
||||||
|
* @param clazz the enum class
|
||||||
|
* @return the enum at position idx
|
||||||
|
*/
|
||||||
|
public static <E extends Enum<E>> E fromInteger(int idx, Class<E> clazz)
|
||||||
|
{
|
||||||
|
if (idx == UNINITIALIZED)
|
||||||
|
return null;
|
||||||
|
|
||||||
|
E[] vals = clazz.getEnumConstants();
|
||||||
|
return vals[idx];
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @param flags the ORed flags
|
||||||
|
* @param clazz the enum class
|
||||||
|
* @return the representing set
|
||||||
|
*/
|
||||||
|
public static <T extends FlagEnum> Set<T> setFromInteger(int flags, Class<T> clazz)
|
||||||
|
{
|
||||||
|
T[] vals = clazz.getEnumConstants();
|
||||||
|
Set<T> result = new HashSet<T>();
|
||||||
|
|
||||||
|
for (T val : vals)
|
||||||
|
{
|
||||||
|
if ((flags & val.getFlag()) != 0)
|
||||||
|
{
|
||||||
|
result.add(val);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return result;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @param set the set to convert
|
||||||
|
* @return the flags combined into an integer
|
||||||
|
*/
|
||||||
|
public static <T extends FlagEnum> int setToInteger(Set<T> set) {
|
||||||
|
int sum = 0;
|
||||||
|
|
||||||
|
for (T t : set)
|
||||||
|
{
|
||||||
|
sum |= t.getFlag();
|
||||||
|
}
|
||||||
|
|
||||||
|
return sum;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
@@ -0,0 +1,508 @@
|
|||||||
|
/*
|
||||||
|
* Copyright 2014 Martin Steiger
|
||||||
|
*
|
||||||
|
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||||
|
* you may not use this file except in compliance with the License.
|
||||||
|
* You may obtain a copy of the License at
|
||||||
|
*
|
||||||
|
* http://www.apache.org/licenses/LICENSE-2.0
|
||||||
|
*
|
||||||
|
* Unless required by applicable law or agreed to in writing, software
|
||||||
|
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||||
|
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||||
|
* See the License for the specific language governing permissions and
|
||||||
|
* limitations under the License.
|
||||||
|
*/
|
||||||
|
|
||||||
|
package com.sun.jna.platform.win32;
|
||||||
|
|
||||||
|
import java.util.HashMap;
|
||||||
|
|
||||||
|
import com.sun.jna.DefaultTypeMapper;
|
||||||
|
import com.sun.jna.Library;
|
||||||
|
import com.sun.jna.Native;
|
||||||
|
import com.sun.jna.platform.EnumConverter;
|
||||||
|
import com.sun.jna.platform.win32.WTypes.LPSTR;
|
||||||
|
import com.sun.jna.platform.win32.WinDef.BOOL;
|
||||||
|
import com.sun.jna.platform.win32.WinDef.BYTE;
|
||||||
|
import com.sun.jna.platform.win32.WinDef.DWORD;
|
||||||
|
import com.sun.jna.platform.win32.WinDef.DWORDByReference;
|
||||||
|
import com.sun.jna.platform.win32.WinNT.HANDLE;
|
||||||
|
import com.sun.jna.platform.win32.WinUser.HMONITOR;
|
||||||
|
import com.sun.jna.win32.StdCallLibrary;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* A port of dxva2.dll
|
||||||
|
* @author Martin Steiger
|
||||||
|
*/
|
||||||
|
public interface Dxva2 extends StdCallLibrary, PhysicalMonitorEnumerationAPI, HighLevelMonitorConfigurationAPI, LowLevelMonitorConfigurationAPI
|
||||||
|
{
|
||||||
|
/**
|
||||||
|
* The only instance of the library
|
||||||
|
*/
|
||||||
|
Dxva2 INSTANCE = (Dxva2) Native.loadLibrary("Dxva2", Dxva2.class, new HashMap<String, Object>()
|
||||||
|
{
|
||||||
|
private static final long serialVersionUID = -1987971664975780480L;
|
||||||
|
|
||||||
|
{
|
||||||
|
put(Library.OPTION_TYPE_MAPPER, new DefaultTypeMapper()
|
||||||
|
{
|
||||||
|
{
|
||||||
|
addTypeConverter(MC_POSITION_TYPE.class, new EnumConverter<>(MC_POSITION_TYPE.class));
|
||||||
|
addTypeConverter(MC_SIZE_TYPE.class, new EnumConverter<>(MC_SIZE_TYPE.class));
|
||||||
|
addTypeConverter(MC_GAIN_TYPE.class, new EnumConverter<>(MC_GAIN_TYPE.class));
|
||||||
|
addTypeConverter(MC_DRIVE_TYPE.class, new EnumConverter<>(MC_DRIVE_TYPE.class));
|
||||||
|
}
|
||||||
|
});
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
|
|
||||||
|
/******************************************************************************
|
||||||
|
Monitor capability functions
|
||||||
|
******************************************************************************/
|
||||||
|
/**
|
||||||
|
* Retrieves the configuration capabilities of a monitor. Call this function to find out which high-level
|
||||||
|
* monitor configuration functions are supported by the monitor.
|
||||||
|
* @param hMonitor Handle to a physical monitor. To get the monitor handle, call
|
||||||
|
* {@link #GetPhysicalMonitorsFromHMONITOR}
|
||||||
|
* @param pdwMonitorCapabilities Receives a bitwise OR of capabilities flags. (MC_CAPS_*)
|
||||||
|
* @param pdwSupportedColorTemperatures Receives a bitwise OR of color temperature flags.
|
||||||
|
* (MC_SUPPORTED_COLOR_TEMPERATURE_*)
|
||||||
|
* @return If the function succeeds, the return value is TRUE. If the function fails, the return value is
|
||||||
|
* FALSE. To get extended error information, call GetLastError.
|
||||||
|
* <br/><br/>
|
||||||
|
* The function fails if the monitor does not support DDC/CI.
|
||||||
|
*/
|
||||||
|
BOOL GetMonitorCapabilities(HANDLE hMonitor, DWORDByReference pdwMonitorCapabilities, DWORDByReference pdwSupportedColorTemperatures);
|
||||||
|
|
||||||
|
/******************************************************************************
|
||||||
|
Monitor setting persistence functions
|
||||||
|
******************************************************************************/
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Saves the current monitor settings to the display's nonvolatile storage.
|
||||||
|
* <br/><br/>
|
||||||
|
* This function takes about 200 milliseconds to return.
|
||||||
|
* This high-level function is identical to the low-level function SaveCurrentSettings.
|
||||||
|
* @param hMonitor Handle to a physical monitor. To get the monitor handle, call GetPhysicalMonitorsFromHMONITOR
|
||||||
|
* @return If the function succeeds, the return value is TRUE. If the function fails, the return value is FALSE.
|
||||||
|
*/
|
||||||
|
BOOL SaveCurrentMonitorSettings(HANDLE hMonitor);
|
||||||
|
|
||||||
|
/******************************************************************************
|
||||||
|
Monitor meta-data functions
|
||||||
|
******************************************************************************/
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Retrieves the type of technology used by a monitor.
|
||||||
|
* This function does not support every display technology. If a monitor uses a display technology that is
|
||||||
|
* supported by this function, the GetMonitorCapabilities function returns the MC_CAPS_DISPLAY_TECHNOLOGY_TYPE
|
||||||
|
* flag. If that flag is absent, the GetMonitorTechnologyType function fails.
|
||||||
|
* Some monitor technologies do not support certain monitor configuration functions. For example,
|
||||||
|
* the DegaussMonitor function is supported only for cathode ray tube (CRT) monitors. To find out whether a
|
||||||
|
* specific function is supported, call GetMonitorCapabilities.
|
||||||
|
* @param hMonitor Handle to a physical monitor. To get the monitor handle, call GetPhysicalMonitorsFromHMONITOR
|
||||||
|
* @param pdtyDisplayTechnologyType Receives the technology type as defined in {@link HighLevelMonitorConfigurationAPI.MC_DISPLAY_TECHNOLOGY_TYPE}.
|
||||||
|
* @return If the function succeeds, the return value is TRUE. If the function fails, the return value is FALSE.
|
||||||
|
*/
|
||||||
|
BOOL GetMonitorTechnologyType(HANDLE hMonitor, MC_DISPLAY_TECHNOLOGY_TYPE.ByReference pdtyDisplayTechnologyType);
|
||||||
|
|
||||||
|
/******************************************************************************
|
||||||
|
Monitor image calibration functions
|
||||||
|
******************************************************************************/
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Retrieves a monitor's minimum, maximum, and current brightness settings.
|
||||||
|
* <br/><br/>
|
||||||
|
* If this function is supported, the GetMonitorCapabilities function returns the MC_CAPS_BRIGHTNESS flag.
|
||||||
|
* This function takes about 40 milliseconds to return. The brightness setting is a continuous monitor setting.
|
||||||
|
* @param hMonitor Handle to a physical monitor
|
||||||
|
* @param pdwMinimumBrightness Receives the monitor's minimum brightness.
|
||||||
|
* @param pdwCurrentBrightness Receives the monitor's current brightness.
|
||||||
|
* @param pdwMaximumBrightness Receives the monitor's maximum brightness.
|
||||||
|
* @return If the function succeeds, the return value is TRUE. If the function fails, the return value is FALSE.
|
||||||
|
*/
|
||||||
|
BOOL GetMonitorBrightness(HANDLE hMonitor, DWORDByReference pdwMinimumBrightness,
|
||||||
|
DWORDByReference pdwCurrentBrightness, DWORDByReference pdwMaximumBrightness);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Retrieves a monitor's minimum, maximum, and current contrast settings.
|
||||||
|
* @param hMonitor Handle to a physical monitor.
|
||||||
|
* @param pdwMinimumContrast Receives the monitor's minimum contrast.
|
||||||
|
* @param pdwCurrentContrast Receives the monitor's current contrast.
|
||||||
|
* @param pdwMaximumContrast Receives the monitor's maximum contrast.
|
||||||
|
* @return If the function succeeds, the return value is TRUE. If the function fails, the return value is FALSE
|
||||||
|
*/
|
||||||
|
BOOL GetMonitorContrast(HANDLE hMonitor, DWORDByReference pdwMinimumContrast, DWORDByReference pdwCurrentContrast,
|
||||||
|
DWORDByReference pdwMaximumContrast);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Retrieves a monitor's current color temperature.
|
||||||
|
* <br/><br/>
|
||||||
|
* If this function is supported, the GetMonitorCapabilities function returns the MC_CAPS_COLOR_TEMPERATURE flag.
|
||||||
|
* This function takes between 0 and 80 milliseconds to return.
|
||||||
|
* @param hMonitor Handle to a physical monitor.
|
||||||
|
* @param pctCurrentColorTemperature Receives the monitor's current color temperature.
|
||||||
|
* @return If the function succeeds, the return value is TRUE. If the function fails, the return value is FALSE
|
||||||
|
*/
|
||||||
|
BOOL GetMonitorColorTemperature(HANDLE hMonitor, MC_COLOR_TEMPERATURE.ByReference pctCurrentColorTemperature);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Retrieves a monitor's red, green, or blue drive value.
|
||||||
|
* <br/><br/>
|
||||||
|
* Drive settings are generally used to adjust the monitor's white point. Drive and black level are different
|
||||||
|
* names for the same monitor setting. If this function is supported, the GetMonitorCapabilities function returns
|
||||||
|
* the MC_CAPS_RED_GREEN_BLUE_DRIVE flag.
|
||||||
|
* @param hMonitor Handle to a physical monitor.
|
||||||
|
* @param dtDriveType A member of the MC_DRIVE_TYPE enumeration, specifying whether to retrieve the red, green, or blue drive value.
|
||||||
|
* @param pdwMinimumDrive Receives the minimum red, green, or blue drive value.
|
||||||
|
* @param pdwCurrentDrive Receives the current red, green, or blue drive value.
|
||||||
|
* @param pdwMaximumDrive Receives the maximum red, green, or blue drive value.
|
||||||
|
* @return If the function succeeds, the return value is TRUE. If the function fails, the return value is FALSE
|
||||||
|
*/
|
||||||
|
BOOL GetMonitorRedGreenOrBlueDrive(HANDLE hMonitor, MC_DRIVE_TYPE dtDriveType, DWORDByReference pdwMinimumDrive,
|
||||||
|
DWORDByReference pdwCurrentDrive, DWORDByReference pdwMaximumDrive);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Retrieves a monitor's red, green, or blue gain value.
|
||||||
|
* <br/><br/>
|
||||||
|
* Gain settings are generally used to adjust the monitor's white point. If this function is supported, the
|
||||||
|
* GetMonitorCapabilities function returns the MC_CAPS_RED_GREEN_BLUE_GAIN flag. This function takes about 40 milliseconds to return.
|
||||||
|
* The gain settings are continuous monitor settings.
|
||||||
|
* @param hMonitor Handle to a physical monitor.
|
||||||
|
* @param gtGainType A member of the MC_GAIN_TYPE enumeration, specifying whether to retrieve the red, green, or blue gain value.
|
||||||
|
* @param pdwMinimumGain Receives the minimum red, green, or blue gain value.
|
||||||
|
* @param pdwCurrentGain Receives the current red, green, or blue gain value.
|
||||||
|
* @param pdwMaximumGain Receives the maximum red, green, or blue gain value.
|
||||||
|
* @return If the function succeeds, the return value is TRUE. If the function fails, the return value is FALSE
|
||||||
|
*/
|
||||||
|
BOOL GetMonitorRedGreenOrBlueGain(HANDLE hMonitor, MC_GAIN_TYPE gtGainType, DWORDByReference pdwMinimumGain,
|
||||||
|
DWORDByReference pdwCurrentGain, DWORDByReference pdwMaximumGain);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Sets a monitor's brightness value.
|
||||||
|
* <br/><br/>
|
||||||
|
* If this function is supported, the GetMonitorCapabilities function returns the MC_CAPS_BRIGHTNESS flag.
|
||||||
|
* This function takes about 50 milliseconds to return.
|
||||||
|
* The brightness setting is a continuous monitor setting.
|
||||||
|
* @param hMonitor Handle to a physical monitor.
|
||||||
|
* @param dwNewBrightness Brightness value. To get the monitor's minimum and maximum brightness values, call GetMonitorBrightness.
|
||||||
|
* @return If the function succeeds, the return value is TRUE. If the function fails, the return value is FALSE
|
||||||
|
*/
|
||||||
|
BOOL SetMonitorBrightness(HANDLE hMonitor, int dwNewBrightness);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Sets a monitor's contrast value.
|
||||||
|
* <br/><br/>
|
||||||
|
* If this function is supported, the GetMonitorCapabilities function returns the MC_CAPS_CONTRAST flag.
|
||||||
|
* This function takes about 50 milliseconds to return. The brightness setting is a continuous monitor setting.
|
||||||
|
* @param hMonitor Handle to a physical monitor.
|
||||||
|
* @param dwNewContrast Contrast value. To get the monitor's minimum and maximum contrast values, call GetMonitorContrast.
|
||||||
|
* @return If the function succeeds, the return value is TRUE. If the function fails, the return value is FALSE
|
||||||
|
*/
|
||||||
|
BOOL SetMonitorContrast(HANDLE hMonitor, int dwNewContrast);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Sets a monitor's color temperature.
|
||||||
|
* <br/><br/>
|
||||||
|
* If this function is supported, the GetMonitorCapabilities function returns the MC_CAPS_COLOR_TEMPERATURE flag.
|
||||||
|
* The GetMonitorCapabilities function also returns the range of color temperatures that the monitor supports.
|
||||||
|
* The ctCurrentColorTemperature parameter must correspond to one of these values. Changing the color temperature
|
||||||
|
* changes the monitor's white point. It can also change the current drive and gain settings. To get the new drive
|
||||||
|
* and gain settings, call GetMonitorRedGreenOrBlueDrive and GetMonitorRedGreenOrBlueGain, respectively.
|
||||||
|
* This function takes from 50 to 90 milliseconds to return.
|
||||||
|
* @param hMonitor Handle to a physical monitor.
|
||||||
|
* @param ctCurrentColorTemperature Color temperature, specified as a member of the MC_COLOR_TEMPERATURE enumeration.
|
||||||
|
* @return If the function succeeds, the return value is TRUE. If the function fails, the return value is FALSE
|
||||||
|
*/
|
||||||
|
BOOL SetMonitorColorTemperature(HANDLE hMonitor, MC_COLOR_TEMPERATURE ctCurrentColorTemperature);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Sets a monitor's red, green, or blue drive value.
|
||||||
|
* <br/><br/>
|
||||||
|
* Drive settings are generally used to adjust the
|
||||||
|
* monitor's white point. Drive and black level are different names for the same monitor setting. If this function
|
||||||
|
* is supported, the GetMonitorCapabilities function returns the MC_CAPS_RED_GREEN_BLUE_DRIVE flag. This function
|
||||||
|
* takes about 50 milliseconds to return. Changing the drive settings can change the color temperature. To get the
|
||||||
|
* new color temperature, call GetMonitorColorTemperature. The drive settings are continuous monitor settings
|
||||||
|
* @param hMonitor Handle to a physical monitor.
|
||||||
|
* @param dtDriveType A member of the MC_DRIVE_TYPE enumeration, specifying whether to set the red, green, or blue
|
||||||
|
* drive value.
|
||||||
|
* @param dwNewDrive Red, green, or blue drive value. To get the monitor's minimum and maximum drive values, call
|
||||||
|
* GetMonitorRedGreenOrBlueDrive.
|
||||||
|
* @return If the function succeeds, the return value is TRUE. If the function fails, the return value is FALSE
|
||||||
|
*/
|
||||||
|
BOOL SetMonitorRedGreenOrBlueDrive(HANDLE hMonitor, MC_DRIVE_TYPE dtDriveType, int dwNewDrive);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Sets a monitor's red, green, or blue gain value.
|
||||||
|
* <br/><br/>
|
||||||
|
* Gain settings are generally used to adjust the
|
||||||
|
* monitor's white point. If this function is supported, the GetMonitorCapabilities function returns the
|
||||||
|
* MC_CAPS_RED_GREEN_BLUE_GAIN flag. This function takes about 50 milliseconds to return. Changing the gain settings
|
||||||
|
* can change the color temperature. To get the new color temperature, call GetMonitorColorTemperature. The gain
|
||||||
|
* settings are continuous monitor settings.
|
||||||
|
* @param hMonitor Handle to a physical monitor.
|
||||||
|
* @param gtGainType A member of the MC_GAIN_TYPE enumeration, specifying whether to set the red, green, or blue
|
||||||
|
* gain.
|
||||||
|
* @param dwNewGain Red, green, or blue gain value. To get the monitor's minimum and maximum gain values, call
|
||||||
|
* GetMonitorRedGreenOrBlueGain.
|
||||||
|
* @return If the function succeeds, the return value is TRUE. If the function fails, the return value is FALSE
|
||||||
|
*/
|
||||||
|
BOOL SetMonitorRedGreenOrBlueGain(HANDLE hMonitor, MC_GAIN_TYPE gtGainType, int dwNewGain);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Degausses a monitor.
|
||||||
|
* <br/><br/>
|
||||||
|
* If this function is supported, the GetMonitorCapabilities function returns the MC_CAPS_DEGAUSS flag. Degaussing
|
||||||
|
* is supported only by cathode ray tube (CRT) monitors. This function takes about 50 milliseconds to return. This
|
||||||
|
* function should not be called frequently, because calling it frequently will not noticeably improve the monitor's
|
||||||
|
* image quality or color fidelity.
|
||||||
|
* @param hMonitor Handle to a physical monitor.
|
||||||
|
* @return If the function succeeds, the return value is TRUE. If the function fails, the return value is FALSE
|
||||||
|
*/
|
||||||
|
BOOL DegaussMonitor(HANDLE hMonitor);
|
||||||
|
|
||||||
|
/******************************************************************************
|
||||||
|
* Monitor image size and position calibration functions
|
||||||
|
******************************************************************************/
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Retrieves a monitor's minimum, maximum, and current width or height.
|
||||||
|
* <br/><br/>
|
||||||
|
* If this function is supported, the GetMonitorCapabilities function returns the MC_CAPS_DISPLAY_AREA_SIZE flag.
|
||||||
|
* This function takes about 40 milliseconds to return. The width and height settings are continuous monitor settings.
|
||||||
|
* @param hMonitor Handle to a physical monitor. To get the monitor handle, call GetPhysicalMonitorsFromHMONITOR
|
||||||
|
* @param stSizeType A member of the MC_SIZE_TYPE enumeration, specifying whether to retrieve the width or the height.
|
||||||
|
* @param pdwMinimumWidthOrHeight Receives the minimum width or height.
|
||||||
|
* @param pdwCurrentWidthOrHeight Receives the current width or height.
|
||||||
|
* @param pdwMaximumWidthOrHeight Receives the maximum width or height.
|
||||||
|
* @return If the function succeeds, the return value is TRUE. If the function fails, the return value is FALSE.
|
||||||
|
*/
|
||||||
|
BOOL GetMonitorDisplayAreaSize(HANDLE hMonitor, MC_SIZE_TYPE stSizeType, DWORDByReference pdwMinimumWidthOrHeight,
|
||||||
|
DWORDByReference pdwCurrentWidthOrHeight, DWORDByReference pdwMaximumWidthOrHeight);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Retrieves a monitor's minimum, maximum, and current horizontal or vertical position.
|
||||||
|
* <br/><br/>
|
||||||
|
* If this function is supported, the GetMonitorCapabilities function returns the MC_CAPS_DISPLAY_AREA_POSITION flag.
|
||||||
|
* This function takes about 40 milliseconds to return. The horizontal and vertical position are continuous monitor settings.
|
||||||
|
* @param hMonitor Handle to a physical monitor. To get the monitor handle, call GetPhysicalMonitorsFromHMONITOR
|
||||||
|
* @param ptPositionType A member of the MC_POSITION_TYPE enumeration, specifying whether to retrieve the horizontal position or the vertical position.
|
||||||
|
* @param pdwMinimumPosition Receives the minimum horizontal or vertical position.
|
||||||
|
* @param pdwCurrentPosition Receives the current horizontal or vertical position.
|
||||||
|
* @param pdwMaximumPosition Receives the maximum horizontal or vertical position.
|
||||||
|
* @return If the function succeeds, the return value is TRUE. If the function fails, the return value is FALSE.
|
||||||
|
*/
|
||||||
|
BOOL GetMonitorDisplayAreaPosition(HANDLE hMonitor, MC_POSITION_TYPE ptPositionType,
|
||||||
|
DWORDByReference pdwMinimumPosition, DWORDByReference pdwCurrentPosition,
|
||||||
|
DWORDByReference pdwMaximumPosition);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Sets the width or height of a monitor's display area.
|
||||||
|
* <br/><br/>
|
||||||
|
* If this function is supported, the GetMonitorCapabilities function returns the MC_CAPS_DISPLAY_AREA_SIZE flag.
|
||||||
|
* This function takes about 50 milliseconds to return. The width and height settings are continuous monitor settings.
|
||||||
|
* @param hMonitor Handle to a physical monitor. To get the monitor handle, call GetPhysicalMonitorsFromHMONITOR
|
||||||
|
* @param stSizeType A member of the MC_SIZE_TYPE enumeration, specifying whether to set the width or the height.
|
||||||
|
* @param dwNewDisplayAreaWidthOrHeight Display area width or height. To get the minimum and maximum width and height,
|
||||||
|
* call GetMonitorDisplayAreaSize.
|
||||||
|
* @return If the function succeeds, the return value is TRUE. If the function fails, the return value is FALSE.
|
||||||
|
*/
|
||||||
|
BOOL SetMonitorDisplayAreaSize(HANDLE hMonitor, MC_SIZE_TYPE stSizeType, int dwNewDisplayAreaWidthOrHeight);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Sets the horizontal or vertical position of a monitor's display area.
|
||||||
|
* <br/><br/>
|
||||||
|
* If this function is supported, the GetMonitorCapabilities function returns the MC_CAPS_DISPLAY_AREA_POSITION flag.
|
||||||
|
* This function takes about 50 milliseconds to return. The horizontal and vertical position are continuous monitor settings.
|
||||||
|
* @param hMonitor Handle to a physical monitor. To get the monitor handle, call GetPhysicalMonitorsFromHMONITOR
|
||||||
|
* @param ptPositionType A member of the MC_POSITION_TYPE enumeration, specifying whether to set the horizontal position or the vertical position.
|
||||||
|
* @param dwNewPosition Horizontal or vertical position. To get the minimum and maximum position, call GetMonitorDisplayAreaPosition.
|
||||||
|
* @return If the function succeeds, the return value is TRUE. If the function fails, the return value is FALSE.
|
||||||
|
*/
|
||||||
|
BOOL SetMonitorDisplayAreaPosition(HANDLE hMonitor, MC_POSITION_TYPE ptPositionType, int dwNewPosition);
|
||||||
|
|
||||||
|
/******************************************************************************
|
||||||
|
* Restore to defaults functions
|
||||||
|
******************************************************************************/
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Restores a monitor's color settings to their factory defaults. This function potentially changes the current
|
||||||
|
* value of the monitor's brightness, contrast, color temperature, drive, and gain. The current value of each
|
||||||
|
* setting is changed to its factory default. The default settings depend on the manufacturer. This function can
|
||||||
|
* also change the range of supported values for each of these settings. The function does not enable any monitor
|
||||||
|
* settings that were disabled. If this function is supported, the GetMonitorCapabilities function returns the
|
||||||
|
* MC_CAPS_RESTORE_FACTORY_COLOR_DEFAULTS flag. This function takes about 5 seconds to return. This function might
|
||||||
|
* reset monitor settings that are not accessible through the high-level monitor configuration functions. Whether
|
||||||
|
* this occurs depends on the specific model of monitor. The following settings are not affected by this function:
|
||||||
|
* <li>Display area size</li>
|
||||||
|
* <li>Display area position</li>
|
||||||
|
* <li>Capabilities flags</li>
|
||||||
|
* @param hMonitor Handle to a physical monitor. To get the monitor handle, call GetPhysicalMonitorsFromHMONITOR
|
||||||
|
* @return If the function succeeds, the return value is TRUE. If the function fails, the return value is FALSE.
|
||||||
|
*/
|
||||||
|
BOOL RestoreMonitorFactoryColorDefaults(HANDLE hMonitor);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Restores a monitor's settings to their factory defaults. This function restores all of the settings that are
|
||||||
|
* supported by the high-level monitor configuration functions. It might also restore settings that are available
|
||||||
|
* only through the low-level functions and are not supported by the high-level functions. The current value of each
|
||||||
|
* setting is changed to its factory default. The exact settings that change, and the default values of those
|
||||||
|
* settings, depend on the manufacturer. This function can also change the range of supported values for some
|
||||||
|
* settings. If this function is supported, the GetMonitorCapabilities function returns the
|
||||||
|
* MC_CAPS_RESTORE_FACTORY_DEFAULTS flag. This function takes about 5 seconds to return. If GetMonitorCapabilities
|
||||||
|
* returns the MC_RESTORE_FACTORY_DEFAULTS_ENABLES_MONITOR_SETTINGS flag, this function also enables all of the
|
||||||
|
* monitor settings that are supported by the high-level functions. It is sometimes possible for an application to
|
||||||
|
* disable certain settings by calling the low-level functions. It is also possible for the user to disable certain
|
||||||
|
* settings by adjusting settings on the monitor's physical control panel. If that happens, the setting can only be
|
||||||
|
* re-enabled through the control panel or by calling RestoreMonitorFactoryDefaults. It is not possible to disable
|
||||||
|
* any settings by using the high-level functions.
|
||||||
|
* @param hMonitor Handle to a physical monitor. To get the monitor handle, call GetPhysicalMonitorsFromHMONITOR
|
||||||
|
* @return If the function succeeds, the return value is TRUE. If the function fails, the return value is FALSE.
|
||||||
|
*/
|
||||||
|
BOOL RestoreMonitorFactoryDefaults(HANDLE hMonitor);
|
||||||
|
|
||||||
|
// LowLevelMonitorConfigurationAPI.h
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Retrieves the current value, maximum value, and code type of a Virtual Control Panel (VCP) code for a monitor.
|
||||||
|
* This function corresponds to the "Get VCP Feature & VCP Feature Reply" command from the Display Data
|
||||||
|
* Channel Command Interface (DDC/CI) standard. Vendor-specific VCP codes can be used with this function.
|
||||||
|
* This function takes about 40 milliseconds to return.
|
||||||
|
* @param hMonitor Handle to a physical monitor. To get the monitor handle, call GetPhysicalMonitorsFromHMONITOR
|
||||||
|
* @param bVCPCode VCP code to query. The VCP codes are Include the VESA Monitor Control Command Set (MCCS)
|
||||||
|
* standard, versions 1.0 and 2.0. This parameter must specify a continuous or non-continuous VCP, or a
|
||||||
|
* vendor-specific code. It should not be a table control code.
|
||||||
|
* @param pvct Receives the VCP code type, as a member of the MC_VCP_CODE_TYPE enumeration. This parameter can be NULL.
|
||||||
|
* @param pdwCurrentValue Receives the current value of the VCP code. This parameter can be NULL.
|
||||||
|
* @param pdwMaximumValue If bVCPCode specifies a continuous VCP code, this parameter receives the maximum value of
|
||||||
|
* the VCP code. If bVCPCode specifies a non-continuous VCP code, the value received in this parameter
|
||||||
|
* is undefined. This parameter can be NULL.
|
||||||
|
* @return If the function succeeds, the return value is TRUE. If the function fails, the return value is FALSE.
|
||||||
|
*/
|
||||||
|
BOOL GetVCPFeatureAndVCPFeatureReply(HANDLE hMonitor, BYTE bVCPCode, MC_VCP_CODE_TYPE.ByReference pvct,
|
||||||
|
DWORDByReference pdwCurrentValue, DWORDByReference pdwMaximumValue);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Sets the value of a Virtual Control Panel (VCP) code for a monitor. This function corresponds to the
|
||||||
|
* "Set VCP Feature" command from the Display Data Channel Command Interface (DDC/CI) standard. This function takes
|
||||||
|
* about 50 milliseconds to return.
|
||||||
|
* @param hMonitor Handle to a physical monitor. To get the monitor handle, call GetPhysicalMonitorsFromHMONITOR
|
||||||
|
* @param bVCPCode VCP code to set. The VCP codes are defined in the VESA Monitor Control Command Set (MCCS)
|
||||||
|
* standard, version 1.0 and 2.0. This parameter must specify a continuous or non-continuous VCP, or a
|
||||||
|
* vendor-specific code. It should not be a table control code.
|
||||||
|
* @param dwNewValue Value of the VCP code.
|
||||||
|
* @return If the function succeeds, the return value is TRUE. If the function fails, the return value is FALSE.
|
||||||
|
*/
|
||||||
|
BOOL SetVCPFeature(HANDLE hMonitor, BYTE bVCPCode, DWORD dwNewValue);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Saves the current monitor settings to the display's nonvolatile storage. This function corresponds to the
|
||||||
|
* "Save Current Settings" function from the Display Data Channel Command Interface (DDC/CI) standard. This function
|
||||||
|
* takes about 200 milliseconds to return. This low-level function is identical to the high-level function
|
||||||
|
* SaveCurrentMonitorSettings.
|
||||||
|
* @param hMonitor Handle to a physical monitor. To get the monitor handle, call GetPhysicalMonitorsFromHMONITOR
|
||||||
|
* @return If the function succeeds, the return value is TRUE. If the function fails, the return value is FALSE.
|
||||||
|
*/
|
||||||
|
BOOL SaveCurrentSettings(HANDLE hMonitor);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Retrieves the length of a monitor's capabilities string.
|
||||||
|
* This function usually returns quickly, but sometimes it can take several seconds to complete.
|
||||||
|
* @param hMonitor Handle to a physical monitor. To get the monitor handle, call GetPhysicalMonitorsFromHMONITOR
|
||||||
|
* @param pdwCapabilitiesStringLengthInCharacters Receives the length of the capabilities string, in characters, including the terminating null character.
|
||||||
|
* @return If the function succeeds, the return value is TRUE. If the function fails, the return value is FALSE.
|
||||||
|
*/
|
||||||
|
BOOL GetCapabilitiesStringLength(HANDLE hMonitor, DWORDByReference pdwCapabilitiesStringLengthInCharacters);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Retrieves a string describing a monitor's capabilities. This function corresponds to the
|
||||||
|
* "Capabilities Request & Capabilities Reply" command from the Display Data Channel Command Interface (DDC/CI)
|
||||||
|
* standard. For more information about the capabilities string, refer to the DDC/CI standard. This function usually
|
||||||
|
* returns quickly, but sometimes it can take several seconds to complete. You can update a monitor's capabilities
|
||||||
|
* string by adding an AddReg directive to the monitor's INF file. Add a registry key named "CapabilitiesString" to
|
||||||
|
* the monitor's driver key. The value of the registry key is the capabilities string. The registry data type is
|
||||||
|
* REG_SZ.
|
||||||
|
* @param hMonitor Handle to a physical monitor. To get the monitor handle, call GetPhysicalMonitorsFromHMONITOR
|
||||||
|
* @param pszASCIICapabilitiesString Pointer to a buffer that receives the monitor's capabilities string. The caller
|
||||||
|
* must allocate this buffer. To get the size of the string, call GetCapabilitiesStringLength. The capabilities
|
||||||
|
* string is always an ASCII string. The buffer must include space for the terminating null character.
|
||||||
|
* @param dwCapabilitiesStringLengthInCharacters Size of pszASCIICapabilitiesString in characters, including the
|
||||||
|
* terminating null character.
|
||||||
|
* @return If the function succeeds, the return value is TRUE. If the function fails, the return value is FALSE.
|
||||||
|
*/
|
||||||
|
BOOL CapabilitiesRequestAndCapabilitiesReply(HANDLE hMonitor, LPSTR pszASCIICapabilitiesString,
|
||||||
|
DWORD dwCapabilitiesStringLengthInCharacters);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Retrieves a monitor's horizontal and vertical synchronization frequencies.
|
||||||
|
* @param hMonitor Handle to a physical monitor. To get the monitor handle, call GetPhysicalMonitorsFromHMONITOR
|
||||||
|
* @param pmtrMonitorTimingReport Pointer to an MC_TIMING_REPORT structure that receives the timing information.
|
||||||
|
* @return If the function succeeds, the return value is TRUE. If the function fails, the return value is FALSE.
|
||||||
|
*/
|
||||||
|
BOOL GetTimingReport(HANDLE hMonitor, MC_TIMING_REPORT pmtrMonitorTimingReport);
|
||||||
|
|
||||||
|
// PhysicalMonitorEnumerationAPI.h
|
||||||
|
|
||||||
|
/******************************************************************************
|
||||||
|
* Physical Monitor Enumeration Functions
|
||||||
|
******************************************************************************/
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Retrieves the number of physical monitors associated with an HMONITOR monitor handle. Call this function before
|
||||||
|
* calling GetPhysicalMonitorsFromHMONITOR.
|
||||||
|
* @param hMonitor A monitor handle. Monitor handles are returned by several Multiple Display Monitor functions,
|
||||||
|
* including EnumDisplayMonitors and MonitorFromWindow, which are part of the graphics device interface (GDI).
|
||||||
|
* @param pdwNumberOfPhysicalMonitors Receives the number of physical monitors associated with the monitor handle.
|
||||||
|
* @return If the function succeeds, the return value is TRUE. If the function fails, the return value is FALSE
|
||||||
|
*/
|
||||||
|
BOOL GetNumberOfPhysicalMonitorsFromHMONITOR(HMONITOR hMonitor, DWORDByReference pdwNumberOfPhysicalMonitors);
|
||||||
|
|
||||||
|
// HRESULT GetNumberOfPhysicalMonitorsFromIDirect3DDevice9
|
||||||
|
// (
|
||||||
|
// IDirect3DDevice9* pDirect3DDevice9,
|
||||||
|
// DWORDByReference pdwNumberOfPhysicalMonitors
|
||||||
|
// );
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Retrieves the physical monitors associated with an HMONITOR monitor handle. A single HMONITOR handle can be
|
||||||
|
* associated with more than one physical monitor. This function returns a handle and a text description for each
|
||||||
|
* physical monitor. When you are done using the monitor handles, close them by passing the pPhysicalMonitorArray
|
||||||
|
* array to the DestroyPhysicalMonitors function.
|
||||||
|
* @param hMonitor A monitor handle. Monitor handles are returned by several Multiple Display Monitor functions,
|
||||||
|
* including EnumDisplayMonitors and MonitorFromWindow, which are part of the graphics device interface (GDI).
|
||||||
|
* @param dwPhysicalMonitorArraySize Number of elements in pPhysicalMonitorArray. To get the required size of the
|
||||||
|
* array, call GetNumberOfPhysicalMonitorsFromHMONITOR.
|
||||||
|
* @param pPhysicalMonitorArray Pointer to an array of PHYSICAL_MONITOR structures. The caller must allocate the
|
||||||
|
* array.
|
||||||
|
* @return If the function succeeds, the return value is TRUE. If the function fails, the return value is FALSE
|
||||||
|
*/
|
||||||
|
BOOL GetPhysicalMonitorsFromHMONITOR(HMONITOR hMonitor, int dwPhysicalMonitorArraySize,
|
||||||
|
PHYSICAL_MONITOR[] pPhysicalMonitorArray);
|
||||||
|
|
||||||
|
// HRESULT GetPhysicalMonitorsFromIDirect3DDevice9
|
||||||
|
// (
|
||||||
|
// __in IDirect3DDevice9* pDirect3DDevice9,
|
||||||
|
// __in DWORD dwPhysicalMonitorArraySize,
|
||||||
|
// __out_ecount(dwPhysicalMonitorArraySize) LPPHYSICAL_MONITOR pPhysicalMonitorArray
|
||||||
|
// );
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Closes a handle to a physical monitor.
|
||||||
|
* Call this function to close a monitor handle obtained from the GetPhysicalMonitorsFromHMONITOR
|
||||||
|
* @param hMonitor Handle to a physical monitor.
|
||||||
|
* @return If the function succeeds, the return value is TRUE. If the function fails, the return value is FALSE
|
||||||
|
*/
|
||||||
|
BOOL DestroyPhysicalMonitor(HANDLE hMonitor);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Closes an array of physical monitor handles.
|
||||||
|
* Call this function to close an array of monitor handles obtained from the GetPhysicalMonitorsFromHMONITOR
|
||||||
|
* @param dwPhysicalMonitorArraySize Number of elements in the pPhysicalMonitorArray array.
|
||||||
|
* @param pPhysicalMonitorArray Pointer to an array of PHYSICAL_MONITOR structures.
|
||||||
|
* @return If the function succeeds, the return value is TRUE. If the function fails, the return value is FALSE
|
||||||
|
*/
|
||||||
|
BOOL DestroyPhysicalMonitors(int dwPhysicalMonitorArraySize, PHYSICAL_MONITOR[] pPhysicalMonitorArray);
|
||||||
|
}
|
||||||
@@ -0,0 +1,30 @@
|
|||||||
|
/*
|
||||||
|
* Copyright 2014 Martin Steiger
|
||||||
|
*
|
||||||
|
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||||
|
* you may not use this file except in compliance with the License.
|
||||||
|
* You may obtain a copy of the License at
|
||||||
|
*
|
||||||
|
* http://www.apache.org/licenses/LICENSE-2.0
|
||||||
|
*
|
||||||
|
* Unless required by applicable law or agreed to in writing, software
|
||||||
|
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||||
|
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||||
|
* See the License for the specific language governing permissions and
|
||||||
|
* limitations under the License.
|
||||||
|
*/
|
||||||
|
|
||||||
|
package com.sun.jna.platform.win32;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* An interface for enum that can be combined to a
|
||||||
|
* set based on an integer value
|
||||||
|
* @author Martin Steiger
|
||||||
|
*/
|
||||||
|
public interface FlagEnum
|
||||||
|
{
|
||||||
|
/**
|
||||||
|
* @return the flag value - usually 2^n
|
||||||
|
*/
|
||||||
|
int getFlag();
|
||||||
|
}
|
||||||
+436
@@ -0,0 +1,436 @@
|
|||||||
|
/*
|
||||||
|
* Copyright 2014 Martin Steiger
|
||||||
|
*
|
||||||
|
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||||
|
* you may not use this file except in compliance with the License.
|
||||||
|
* You may obtain a copy of the License at
|
||||||
|
*
|
||||||
|
* http://www.apache.org/licenses/LICENSE-2.0
|
||||||
|
*
|
||||||
|
* Unless required by applicable law or agreed to in writing, software
|
||||||
|
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||||
|
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||||
|
* See the License for the specific language governing permissions and
|
||||||
|
* limitations under the License.
|
||||||
|
*/
|
||||||
|
|
||||||
|
package com.sun.jna.platform.win32;
|
||||||
|
|
||||||
|
import com.sun.jna.platform.EnumUtils;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* A conversion of HighLevelMonitorConfigurationAPI.h
|
||||||
|
* @author Martin Steiger
|
||||||
|
*/
|
||||||
|
public interface HighLevelMonitorConfigurationAPI
|
||||||
|
{
|
||||||
|
/**
|
||||||
|
* Monitor capabilities - retrieved by GetMonitorCapabilities
|
||||||
|
*/
|
||||||
|
enum MC_CAPS implements FlagEnum
|
||||||
|
{
|
||||||
|
/**
|
||||||
|
* The monitor does not support any monitor settings.
|
||||||
|
*/
|
||||||
|
MC_CAPS_NONE (0x00000000),
|
||||||
|
|
||||||
|
/**
|
||||||
|
* The monitor supports the GetMonitorTechnologyType function.
|
||||||
|
*/
|
||||||
|
MC_CAPS_MONITOR_TECHNOLOGY_TYPE (0x00000001),
|
||||||
|
|
||||||
|
/**
|
||||||
|
* The monitor supports the GetMonitorBrightness and SetMonitorBrightness functions.
|
||||||
|
*/
|
||||||
|
MC_CAPS_BRIGHTNESS (0x00000002),
|
||||||
|
|
||||||
|
/**
|
||||||
|
* The monitor supports the GetMonitorContrast and SetMonitorContrast functions.
|
||||||
|
*/
|
||||||
|
MC_CAPS_CONTRAST (0x00000004),
|
||||||
|
|
||||||
|
/**
|
||||||
|
* The monitor supports the GetMonitorColorTemperature and SetMonitorColorTemperature functions.
|
||||||
|
*/
|
||||||
|
MC_CAPS_COLOR_TEMPERATURE (0x00000008),
|
||||||
|
|
||||||
|
/**
|
||||||
|
* The monitor supports the GetMonitorRedGreenOrBlueGain and SetMonitorRedGreenOrBlueGain functions.
|
||||||
|
*/
|
||||||
|
MC_CAPS_RED_GREEN_BLUE_GAIN (0x00000010),
|
||||||
|
|
||||||
|
/**
|
||||||
|
* The monitor supports the GetMonitorRedGreenOrBlueDrive and SetMonitorRedGreenOrBlueDrive functions.
|
||||||
|
*/
|
||||||
|
MC_CAPS_RED_GREEN_BLUE_DRIVE (0x00000020),
|
||||||
|
|
||||||
|
/**
|
||||||
|
* The monitor supports the DegaussMonitor function.
|
||||||
|
*/
|
||||||
|
MC_CAPS_DEGAUSS (0x00000040),
|
||||||
|
|
||||||
|
/**
|
||||||
|
* The monitor supports the GetMonitorDisplayAreaPosition and SetMonitorDisplayAreaPosition functions.
|
||||||
|
*/
|
||||||
|
MC_CAPS_DISPLAY_AREA_POSITION (0x00000080),
|
||||||
|
|
||||||
|
/**
|
||||||
|
* The monitor supports the GetMonitorDisplayAreaSize and SetMonitorDisplayAreaSize functions.
|
||||||
|
*/
|
||||||
|
MC_CAPS_DISPLAY_AREA_SIZE (0x00000100),
|
||||||
|
|
||||||
|
/**
|
||||||
|
* The monitor supports the RestoreMonitorFactoryDefaults function.
|
||||||
|
*/
|
||||||
|
MC_CAPS_RESTORE_FACTORY_DEFAULTS (0x00000400),
|
||||||
|
|
||||||
|
/**
|
||||||
|
* The monitor supports the RestoreMonitorFactoryColorDefaults function.
|
||||||
|
*/
|
||||||
|
MC_CAPS_RESTORE_FACTORY_COLOR_DEFAULTS (0x00000800),
|
||||||
|
|
||||||
|
/**
|
||||||
|
* If this flag is present, calling the RestoreMonitorFactoryDefaults function enables all of
|
||||||
|
* the monitor settings used by the high-level monitor configuration functions. For more
|
||||||
|
* information, see the Remarks section in RestoreMonitorFactoryDefaults.
|
||||||
|
*/
|
||||||
|
MC_RESTORE_FACTORY_DEFAULTS_ENABLES_MONITOR_SETTINGS (0x00001000);
|
||||||
|
|
||||||
|
private int flag;
|
||||||
|
|
||||||
|
MC_CAPS(int flag)
|
||||||
|
{
|
||||||
|
this.flag = flag;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public int getFlag()
|
||||||
|
{
|
||||||
|
return flag;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Monitor capabilities - retrieved by GetMonitorCapabilities
|
||||||
|
*/
|
||||||
|
enum MC_SUPPORTED_COLOR_TEMPERATURE implements FlagEnum
|
||||||
|
{
|
||||||
|
/**
|
||||||
|
* No color temperatures are supported.
|
||||||
|
*/
|
||||||
|
MC_SUPPORTED_COLOR_TEMPERATURE_NONE (0x00000000),
|
||||||
|
|
||||||
|
/**
|
||||||
|
* The monitor supports 4,000 kelvins (K) color temperature.
|
||||||
|
*/
|
||||||
|
MC_SUPPORTED_COLOR_TEMPERATURE_4000K (0x00000001),
|
||||||
|
|
||||||
|
/**
|
||||||
|
* The monitor supports 5,000 K color temperature.
|
||||||
|
*/
|
||||||
|
MC_SUPPORTED_COLOR_TEMPERATURE_5000K (0x00000002),
|
||||||
|
|
||||||
|
/**
|
||||||
|
* The monitor supports 6,500 K color temperature.
|
||||||
|
*/
|
||||||
|
MC_SUPPORTED_COLOR_TEMPERATURE_6500K (0x00000004),
|
||||||
|
|
||||||
|
/**
|
||||||
|
* The monitor supports 7,500 K color temperature.
|
||||||
|
*/
|
||||||
|
MC_SUPPORTED_COLOR_TEMPERATURE_7500K (0x00000008),
|
||||||
|
|
||||||
|
/**
|
||||||
|
* The monitor supports 8,200 K color temperature.
|
||||||
|
*/
|
||||||
|
MC_SUPPORTED_COLOR_TEMPERATURE_8200K (0x00000010),
|
||||||
|
|
||||||
|
/**
|
||||||
|
* The monitor supports 9,300 K color temperature.
|
||||||
|
*/
|
||||||
|
MC_SUPPORTED_COLOR_TEMPERATURE_9300K (0x00000020),
|
||||||
|
|
||||||
|
/**
|
||||||
|
* The monitor supports 10,000 K color temperature.
|
||||||
|
*/
|
||||||
|
MC_SUPPORTED_COLOR_TEMPERATURE_10000K (0x00000040),
|
||||||
|
|
||||||
|
/**
|
||||||
|
* The monitor supports 11,500 K color temperature.
|
||||||
|
*/
|
||||||
|
MC_SUPPORTED_COLOR_TEMPERATURE_11500K (0x00000080);
|
||||||
|
|
||||||
|
private int flag;
|
||||||
|
|
||||||
|
MC_SUPPORTED_COLOR_TEMPERATURE(int flag)
|
||||||
|
{
|
||||||
|
this.flag = flag;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public int getFlag()
|
||||||
|
{
|
||||||
|
return flag;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// ******************************************************************************
|
||||||
|
// Enumerations
|
||||||
|
// ******************************************************************************
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Identifies monitor display technologies.
|
||||||
|
*/
|
||||||
|
public enum MC_DISPLAY_TECHNOLOGY_TYPE
|
||||||
|
{
|
||||||
|
/**
|
||||||
|
* Shadow-mask cathode ray tube (CRT).
|
||||||
|
*/
|
||||||
|
MC_SHADOW_MASK_CATHODE_RAY_TUBE,
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Aperture-grill CRT.
|
||||||
|
*/
|
||||||
|
MC_APERTURE_GRILL_CATHODE_RAY_TUBE,
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Thin-film transistor (TFT) display.
|
||||||
|
*/
|
||||||
|
MC_THIN_FILM_TRANSISTOR,
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Liquid crystal on silicon (LCOS) display.
|
||||||
|
*/
|
||||||
|
MC_LIQUID_CRYSTAL_ON_SILICON,
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Plasma display.
|
||||||
|
*/
|
||||||
|
MC_PLASMA,
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Organic light emitting diode (LED) display.
|
||||||
|
*/
|
||||||
|
MC_ORGANIC_LIGHT_EMITTING_DIODE,
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Electroluminescent display.
|
||||||
|
*/
|
||||||
|
MC_ELECTROLUMINESCENT,
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Microelectromechanical display.
|
||||||
|
*/
|
||||||
|
MC_MICROELECTROMECHANICAL,
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Field emission device (FED) display.
|
||||||
|
*/
|
||||||
|
MC_FIELD_EMISSION_DEVICE;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Defines a Reference to the enum
|
||||||
|
*/
|
||||||
|
public static class ByReference extends com.sun.jna.ptr.ByReference {
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Create an uninitialized reference
|
||||||
|
*/
|
||||||
|
public ByReference() {
|
||||||
|
super(4);
|
||||||
|
getPointer().setInt(0, EnumUtils.UNINITIALIZED);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Instantiates a new reference.
|
||||||
|
* @param value the value
|
||||||
|
*/
|
||||||
|
public ByReference(MC_DISPLAY_TECHNOLOGY_TYPE value) {
|
||||||
|
super(4);
|
||||||
|
setValue(value);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Sets the value.
|
||||||
|
* @param value the new value
|
||||||
|
*/
|
||||||
|
public void setValue(MC_DISPLAY_TECHNOLOGY_TYPE value) {
|
||||||
|
getPointer().setInt(0, EnumUtils.toInteger(value));
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Gets the value.
|
||||||
|
* @return the value
|
||||||
|
*/
|
||||||
|
public MC_DISPLAY_TECHNOLOGY_TYPE getValue() {
|
||||||
|
return EnumUtils.fromInteger(getPointer().getInt(0), MC_DISPLAY_TECHNOLOGY_TYPE.class);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Specifies whether to set or get a monitor's red, green, or blue drive.
|
||||||
|
*/
|
||||||
|
public enum MC_DRIVE_TYPE
|
||||||
|
{
|
||||||
|
/**
|
||||||
|
* Red drive
|
||||||
|
*/
|
||||||
|
MC_RED_DRIVE,
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Green drive
|
||||||
|
*/
|
||||||
|
MC_GREEN_DRIVE,
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Blue drive
|
||||||
|
*/
|
||||||
|
MC_BLUE_DRIVE
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Specifies whether to get or set a monitor's red, green, or blue gain.
|
||||||
|
*/
|
||||||
|
public enum MC_GAIN_TYPE
|
||||||
|
{
|
||||||
|
/**
|
||||||
|
* Red gain
|
||||||
|
*/
|
||||||
|
MC_RED_GAIN,
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Green gain
|
||||||
|
*/
|
||||||
|
MC_GREEN_GAIN,
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Blue gain
|
||||||
|
*/
|
||||||
|
MC_BLUE_GAIN
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Specifies whether to get or set the vertical or horizontal position of a monitor's display area.
|
||||||
|
*/
|
||||||
|
public enum MC_POSITION_TYPE
|
||||||
|
{
|
||||||
|
/**
|
||||||
|
* Horizontal position
|
||||||
|
*/
|
||||||
|
MC_HORIZONTAL_POSITION,
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Vertical position
|
||||||
|
*/
|
||||||
|
MC_VERTICAL_POSITION
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Specifies whether to get or set the width or height of a monitor's display area.
|
||||||
|
*/
|
||||||
|
public enum MC_SIZE_TYPE
|
||||||
|
{
|
||||||
|
/**
|
||||||
|
* Width
|
||||||
|
*/
|
||||||
|
MC_WIDTH,
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Height
|
||||||
|
*/
|
||||||
|
MC_HEIGHT
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Describes a monitor's color temperature.
|
||||||
|
*/
|
||||||
|
public enum MC_COLOR_TEMPERATURE
|
||||||
|
{
|
||||||
|
/**
|
||||||
|
* Unknown temperature.
|
||||||
|
*/
|
||||||
|
MC_COLOR_TEMPERATURE_UNKNOWN,
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 4,000 kelvins (K).
|
||||||
|
*/
|
||||||
|
MC_COLOR_TEMPERATURE_4000K,
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 5,000 kelvins (K).
|
||||||
|
*/
|
||||||
|
MC_COLOR_TEMPERATURE_5000K,
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 6,500 kelvins (K).
|
||||||
|
*/
|
||||||
|
MC_COLOR_TEMPERATURE_6500K,
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 7,500 kelvins (K).
|
||||||
|
*/
|
||||||
|
MC_COLOR_TEMPERATURE_7500K,
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 8,200 kelvins (K).
|
||||||
|
*/
|
||||||
|
MC_COLOR_TEMPERATURE_8200K,
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 9,300 kelvins (K).
|
||||||
|
*/
|
||||||
|
MC_COLOR_TEMPERATURE_9300K,
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 10,000 kelvins (K).
|
||||||
|
*/
|
||||||
|
MC_COLOR_TEMPERATURE_10000K,
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 11,500 kelvins (K).
|
||||||
|
*/
|
||||||
|
MC_COLOR_TEMPERATURE_11500K;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Defines a Reference to the enum
|
||||||
|
*/
|
||||||
|
public static class ByReference extends com.sun.jna.ptr.ByReference {
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Create an uninitialized reference
|
||||||
|
*/
|
||||||
|
public ByReference() {
|
||||||
|
super(4);
|
||||||
|
getPointer().setInt(0, EnumUtils.UNINITIALIZED);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Instantiates a new reference.
|
||||||
|
* @param value the value
|
||||||
|
*/
|
||||||
|
public ByReference(MC_COLOR_TEMPERATURE value) {
|
||||||
|
super(4);
|
||||||
|
setValue(value);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Sets the value.
|
||||||
|
* @param value the new value
|
||||||
|
*/
|
||||||
|
public void setValue(MC_COLOR_TEMPERATURE value) {
|
||||||
|
getPointer().setInt(0, EnumUtils.toInteger(value));
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Gets the value.
|
||||||
|
* @return the value
|
||||||
|
*/
|
||||||
|
public MC_COLOR_TEMPERATURE getValue() {
|
||||||
|
return EnumUtils.fromInteger(getPointer().getInt(0), MC_COLOR_TEMPERATURE.class);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
+116
@@ -0,0 +1,116 @@
|
|||||||
|
/*
|
||||||
|
* Copyright 2014 Martin Steiger
|
||||||
|
*
|
||||||
|
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||||
|
* you may not use this file except in compliance with the License.
|
||||||
|
* You may obtain a copy of the License at
|
||||||
|
*
|
||||||
|
* http://www.apache.org/licenses/LICENSE-2.0
|
||||||
|
*
|
||||||
|
* Unless required by applicable law or agreed to in writing, software
|
||||||
|
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||||
|
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||||
|
* See the License for the specific language governing permissions and
|
||||||
|
* limitations under the License.
|
||||||
|
*/
|
||||||
|
|
||||||
|
package com.sun.jna.platform.win32;
|
||||||
|
|
||||||
|
import java.util.Arrays;
|
||||||
|
import java.util.List;
|
||||||
|
|
||||||
|
import com.sun.jna.Structure;
|
||||||
|
import com.sun.jna.platform.EnumUtils;
|
||||||
|
import com.sun.jna.platform.win32.WinDef.BYTE;
|
||||||
|
import com.sun.jna.platform.win32.WinDef.DWORD;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Conversion of LowLevelMonitorConfigurationAPI.h
|
||||||
|
* @author Martin Steiger
|
||||||
|
*/
|
||||||
|
public interface LowLevelMonitorConfigurationAPI
|
||||||
|
{
|
||||||
|
/**
|
||||||
|
* Contains information from a monitor's timing report.
|
||||||
|
*/
|
||||||
|
class MC_TIMING_REPORT extends Structure
|
||||||
|
{
|
||||||
|
/**
|
||||||
|
* The monitor's horizontal synchronization frequency in Hz.
|
||||||
|
*/
|
||||||
|
public DWORD dwHorizontalFrequencyInHZ;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* The monitor's vertical synchronization frequency in Hz.
|
||||||
|
*/
|
||||||
|
public DWORD dwVerticalFrequencyInHZ;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Timing status byte. For more information about this value, see the Display Data Channel Command
|
||||||
|
* Interface (DDC/CI) standard.
|
||||||
|
*/
|
||||||
|
public BYTE bTimingStatusByte;
|
||||||
|
|
||||||
|
@Override
|
||||||
|
protected List<String> getFieldOrder()
|
||||||
|
{
|
||||||
|
return Arrays.asList("dwHorizontalFrequencyInHZ", "dwVerticalFrequencyInHZ", "bTimingStatusByte");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Describes a Virtual Control Panel (VCP) code type.
|
||||||
|
*/
|
||||||
|
enum MC_VCP_CODE_TYPE
|
||||||
|
{
|
||||||
|
/**
|
||||||
|
* Momentary VCP code. Sending a command of this type causes the monitor to initiate a self-timed
|
||||||
|
* operation and then revert to its original state. Examples include display tests and degaussing.
|
||||||
|
*/
|
||||||
|
MC_MOMENTARY,
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Set Parameter VCP code. Sending a command of this type changes some aspect of the monitor's operation.
|
||||||
|
*/
|
||||||
|
MC_SET_PARAMETER;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Defines a Reference to the enum
|
||||||
|
*/
|
||||||
|
public static class ByReference extends com.sun.jna.ptr.ByReference {
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Create an uninitialized reference
|
||||||
|
*/
|
||||||
|
public ByReference() {
|
||||||
|
super(4);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Instantiates a new reference.
|
||||||
|
* @param value the value
|
||||||
|
*/
|
||||||
|
public ByReference(MC_VCP_CODE_TYPE value) {
|
||||||
|
super(4);
|
||||||
|
setValue(value);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Sets the value.
|
||||||
|
* @param value the new value
|
||||||
|
*/
|
||||||
|
public void setValue(MC_VCP_CODE_TYPE value) {
|
||||||
|
getPointer().setInt(0, EnumUtils.toInteger(value));
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Gets the value.
|
||||||
|
* @return the value
|
||||||
|
*/
|
||||||
|
public MC_VCP_CODE_TYPE getValue() {
|
||||||
|
return EnumUtils.fromInteger(getPointer().getInt(0), MC_VCP_CODE_TYPE.class);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
@@ -0,0 +1,67 @@
|
|||||||
|
/*
|
||||||
|
* Copyright 2014 Martin Steiger
|
||||||
|
*
|
||||||
|
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||||
|
* you may not use this file except in compliance with the License.
|
||||||
|
* You may obtain a copy of the License at
|
||||||
|
*
|
||||||
|
* http://www.apache.org/licenses/LICENSE-2.0
|
||||||
|
*
|
||||||
|
* Unless required by applicable law or agreed to in writing, software
|
||||||
|
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||||
|
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||||
|
* See the License for the specific language governing permissions and
|
||||||
|
* limitations under the License.
|
||||||
|
*/
|
||||||
|
|
||||||
|
package com.sun.jna.platform.win32;
|
||||||
|
|
||||||
|
import java.util.Arrays;
|
||||||
|
import java.util.List;
|
||||||
|
|
||||||
|
import com.sun.jna.Structure;
|
||||||
|
import com.sun.jna.platform.win32.WinNT.HANDLE;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Conversion of PhysicalMonitorEnumerationAPI.h
|
||||||
|
* @author Martin Steiger
|
||||||
|
*/
|
||||||
|
public interface PhysicalMonitorEnumerationAPI
|
||||||
|
{
|
||||||
|
|
||||||
|
/******************************************************************************
|
||||||
|
Physical Monitor Constants
|
||||||
|
******************************************************************************/
|
||||||
|
|
||||||
|
/**
|
||||||
|
* A physical monitor description is always an array of 128 characters. Some
|
||||||
|
* of the characters may not be used.
|
||||||
|
*/
|
||||||
|
final int PHYSICAL_MONITOR_DESCRIPTION_SIZE = 128;
|
||||||
|
|
||||||
|
/******************************************************************************
|
||||||
|
Physical Monitor Structures
|
||||||
|
******************************************************************************/
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Contains a handle and text description corresponding to a physical monitor.
|
||||||
|
*/
|
||||||
|
public class PHYSICAL_MONITOR extends Structure
|
||||||
|
{
|
||||||
|
/**
|
||||||
|
* Handle to the physical monitor.
|
||||||
|
*/
|
||||||
|
public HANDLE hPhysicalMonitor;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Text description of the physical monitor (always 128 chars)
|
||||||
|
*/
|
||||||
|
public char[] szPhysicalMonitorDescription = new char[PHYSICAL_MONITOR_DESCRIPTION_SIZE];
|
||||||
|
|
||||||
|
@Override
|
||||||
|
protected List<String> getFieldOrder()
|
||||||
|
{
|
||||||
|
return Arrays.asList("hPhysicalMonitor", "szPhysicalMonitorDescription");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -16,8 +16,6 @@ import com.sun.jna.Native;
|
|||||||
import com.sun.jna.Pointer;
|
import com.sun.jna.Pointer;
|
||||||
import com.sun.jna.Structure;
|
import com.sun.jna.Structure;
|
||||||
import com.sun.jna.WString;
|
import com.sun.jna.WString;
|
||||||
import com.sun.jna.platform.win32.BaseTSD.LONG_PTR;
|
|
||||||
import com.sun.jna.platform.win32.WinNT.HANDLE;
|
|
||||||
import com.sun.jna.ptr.ByteByReference;
|
import com.sun.jna.ptr.ByteByReference;
|
||||||
import com.sun.jna.ptr.IntByReference;
|
import com.sun.jna.ptr.IntByReference;
|
||||||
import com.sun.jna.win32.StdCallLibrary;
|
import com.sun.jna.win32.StdCallLibrary;
|
||||||
@@ -1702,4 +1700,97 @@ public interface User32 extends StdCallLibrary, WinUser, WinNT {
|
|||||||
* </p>
|
* </p>
|
||||||
*/
|
*/
|
||||||
int RegisterWindowMessage(String string);
|
int RegisterWindowMessage(String string);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Retrieves a handle to the display monitor that contains a specified point.
|
||||||
|
* @param pt A POINT structure that specifies the point of interest in virtual-screen
|
||||||
|
* coordinates.
|
||||||
|
* @param dwFlags Determines the function's return value if the window does not intersect
|
||||||
|
* any display monitor. This parameter can be one of the following values.
|
||||||
|
* <li>MONITOR_DEFAULTTONEAREST</li>
|
||||||
|
* <li>MONITOR_DEFAULTTONULL</li>
|
||||||
|
* <li>MONITOR_DEFAULTTOPRIMARY</li>
|
||||||
|
* @return If the point is contained by a display monitor, the return value is an HMONITOR
|
||||||
|
* handle to that display monitor. If the point is not contained by a display monitor,
|
||||||
|
* the return value depends on the value of dwFlags.
|
||||||
|
*/
|
||||||
|
HMONITOR MonitorFromPoint(POINT pt, int dwFlags);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Retrieves a handle to the display monitor that has the largest area of intersection with
|
||||||
|
* a specified rectangle.
|
||||||
|
* @param lprc A pointer to a RECT structure that specifies the rectangle of interest in
|
||||||
|
* virtual-screen coordinates.
|
||||||
|
* @param dwFlags Determines the function's return value if the window does not intersect
|
||||||
|
* any display monitor. This parameter can be one of the following values.
|
||||||
|
* <li>MONITOR_DEFAULTTONEAREST</li>
|
||||||
|
* <li>MONITOR_DEFAULTTONULL</li>
|
||||||
|
* <li>MONITOR_DEFAULTTOPRIMARY</li>
|
||||||
|
* @return If the rectangle intersects one or more display monitor rectangles, the return
|
||||||
|
* value is an HMONITOR handle to the display monitor that has the largest area of
|
||||||
|
* intersection with the rectangle. If the rectangle does not intersect a display
|
||||||
|
* monitor, the return value depends on the value of dwFlags.
|
||||||
|
*/
|
||||||
|
HMONITOR MonitorFromRect(RECT lprc, int dwFlags);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Retrieves a handle to the display monitor that has the largest area of intersection with
|
||||||
|
* the bounding rectangle of a specified window.
|
||||||
|
* <br/><br/>
|
||||||
|
* If the window is currently minimized, MonitorFromWindow uses the rectangle of the window
|
||||||
|
* before it was minimized.
|
||||||
|
* @param hwnd A handle to the window of interest.
|
||||||
|
* @param dwFlags Determines the function's return value if the window does not intersect
|
||||||
|
* any display monitor. This parameter can be one of the following values.
|
||||||
|
* <li>MONITOR_DEFAULTTONEAREST</li>
|
||||||
|
* <li>MONITOR_DEFAULTTONULL</li>
|
||||||
|
* <li>MONITOR_DEFAULTTOPRIMARY</li>
|
||||||
|
* @return If the window intersects one or more display monitor rectangles, the return value
|
||||||
|
* is an HMONITOR handle to the display monitor that has the largest area of
|
||||||
|
* intersection with the window. If the window does not intersect a display monitor,
|
||||||
|
* the return value depends on the value of dwFlags.
|
||||||
|
*/
|
||||||
|
HMONITOR MonitorFromWindow(HWND hwnd, int dwFlags);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Retrieves information about a display monitor.
|
||||||
|
* @param hMonitor A handle to the display monitor of interest.
|
||||||
|
* @param lpmi A pointer to a {@link WinUser.MONITORINFO} structure that receives information about
|
||||||
|
* the specified display monitor.
|
||||||
|
* @return If the function succeeds, the return value is nonzero. If the function
|
||||||
|
* fails, the return value is zero.
|
||||||
|
*/
|
||||||
|
BOOL GetMonitorInfo(HMONITOR hMonitor, MONITORINFO lpmi);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Retrieves information about a display monitor.
|
||||||
|
* @param hMonitor A handle to the display monitor of interest.
|
||||||
|
* @param lpmi A pointer to a {@link WinUser.MONITORINFOEX} structure that receives information about
|
||||||
|
* the specified display monitor.
|
||||||
|
* @return If the function succeeds, the return value is nonzero. If the function
|
||||||
|
* fails, the return value is zero.
|
||||||
|
*/
|
||||||
|
BOOL GetMonitorInfo(HMONITOR hMonitor, MONITORINFOEX lpmi);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Enumerates display monitors (including invisible pseudo-monitors associated with the mirroring drivers)
|
||||||
|
* that intersect a region formed by the intersection of a specified clipping rectangle and the visible
|
||||||
|
* region of a device context. EnumDisplayMonitors calls an application-defined MonitorEnumProc callback
|
||||||
|
* function once for each monitor that is enumerated. Note that GetSystemMetrics (SM_CMONITORS) counts
|
||||||
|
* only the display monitors.
|
||||||
|
* @param hdc A handle to a display device context that defines the visible region of interest. If this
|
||||||
|
* parameter is NULL, the hdcMonitor parameter passed to the callback function will be NULL, and
|
||||||
|
* the visible region of interest is the virtual screen that encompasses all the displays on the
|
||||||
|
* desktop.
|
||||||
|
* @param lprcClip A pointer to a RECT structure that specifies a clipping rectangle. The region of
|
||||||
|
* interest is the intersection of the clipping rectangle with the visible region specified by hdc.
|
||||||
|
* If hdc is non-NULL, the coordinates of the clipping rectangle are relative to the origin of the
|
||||||
|
* hdc. If hdc is NULL, the coordinates are virtual-screen coordinates. This parameter can be NULL
|
||||||
|
* if you don't want to clip the region specified by hdc.
|
||||||
|
* @param lpfnEnum A pointer to an application-defined callback function.
|
||||||
|
* @param dwData Application-defined data that EnumDisplayMonitors passes directly to the lpfnEnum function.
|
||||||
|
* @return If the function succeeds, the return value is nonzero. If the function fails, the return value
|
||||||
|
* is zero.
|
||||||
|
*/
|
||||||
|
BOOL EnumDisplayMonitors(HDC hdc, RECT lprcClip, MONITORENUMPROC lpfnEnum, LPARAM dwData);
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -23,11 +23,13 @@ import com.sun.jna.WString;
|
|||||||
import com.sun.jna.platform.win32.BaseTSD.ULONG_PTR;
|
import com.sun.jna.platform.win32.BaseTSD.ULONG_PTR;
|
||||||
import com.sun.jna.platform.win32.WinDef.HBRUSH;
|
import com.sun.jna.platform.win32.WinDef.HBRUSH;
|
||||||
import com.sun.jna.platform.win32.WinDef.HCURSOR;
|
import com.sun.jna.platform.win32.WinDef.HCURSOR;
|
||||||
|
import com.sun.jna.platform.win32.WinDef.HDC;
|
||||||
import com.sun.jna.platform.win32.WinDef.HICON;
|
import com.sun.jna.platform.win32.WinDef.HICON;
|
||||||
import com.sun.jna.platform.win32.WinDef.HINSTANCE;
|
import com.sun.jna.platform.win32.WinDef.HINSTANCE;
|
||||||
import com.sun.jna.platform.win32.WinDef.HWND;
|
import com.sun.jna.platform.win32.WinDef.HWND;
|
||||||
import com.sun.jna.platform.win32.WinDef.LPARAM;
|
import com.sun.jna.platform.win32.WinDef.LPARAM;
|
||||||
import com.sun.jna.platform.win32.WinDef.LRESULT;
|
import com.sun.jna.platform.win32.WinDef.LRESULT;
|
||||||
|
import com.sun.jna.platform.win32.WinDef.RECT;
|
||||||
import com.sun.jna.platform.win32.WinDef.WPARAM;
|
import com.sun.jna.platform.win32.WinDef.WPARAM;
|
||||||
import com.sun.jna.platform.win32.WinNT.HANDLE;
|
import com.sun.jna.platform.win32.WinNT.HANDLE;
|
||||||
import com.sun.jna.win32.StdCallLibrary;
|
import com.sun.jna.win32.StdCallLibrary;
|
||||||
@@ -875,5 +877,194 @@ public interface WinUser extends StdCallLibrary, WinDef {
|
|||||||
*/
|
*/
|
||||||
LRESULT callback(HWND hwnd, int uMsg, WPARAM wParam, LPARAM lParam);
|
LRESULT callback(HWND hwnd, int uMsg, WPARAM wParam, LPARAM lParam);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Each physical display is represented by a monitor handle of type HMONITOR. A valid HMONITOR
|
||||||
|
* is guaranteed to be non-NULL. A physical display has the same HMONITOR as long as it is part
|
||||||
|
* of the desktop.
|
||||||
|
*/
|
||||||
|
public class HMONITOR extends HANDLE {
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Instantiates a new HMONITOR.
|
||||||
|
*/
|
||||||
|
public HMONITOR()
|
||||||
|
{
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Instantiates a new HMONITOR.
|
||||||
|
* @param p the pointer
|
||||||
|
*/
|
||||||
|
public HMONITOR(Pointer p)
|
||||||
|
{
|
||||||
|
super(p);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Returns NULL.
|
||||||
|
*/
|
||||||
|
final int MONITOR_DEFAULTTONULL = 0x00000000;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Returns a handle to the primary display monitor.
|
||||||
|
*/
|
||||||
|
final int MONITOR_DEFAULTTOPRIMARY = 0x00000001;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Returns a handle to the display monitor that is nearest to the window.
|
||||||
|
*/
|
||||||
|
final int MONITOR_DEFAULTTONEAREST = 0x00000002;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* This is the primary display monitor.
|
||||||
|
*/
|
||||||
|
final int MONITORINFOF_PRIMARY = 0x00000001;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Length of the device name in MONITORINFOEX
|
||||||
|
*/
|
||||||
|
final int CCHDEVICENAME = 32;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* The MONITORINFO structure contains information about a display monitor.<br/>
|
||||||
|
* The {@link MyUser32#GetMonitorInfo(HMONITOR, MONITORINFO)} function stores
|
||||||
|
* information into a MONITORINFO structure<br/><br/>
|
||||||
|
* The MONITORINFO structure is a subset of the MONITORINFOEX structure.
|
||||||
|
*/
|
||||||
|
public class MONITORINFO extends Structure
|
||||||
|
{
|
||||||
|
/**
|
||||||
|
* The size, in bytes, of the structure.
|
||||||
|
*/
|
||||||
|
public int cbSize = size();
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Specifies the display monitor rectangle, expressed in virtual-screen coordinates.
|
||||||
|
* Note that if the monitor is not the primary display monitor, some of the
|
||||||
|
* rectangle's coordinates may be negative values.
|
||||||
|
*/
|
||||||
|
public RECT rcMonitor;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Specifies the work area rectangle of the display monitor that can be used by
|
||||||
|
* applications, expressed in virtual-screen coordinates. Windows uses this rectangle
|
||||||
|
* to maximize an application on the monitor. The rest of the area in rcMonitor
|
||||||
|
* contains system windows such as the task bar and side bars. Note that if the
|
||||||
|
* monitor is not the primary display monitor, some of the rectangle's coordinates
|
||||||
|
* may be negative values.
|
||||||
|
*/
|
||||||
|
public RECT rcWork;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* The attributes of the display monitor. This member can be the following value.
|
||||||
|
* <li>MONITORINFOF_PRIMARY</li>
|
||||||
|
*/
|
||||||
|
public int dwFlags;
|
||||||
|
|
||||||
|
@Override
|
||||||
|
protected List<String> getFieldOrder()
|
||||||
|
{
|
||||||
|
return Arrays.asList("cbSize", "rcMonitor", "rcWork", "dwFlags");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* The MONITORINFOEX structure contains information about a display monitor.<br/>
|
||||||
|
* The {@link MyUser32#GetMonitorInfo(HMONITOR, MONITORINFOEX)} function stores
|
||||||
|
* information into a MONITORINFOEX structure<br/><br/>
|
||||||
|
* The MONITORINFOEX structure is a superset of the MONITORINFO structure.
|
||||||
|
* The MONITORINFOEX structure adds a string member to contain a name for the display monitor.
|
||||||
|
*/
|
||||||
|
public class MONITORINFOEX extends Structure
|
||||||
|
{
|
||||||
|
/**
|
||||||
|
* The size, in bytes, of the structure.
|
||||||
|
*/
|
||||||
|
public int cbSize;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Specifies the display monitor rectangle, expressed in virtual-screen coordinates.
|
||||||
|
* Note that if the monitor is not the primary display monitor, some of the
|
||||||
|
* rectangle's coordinates may be negative values.
|
||||||
|
*/
|
||||||
|
public RECT rcMonitor;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Specifies the work area rectangle of the display monitor that can be used by
|
||||||
|
* applications, expressed in virtual-screen coordinates. Windows uses this rectangle
|
||||||
|
* to maximize an application on the monitor. The rest of the area in rcMonitor
|
||||||
|
* contains system windows such as the task bar and side bars. Note that if the
|
||||||
|
* monitor is not the primary display monitor, some of the rectangle's coordinates
|
||||||
|
* may be negative values.
|
||||||
|
*/
|
||||||
|
public RECT rcWork;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* The attributes of the display monitor. This member can be the following value.
|
||||||
|
* <li>MONITORINFOF_PRIMARY</li>
|
||||||
|
*/
|
||||||
|
public int dwFlags;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* A string that specifies the device name of the monitor being used. Most
|
||||||
|
* applications have no use for a display monitor name, and so can save some bytes
|
||||||
|
* by using a MONITORINFO structure.
|
||||||
|
*/
|
||||||
|
public char[] szDevice;
|
||||||
|
|
||||||
|
public MONITORINFOEX()
|
||||||
|
{
|
||||||
|
szDevice = new char[CCHDEVICENAME];
|
||||||
|
cbSize = size();
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
protected List<String> getFieldOrder()
|
||||||
|
{
|
||||||
|
return Arrays.asList("cbSize", "rcMonitor", "rcWork", "dwFlags", "szDevice");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* An application-defined callback function that is called by the {@link MyUser32#EnumDisplayMonitors} function.
|
||||||
|
* <br/><br/>
|
||||||
|
* You can use the EnumDisplayMonitors function to enumerate the set of display monitors that intersect
|
||||||
|
* the visible region of a specified device context and, optionally, a clipping rectangle. To do this,
|
||||||
|
* set the hdc parameter to a non-NULL value, and set the lprcClip parameter as needed.
|
||||||
|
* <br/><br/>
|
||||||
|
* You can also use the EnumDisplayMonitors function to enumerate one or more of the display monitors on
|
||||||
|
* the desktop, without supplying a device context. To do this, set the hdc parameter of
|
||||||
|
* EnumDisplayMonitors to NULL and set the lprcClip parameter as needed.
|
||||||
|
* <br/><br/>
|
||||||
|
* In all cases, EnumDisplayMonitors calls a specified MonitorEnumProc function once for each display
|
||||||
|
* monitor in the calculated enumeration set. The MonitorEnumProc function always receives a handle to
|
||||||
|
* the display monitor. If the hdc parameter of EnumDisplayMonitors is non-NULL, the MonitorEnumProc
|
||||||
|
* function also receives a handle to a device context whose color format is appropriate for the
|
||||||
|
* display monitor. You can then paint into the device context in a manner that is optimal for the
|
||||||
|
* display monitor.
|
||||||
|
*/
|
||||||
|
public interface MONITORENUMPROC extends Callback
|
||||||
|
{
|
||||||
|
/**
|
||||||
|
* @param hMonitor A handle to the display monitor. This value will always be non-NULL.
|
||||||
|
* @param hdcMonitor A handle to a device context. The device context has color attributes that are
|
||||||
|
* appropriate for the display monitor identified by hMonitor. The clipping area of the device
|
||||||
|
* context is set to the intersection of the visible region of the device context identified
|
||||||
|
* by the hdc parameter of EnumDisplayMonitors, the rectangle pointed to by the lprcClip
|
||||||
|
* parameter of EnumDisplayMonitors, and the display monitor rectangle.
|
||||||
|
* @param lprcMonitor A pointer to a RECT structure. If hdcMonitor is non-NULL, this rectangle is the
|
||||||
|
* intersection of the clipping area of the device context identified by hdcMonitor and the
|
||||||
|
* display monitor rectangle. The rectangle coordinates are device-context coordinates.
|
||||||
|
* If hdcMonitor is NULL, this rectangle is the display monitor rectangle. The rectangle
|
||||||
|
* coordinates are virtual-screen coordinates.
|
||||||
|
* @param dwData Application-defined data that EnumDisplayMonitors passes directly to the enumeration
|
||||||
|
* function.
|
||||||
|
* @return To continue the enumeration, return TRUE. To stop the enumeration, return FALSE.
|
||||||
|
*/
|
||||||
|
public int apply(HMONITOR hMonitor, HDC hdcMonitor, RECT lprcMonitor, LPARAM dwData);
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -0,0 +1,198 @@
|
|||||||
|
/*
|
||||||
|
* Copyright 2014 Martin Steiger
|
||||||
|
*
|
||||||
|
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||||
|
* you may not use this file except in compliance with the License.
|
||||||
|
* You may obtain a copy of the License at
|
||||||
|
*
|
||||||
|
* http://www.apache.org/licenses/LICENSE-2.0
|
||||||
|
*
|
||||||
|
* Unless required by applicable law or agreed to in writing, software
|
||||||
|
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||||
|
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||||
|
* See the License for the specific language governing permissions and
|
||||||
|
* limitations under the License.
|
||||||
|
*/
|
||||||
|
|
||||||
|
package com.sun.jna.platform.win32;
|
||||||
|
|
||||||
|
import junit.framework.TestCase;
|
||||||
|
|
||||||
|
import com.sun.jna.Memory;
|
||||||
|
import com.sun.jna.platform.win32.Dxva2;
|
||||||
|
import com.sun.jna.platform.win32.HighLevelMonitorConfigurationAPI.MC_COLOR_TEMPERATURE;
|
||||||
|
import com.sun.jna.platform.win32.HighLevelMonitorConfigurationAPI.MC_DISPLAY_TECHNOLOGY_TYPE;
|
||||||
|
import com.sun.jna.platform.win32.HighLevelMonitorConfigurationAPI.MC_DRIVE_TYPE;
|
||||||
|
import com.sun.jna.platform.win32.HighLevelMonitorConfigurationAPI.MC_GAIN_TYPE;
|
||||||
|
import com.sun.jna.platform.win32.HighLevelMonitorConfigurationAPI.MC_POSITION_TYPE;
|
||||||
|
import com.sun.jna.platform.win32.HighLevelMonitorConfigurationAPI.MC_SIZE_TYPE;
|
||||||
|
import com.sun.jna.platform.win32.LowLevelMonitorConfigurationAPI.MC_TIMING_REPORT;
|
||||||
|
import com.sun.jna.platform.win32.PhysicalMonitorEnumerationAPI.PHYSICAL_MONITOR;
|
||||||
|
import com.sun.jna.platform.win32.User32;
|
||||||
|
import com.sun.jna.platform.win32.WTypes.LPSTR;
|
||||||
|
import com.sun.jna.platform.win32.WinDef.DWORD;
|
||||||
|
import com.sun.jna.platform.win32.WinDef.DWORDByReference;
|
||||||
|
import com.sun.jna.platform.win32.WinDef.POINT;
|
||||||
|
import com.sun.jna.platform.win32.WinNT.HANDLE;
|
||||||
|
import com.sun.jna.platform.win32.WinUser;
|
||||||
|
import com.sun.jna.platform.win32.WinUser.HMONITOR;
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @author Martin Steiger
|
||||||
|
*/
|
||||||
|
public class Dxva2Test extends TestCase {
|
||||||
|
|
||||||
|
private int monitorCount;
|
||||||
|
private PHYSICAL_MONITOR[] physMons;
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void setUp()
|
||||||
|
{
|
||||||
|
HMONITOR hMonitor = User32.INSTANCE.MonitorFromPoint(new POINT(0, 0), WinUser.MONITOR_DEFAULTTOPRIMARY);
|
||||||
|
|
||||||
|
DWORDByReference pdwNumberOfPhysicalMonitors = new DWORDByReference();
|
||||||
|
assertTrue(Dxva2.INSTANCE.GetNumberOfPhysicalMonitorsFromHMONITOR(hMonitor, pdwNumberOfPhysicalMonitors).booleanValue());
|
||||||
|
|
||||||
|
monitorCount = pdwNumberOfPhysicalMonitors.getValue().intValue();
|
||||||
|
physMons = new PHYSICAL_MONITOR[monitorCount];
|
||||||
|
assertTrue(Dxva2.INSTANCE.GetPhysicalMonitorsFromHMONITOR(hMonitor, monitorCount, physMons).booleanValue());
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void tearDown()
|
||||||
|
{
|
||||||
|
assertTrue(Dxva2.INSTANCE.DestroyPhysicalMonitors(monitorCount, physMons).booleanValue());
|
||||||
|
}
|
||||||
|
|
||||||
|
public void testGetMonitorTechnologyType()
|
||||||
|
{
|
||||||
|
HANDLE hPhysicalMonitor = physMons[0].hPhysicalMonitor;
|
||||||
|
|
||||||
|
// the method returns FALSE if the monitor driver doesn't support it,
|
||||||
|
// but verifies that the JNA mapping is correct (no exception)
|
||||||
|
MC_DISPLAY_TECHNOLOGY_TYPE.ByReference techType = new MC_DISPLAY_TECHNOLOGY_TYPE.ByReference();
|
||||||
|
Dxva2.INSTANCE.GetMonitorTechnologyType(hPhysicalMonitor, techType);
|
||||||
|
}
|
||||||
|
|
||||||
|
public void testGetMonitorCapabilities()
|
||||||
|
{
|
||||||
|
HANDLE hPhysicalMonitor = physMons[0].hPhysicalMonitor;
|
||||||
|
|
||||||
|
// the method returns FALSE if the monitor driver doesn't support it,
|
||||||
|
// but verifies that the JNA mapping is correct (no exception)
|
||||||
|
DWORDByReference temps = new DWORDByReference();
|
||||||
|
DWORDByReference caps = new DWORDByReference();
|
||||||
|
Dxva2.INSTANCE.GetMonitorCapabilities(hPhysicalMonitor, caps, temps);
|
||||||
|
}
|
||||||
|
|
||||||
|
public void testGetMonitorBrightness()
|
||||||
|
{
|
||||||
|
HANDLE hPhysicalMonitor = physMons[0].hPhysicalMonitor;
|
||||||
|
|
||||||
|
// the method returns FALSE if the monitor driver doesn't support it,
|
||||||
|
// but verifies that the JNA mapping is correct (no exception)
|
||||||
|
DWORDByReference pdwMinimumBrightness = new DWORDByReference();
|
||||||
|
DWORDByReference pdwCurrentBrightness = new DWORDByReference();
|
||||||
|
DWORDByReference pdwMaximumBrightness = new DWORDByReference();
|
||||||
|
Dxva2.INSTANCE.GetMonitorBrightness(hPhysicalMonitor, pdwMinimumBrightness, pdwCurrentBrightness, pdwMaximumBrightness);
|
||||||
|
}
|
||||||
|
|
||||||
|
public void testGetMonitorContrast()
|
||||||
|
{
|
||||||
|
HANDLE hPhysicalMonitor = physMons[0].hPhysicalMonitor;
|
||||||
|
|
||||||
|
// the method returns FALSE if the monitor driver doesn't support it,
|
||||||
|
// but verifies that the JNA mapping is correct (no exception)
|
||||||
|
DWORDByReference pdwMinimumContrast = new DWORDByReference();
|
||||||
|
DWORDByReference pdwCurrentContrast = new DWORDByReference();
|
||||||
|
DWORDByReference pdwMaximumContrast = new DWORDByReference();
|
||||||
|
Dxva2.INSTANCE.GetMonitorContrast(hPhysicalMonitor, pdwMinimumContrast, pdwCurrentContrast, pdwMaximumContrast);
|
||||||
|
}
|
||||||
|
|
||||||
|
public void testGetMonitorColorTemperature()
|
||||||
|
{
|
||||||
|
HANDLE hPhysicalMonitor = physMons[0].hPhysicalMonitor;
|
||||||
|
|
||||||
|
// the method returns FALSE if the monitor driver doesn't support it,
|
||||||
|
// but verifies that the JNA mapping is correct (no exception)
|
||||||
|
MC_COLOR_TEMPERATURE.ByReference pctCurrentColorTemperature = new MC_COLOR_TEMPERATURE.ByReference();
|
||||||
|
Dxva2.INSTANCE.GetMonitorColorTemperature(hPhysicalMonitor, pctCurrentColorTemperature);
|
||||||
|
}
|
||||||
|
|
||||||
|
public void testCapabilitiesRequestAndCapabilitiesReply()
|
||||||
|
{
|
||||||
|
HANDLE hPhysicalMonitor = physMons[0].hPhysicalMonitor;
|
||||||
|
|
||||||
|
// the method returns FALSE if the monitor driver doesn't support it,
|
||||||
|
// but verifies that the JNA mapping is correct (no exception)
|
||||||
|
DWORDByReference pdwCapabilitiesStringLengthInCharacters = new DWORDByReference();
|
||||||
|
Dxva2.INSTANCE.GetCapabilitiesStringLength(hPhysicalMonitor, pdwCapabilitiesStringLengthInCharacters);
|
||||||
|
DWORD capStrLen = pdwCapabilitiesStringLengthInCharacters.getValue();
|
||||||
|
|
||||||
|
LPSTR pszASCIICapabilitiesString = new LPSTR(new Memory(capStrLen.intValue()));
|
||||||
|
Dxva2.INSTANCE.CapabilitiesRequestAndCapabilitiesReply(hPhysicalMonitor, pszASCIICapabilitiesString, capStrLen);
|
||||||
|
}
|
||||||
|
|
||||||
|
public void testGetMonitorDisplayAreaPosition()
|
||||||
|
{
|
||||||
|
HANDLE hPhysicalMonitor = physMons[0].hPhysicalMonitor;
|
||||||
|
|
||||||
|
// the method returns FALSE if the monitor driver doesn't support it,
|
||||||
|
// but verifies that the JNA mapping is correct (no exception)
|
||||||
|
MC_POSITION_TYPE ptPositionType = MC_POSITION_TYPE.MC_HORIZONTAL_POSITION;
|
||||||
|
DWORDByReference pdwMinimumPosition = new DWORDByReference();
|
||||||
|
DWORDByReference pdwCurrentPosition = new DWORDByReference();
|
||||||
|
DWORDByReference pdwMaximumPosition = new DWORDByReference();
|
||||||
|
Dxva2.INSTANCE.GetMonitorDisplayAreaPosition(hPhysicalMonitor, ptPositionType, pdwMinimumPosition, pdwCurrentPosition, pdwMaximumPosition);
|
||||||
|
}
|
||||||
|
|
||||||
|
public void testGetMonitorDisplayAreaSize()
|
||||||
|
{
|
||||||
|
HANDLE hPhysicalMonitor = physMons[0].hPhysicalMonitor;
|
||||||
|
|
||||||
|
// the method returns FALSE if the monitor driver doesn't support it,
|
||||||
|
// but verifies that the JNA mapping is correct (no exception)
|
||||||
|
MC_SIZE_TYPE ptSizeType = MC_SIZE_TYPE.MC_WIDTH;
|
||||||
|
DWORDByReference pdwMinimumSize = new DWORDByReference();
|
||||||
|
DWORDByReference pdwCurrentSize = new DWORDByReference();
|
||||||
|
DWORDByReference pdwMaximumSize = new DWORDByReference();
|
||||||
|
Dxva2.INSTANCE.GetMonitorDisplayAreaSize(hPhysicalMonitor, ptSizeType, pdwMinimumSize, pdwCurrentSize, pdwMaximumSize);
|
||||||
|
}
|
||||||
|
|
||||||
|
public void testGetMonitorRedGreenOrBlueGain()
|
||||||
|
{
|
||||||
|
HANDLE hPhysicalMonitor = physMons[0].hPhysicalMonitor;
|
||||||
|
|
||||||
|
// the method returns FALSE if the monitor driver doesn't support it,
|
||||||
|
// but verifies that the JNA mapping is correct (no exception)
|
||||||
|
MC_GAIN_TYPE ptGainType = MC_GAIN_TYPE.MC_RED_GAIN;
|
||||||
|
DWORDByReference pdwMinimumGain = new DWORDByReference();
|
||||||
|
DWORDByReference pdwCurrentGain = new DWORDByReference();
|
||||||
|
DWORDByReference pdwMaximumGain = new DWORDByReference();
|
||||||
|
Dxva2.INSTANCE.GetMonitorRedGreenOrBlueGain(hPhysicalMonitor, ptGainType, pdwMinimumGain, pdwCurrentGain, pdwMaximumGain);
|
||||||
|
}
|
||||||
|
|
||||||
|
public void testGetMonitorRedGreenOrBlueDrive()
|
||||||
|
{
|
||||||
|
HANDLE hPhysicalMonitor = physMons[0].hPhysicalMonitor;
|
||||||
|
|
||||||
|
// the method returns FALSE if the monitor driver doesn't support it,
|
||||||
|
// but verifies that the JNA mapping is correct (no exception)
|
||||||
|
MC_DRIVE_TYPE ptDriveType = MC_DRIVE_TYPE.MC_RED_DRIVE;
|
||||||
|
DWORDByReference pdwMinimumDrive = new DWORDByReference();
|
||||||
|
DWORDByReference pdwCurrentDrive = new DWORDByReference();
|
||||||
|
DWORDByReference pdwMaximumDrive = new DWORDByReference();
|
||||||
|
Dxva2.INSTANCE.GetMonitorRedGreenOrBlueDrive(hPhysicalMonitor, ptDriveType, pdwMinimumDrive, pdwCurrentDrive, pdwMaximumDrive);
|
||||||
|
}
|
||||||
|
|
||||||
|
public void testGetTimingReport()
|
||||||
|
{
|
||||||
|
HANDLE hPhysicalMonitor = physMons[0].hPhysicalMonitor;
|
||||||
|
|
||||||
|
// the method returns FALSE if the monitor driver doesn't support it,
|
||||||
|
// but verifies that the JNA mapping is correct (no exception)
|
||||||
|
MC_TIMING_REPORT pmtrMonitorTimingReport = new MC_TIMING_REPORT();
|
||||||
|
Dxva2.INSTANCE.GetTimingReport(hPhysicalMonitor, pmtrMonitorTimingReport);
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -20,7 +20,16 @@ import java.awt.event.KeyEvent;
|
|||||||
|
|
||||||
import junit.framework.TestCase;
|
import junit.framework.TestCase;
|
||||||
|
|
||||||
|
import com.sun.jna.platform.win32.WinDef.HDC;
|
||||||
|
import com.sun.jna.platform.win32.WinDef.HWND;
|
||||||
|
import com.sun.jna.platform.win32.WinDef.LPARAM;
|
||||||
|
import com.sun.jna.platform.win32.WinDef.POINT;
|
||||||
|
import com.sun.jna.platform.win32.WinDef.RECT;
|
||||||
|
import com.sun.jna.platform.win32.WinUser.HMONITOR;
|
||||||
import com.sun.jna.platform.win32.WinUser.LASTINPUTINFO;
|
import com.sun.jna.platform.win32.WinUser.LASTINPUTINFO;
|
||||||
|
import com.sun.jna.platform.win32.WinUser.MONITORENUMPROC;
|
||||||
|
import com.sun.jna.platform.win32.WinUser.MONITORINFO;
|
||||||
|
import com.sun.jna.platform.win32.WinUser.MONITORINFOEX;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @author dblock[at]dblock[dot]org
|
* @author dblock[at]dblock[dot]org
|
||||||
@@ -110,4 +119,44 @@ public class User32Test extends TestCase {
|
|||||||
final int msg = User32.INSTANCE.RegisterWindowMessage("RM_UNITTEST");
|
final int msg = User32.INSTANCE.RegisterWindowMessage("RM_UNITTEST");
|
||||||
assertTrue(msg >= 0xC000 && msg <= 0xFFFF);
|
assertTrue(msg >= 0xC000 && msg <= 0xFFFF);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public final void testMonitorFromPoint() {
|
||||||
|
int dwFlags = WinUser.MONITOR_DEFAULTTOPRIMARY;
|
||||||
|
|
||||||
|
POINT pt = new POINT(0, 0);
|
||||||
|
assertNotNull(User32.INSTANCE.MonitorFromPoint(pt, dwFlags));
|
||||||
|
}
|
||||||
|
|
||||||
|
public final void testMonitorFromRect() {
|
||||||
|
int dwFlags = WinUser.MONITOR_DEFAULTTOPRIMARY;
|
||||||
|
RECT lprc = new RECT();
|
||||||
|
assertNotNull(User32.INSTANCE.MonitorFromRect(lprc, dwFlags));
|
||||||
|
}
|
||||||
|
|
||||||
|
public final void testMonitorFromWindow() {
|
||||||
|
int dwFlags = WinUser.MONITOR_DEFAULTTOPRIMARY;
|
||||||
|
|
||||||
|
HWND hwnd = new HWND();
|
||||||
|
assertNotNull(User32.INSTANCE.MonitorFromWindow(hwnd, dwFlags));
|
||||||
|
}
|
||||||
|
|
||||||
|
public final void testGetMonitorInfo() {
|
||||||
|
HMONITOR hMon = User32.INSTANCE.MonitorFromPoint(new POINT(0, 0), WinUser.MONITOR_DEFAULTTOPRIMARY);
|
||||||
|
|
||||||
|
assertTrue(User32.INSTANCE.GetMonitorInfo(hMon, new MONITORINFO()).booleanValue());
|
||||||
|
|
||||||
|
assertTrue(User32.INSTANCE.GetMonitorInfo(hMon, new MONITORINFOEX()).booleanValue());
|
||||||
|
}
|
||||||
|
|
||||||
|
public final void testEnumDisplayMonitors() {
|
||||||
|
|
||||||
|
assertTrue(User32.INSTANCE.EnumDisplayMonitors(null, null, new MONITORENUMPROC() {
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public int apply(HMONITOR hMonitor, HDC hdc, RECT rect, LPARAM lparam)
|
||||||
|
{
|
||||||
|
return 1;
|
||||||
|
}
|
||||||
|
}, new LPARAM(0)).booleanValue());
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
Referência em uma Nova Issue
Bloquear um usuário