Synaptics SDK无法找到设备

jer*_*h91 11 c# touchpad

我正在尝试使用Synaptics SDK在Synaptics触摸板上获取设备句柄,特别是使用SYNCTRLLib中的方法.但是,该SYNCTRL方法未能找到它,返回-1.

Syn.cs:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using SYNCOMLib;
using SYNCTRLLib;

namespace TP_Test1
{
    class Syn
    {
        SynAPICtrl SynTP_API = new SynAPICtrl();
        SynDeviceCtrl SynTP_Dev = new SynDeviceCtrl();
        SynPacketCtrl SynTP_Pack = new SynPacketCtrl();
        int DeviceHandle;

        //Constructor
        public Syn ()
        {
            SynTP_API.Initialize();
            SynTP_API.Activate();

            //DeviceHandle == -1 ? Can't find device?
            DeviceHandle = SynTP_API.FindDevice(new SynConnectionType(), new SynDeviceType(), 0);
            //Below line causing Unhandled Exception
            SynTP_Dev.Select(DeviceHandle);
            SynTP_Dev.Activate();
            SynTP_Dev.OnPacket += SynTP_Dev_OnPacket;
        }

        public void SynTP_Dev_OnPacket()
        {
                Console.WriteLine(SynTP_Pack.FingerState);
                Console.WriteLine(SynTP_Pack.X);
                Console.WriteLine(SynTP_Pack.Y);
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

Program.cs中

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using SYNCOMLib;
using SYNCTRLLib;

namespace TP_Test1
{
    class Program
    {
        static void Main(string[] args)
        {
            Syn mySyn = new Syn();
            mySyn.SynTP_Dev_OnPacket();
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

Bas*_*uga 3

我发现您正在使用 Synaptics SDK 的 C# 包装器。尽管 CPP 代码对您来说可能并不简单,但您可能想查看一下文件Samples/ComTest.cpp。它包含一些用于查找设备的示例逻辑,更具体地说是在第 66-76 行:

  // Find a device, preferentially a TouchPad or Styk.
  ISynDevice *pDevice = 0;
  long lHandle = -1;
  if ((pAPI->FindDevice(SE_ConnectionAny, SE_DeviceTouchPad, &lHandle) &&
       pAPI->FindDevice(SE_ConnectionAny, SE_DeviceStyk, &lHandle) &&
       pAPI->FindDevice(SE_ConnectionAny, SE_DeviceAny, &lHandle)) || 
      pAPI->CreateDevice(lHandle, &pDevice))
  {
    printf("Unable to find a Synaptics Device.\n");
    exit(-1);
  }
Run Code Online (Sandbox Code Playgroud)

另外,请确保您已注册dll。根据ReadSynSDK.txt文件:

出于某些目的,可能需要注册 SDK 提供的 dll。这可以使用 Windows regsvr32 实用程序来完成。