首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Synaptics Touchpad签名

Synaptics Touchpad签名
EN

Stack Overflow用户
提问于 2013-05-08 13:50:07
回答 2查看 2.6K关注 0票数 2

我想使用Synaptics来使用Touchpad来捕获一个签名。我试图捕捉触摸的绝对X和Y位置,这样我就可以跟踪人们举起他们的手指,并把它放在其他地方。我知道我能够访问Touchpad,因为我可以禁用它并访问Touchpad的维度。

下一步是获得绝对X和Y坐标。根据合成PS/2 TouchPad接口指南 (第22页),有一个“绝对模式”,我可以得到这个信息。到目前为止,我似乎无法访问它。我不知道该怎么把它设置成那种模式。

我正在使用C#开发2012。

而且,我似乎不能激活任何事件。我试着像这样记录这些事件:

代码语言:javascript
复制
using SYNCOMLib;
using SYNCTRLLib;

SYNCTRLLib.SynAPICtrl SynAPICtrl1 = new SynAPICtrl();
SYNCTRLLib.SynDeviceCtrl SynDeviceCtrl1 = new SynDeviceCtrl();
SYNCTRLLib.SynDisplayCtrl SynDisplayCtrl1 = new SynDisplayCtrl();

SynAPICtrl1.OnNotify += SynAPICtrl1_OnNotify;
SynDeviceCtrl1.OnPacket += SynDeviceCtrl1_OnPacket;
SynDisplayCtrl1.OnMessage += SynDisplayCtrl1_OnMessage;

我有函数,只需将函数名记录到控制台:

代码语言:javascript
复制
private void SynDisplayCtrl1_OnMessage(SynDisplayMessage eMessage)
{
    Console.WriteLine("SynDisplayCtrl1_OnMessage");
}

private void SynAPICtrl1_OnNotify(SynNotificationReason eReason)
{
    Console.WriteLine("SynAPICtrl1_OnNotify");
}

private void SynDeviceCtrl1_OnPacket()
{
    Console.WriteLine("SynDeviceCtrl1_OnPacket");
}

这些函数都不会被调用(或者至少没有任何函数被记录在控制台中)。我对Visual和C#相当陌生,所以解决方案可能是一个非常简单的解决方案。

提前感谢!

编辑:,这是指向Synaptics SDK的链接,以防您想要它。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2013-05-08 16:18:59

我跟踪了本站上的信息,并将其转换为下面的C#。

在我的代码顶部:

代码语言:javascript
复制
using SYNCOMLib;
using SYNCTRLLib;

在我的职责之外,所以它们是全球性的

代码语言:javascript
复制
SynAPICtrl SynTP_API = new SynAPICtrl();
SynDeviceCtrl SynTP_Dev = new SynDeviceCtrl();
SynPacketCtrl SynTP_Pack = new SynPacketCtrl();
int DeviceHandle;

在我的构造函数里面

代码语言:javascript
复制
SynTP_API.Initialize();
SynTP_API.Activate();
DeviceHandle = SynTP_API.FindDevice(new SynConnectionType(), new SynDeviceType(), 0);
SynTP_Dev.Select(DeviceHandle);
SynTP_Dev.Activate();  
SynTP_Dev.OnPacket += SynTP_Dev_OnPacket;

最后,处理事件的函数

代码语言:javascript
复制
private void SynTP_Dev_OnPacket()
{
    if (SynTP_Dev.LoadPacket(SynTP_Pack) == 1)
    {
        Console.WriteLine(SynTP_Pack.FingerState);
        Console.WriteLine(SynTP_Pack.X);
        Console.WriteLine(SynTP_Pack.Y);
    }
}

我将更改一些变量名,以使它们更加直观,但这段代码工作得很好。

票数 1
EN

Stack Overflow用户

发布于 2016-05-30 05:29:27

被接受的答案在Windows 10上不起作用。下面是一个经过修正的代码示例,演示了在触控板上检测到一个3指点击。同样的检测被接受答案中的绝对坐标的方法也可以在这里工作--但是注意到loadPacket()总是返回0,而不是1。

注意:您要检测的手势必须在Synaptics控制面板中启用。另外,由于Synaptics似乎已经脱机,所以我能够直接引用来自.NET的.NET。

代码语言:javascript
复制
class Program
{
    static SynAPICtrl api = new SynAPICtrl();
    static SynDeviceCtrl device = new SynDeviceCtrl();
    static SynPacketCtrl packet = new SynPacketCtrl();
    static int deviceHandle;
    static int counter;

    static void Main(string[] args)
    {   
        api.Initialize();
        api.Activate();
        //select the first device found
        deviceHandle = api.FindDevice(SynConnectionType.SE_ConnectionAny, SynDeviceType.SE_DeviceTouchPad, -1);
        device.Select(deviceHandle);
        device.Activate();
        device.OnPacket += SynTP_Dev_OnPacket;
        Console.ReadLine();
    }

    static private void SynTP_Dev_OnPacket()
    {
        var result = device.LoadPacket(packet);
        SynFingerFlags fingerState;
        if(Enum.TryParse(packet.FingerState.ToString(), out fingerState))
        {
            if(fingerState.HasFlag(SynFingerFlags.SF_FingerTap3))
            {
                Console.WriteLine($"Tapped {counter++}");
            }
        }
    }
}
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/16442480

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档