using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Runtime.InteropServices;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
namespace WinFormsApp1
{
public partial class Form1 : Form
{
public const int DEVICE_USB = 0;
public const int DEVICE_COM = 1;
public const int DEVICE_UDisk = 2;
public Form1()
{
InitializeComponent();
}
//[DllImport("jnalib.dll", EntryPoint = "GetVersionPtr")]
//public static extern bool GetVersionPtr(ref OSINFO info);
[DllImport("SynoAPIEx.dll", EntryPoint = "PSOpenDeviceEx")]
public static extern int PSOpenDeviceEx(ref IntPtr pHandle, int nDeviceType, int iCom=1, int iBaud=1 ,int nPackageSize=2 ,int iDevNum=0);
[DllImport("SynoAPIEx.dll", EntryPoint = "PSAutoOpen")]
public static extern int PSAutoOpen(ref IntPtr pHandle, int type,int nAddr = 0, uint uPwd = 0x00,int bVfy=1);
[DllImport("SynoAPIEx.dll", EntryPoint = "PSCloseDeviceEx")]
public static extern int PSCloseDeviceEx(ref IntPtr pHandle);
/*
1.函数原型: int WINAPI PSOpenDeviceEx(
HANDLE* pHandle, //[OUT] 设备句柄
int nDeviceType, //[IN] 设备类型,DEVICE_USB、DEVICE_COM、DEVICE_ UDisk
int iCom=1, //[IN] 串口号 1~16
int iBaud=1, //[IN] 波特率 1~n,其值*9600=实际波特率值
int nPackageSize=2,//[IN] 数据包大小,实际数据包大小= 32*(0x01<<nPackageSize)
int iDevNum=0); //[IN] 设备号,0~n
函数说明:打开 PS 设备。
返回值: 成功-PS_OK;
*
2.函数原型: int WINAPI PSAutoOpen(
HANDLE* pHandle, //[OUT] 设备句柄
int* type, //[OUT] 设备类型,DEVICE_USB、DEVICE_COM、DEVICE_UDisk
int nAddr = 0xFFFFFFFF, //[IN] 设备地址
UINT uPwd = 0x00, //[IN] 验证密码
int bVfy = 1); //[IN] 是否校验密码 0-不校验 1-校验
函数说明:自动搜索打开 PS 设备。
返回值: 成功-PS_OK;
3 关闭设备
函数原型: int WINAPI PSCloseDeviceEx(
HANDLE hHandle); //[IN] 设备句柄
函数说明:关闭 PS 设备。
返回值: 成功-PS_OK;
*/
//加入获得Handle的API
[DllImport("user32.dll")]
internal static extern IntPtr WindowFromPoint(Point Point);
//加入获得鼠标焦点的API
[DllImport("user32.dll")]
internal static extern bool GetCursorPos(out Point lpPoint);
private void button1_Click(object sender, EventArgs e)
{
Point p; GetCursorPos(out p);
IntPtr pHandle = WindowFromPoint(p);
//uint type= DEVICE_USB;DEVICE_COM
int nDeviceType = DEVICE_COM;//= new UIntPtr(&type);
//var i = PSAutoOpen(ref pHandle, type, 0, 0x00, 0);
var i = PSOpenDeviceEx(ref pHandle, nDeviceType, 1, 1, 2, 0);
Console.Write(i);
label3.Text = i.ToString();
}
private void button2_Click(object sender, EventArgs e)
{
Point p; GetCursorPos(out p);
IntPtr pHandle = WindowFromPoint(p);
var i = PSCloseDeviceEx(ref pHandle);
label3.Text = i.ToString();
}
/*
检测手指并录取图像
1.函数原型: int WINAPI PSGetImage(
HANDLE hHandle, //[IN] 设备句柄
int nAddr); //[IN] 设备地址
函数说明:检测手指并录取图像。 命令码 0x01
返回值: 成功-PS_OK;
*/
[DllImport("SynoAPIEx.dll", EntryPoint = "PSCloseDeviceEx")]
public static extern int PSGetImage(ref IntPtr pHandle, int nAddr);
private void button5_Click(object sender, EventArgs e)
{
Point p; GetCursorPos(out p);
IntPtr pHandle = WindowFromPoint(p);
var i = PSGetImage(ref pHandle,1);
label3.Text = i.ToString();
timer1.Enabled = true;
}
/*
上传原始图像到 PC
函数原型: int WINAPI PSUpImage(
HANDLE hHandle, //[IN] 设备句柄
int nAddr, //[IN] 设备地址
unsigned char* pImageData, //[OUT]PC 数据缓存区,用于存储原始图像数据流。默认图像数据流为 256*288
int* iImageLength); //[OUT]原始图像数据大小。(256*288)
函数说明:上传原始图像到 PC。
返回值: 成功-PS_OK;
*/
[DllImport("SynoAPIEx.dll", EntryPoint = "PSUpImage")]
public static extern int PSUpImage(ref IntPtr pHandle, int nAddr,out Byte pImageData,out uint iImageLength);
private void timer1_Tick(object sender, EventArgs e)
{
}
}
}