Table of Contents

HKMOpen2 打开设备


功能

打开两个键鼠模拟器(一个键盘模式、一个鼠标模式),以便对它们进行操作。

参数

  • 参数1 第一个设备ID:无符号32位整型数。使用HKMSearchDevice或者HKMSearchDevice2可以获得它。
  • 参数1 第二个设备ID:无符号32位整型数。使用HKMSearchDevice或者HKMSearchDevice2可以获得它。
  • 参数3 DPI模式:无符号32位整型数。 用于设置鼠标移动(HKMMoveTo和HKMMoveR2)和获得鼠标坐标(HKMGetCursorPos和HKMGetCursorPos2)时使用的坐标的DPI模式。 WINDOW系统为了支持程序界面缩放,使用了不同坐标,不同DPI模式对应不同坐标计算方式,可取值如下:
    • 0: 每个显示器DPI感知,此模式不受系统DPI设置和显示器DPI设置影响,每个坐标与显示器像素是一一对应的,windows系统从WIN8.1开始支持此模式,WIN8.1以前等效于系统DPI感知,一般应该设置为该值。
    • 1: 主显示器DPI感知。在WIN8.1以前的系统中每个坐标与显示器像素是一一对应的,适用于旧系统
    • 2: 无DPI感知
    • 3: DPI不可
    • 4: 当前上下文的DPI感知。根据当前上下文决定DPI感知。

返回值:

无类型指针。创建的设备句柄。失败返回NULL。不再使用它时用HKMClose可以关闭它以释放资源。

C# 示例代码

uint dwDevId1, dwDevId2;
IntPtr lpDev;
dwDevId1 = SkmCore.HKMSearchDevice(0x1234, 0xABCD, 2);
if (dwDevId1 == 0xFFFFFFFF)
{
    Console.WriteLine("未找到键鼠模拟器(键盘模式)");
    return;
}
dwDevId2 = SkmCore.HKMSearchDevice(0x1234, 0xABCD, 3);
if (dwDevId2 == 0xFFFFFFFF)
{
    Console.WriteLine("未找到键鼠模拟器(鼠标模式)");
    return;
}
lpDev = SkmCore.HKMOpen2(dwDevId1, dwDevId2, 0);
if (lpDev == IntPtr.Zero)
{
    Console.WriteLine("打开键鼠模拟器失败");
    return;
}
//执行操作
SkmCore.HKMClose(lpDev);

C语言例子

DWORD dwDevId1,dwDevId2;
LPVOID lpDev;
dwDevId1=HKMSearchDevice(0x1234,0xABCD,2);
if(dwDevId1==0xFFFFFFFF)
{
    printf("未找到键鼠模拟器(键盘模式)\n");
    return 0;
}
dwDevId2=HKMSearchDevice(0x1234,0xABCD,3);
if(dwDevId2==0xFFFFFFFF)
{
    printf("未找到键鼠模拟器(鼠标模式)\n");
    return 0;
} 
lpDev=HKMOpen2(dwDevId1,dwDevId2,0);
if(lpDev==NULL)
{
    printf("打开键鼠模拟器失败\n");
    return 0;
}
//执行操作
HKMClose(lpDev);