1
我正在编写一个需要将HID读卡器连接到系统的应用程序。当应用程序启动时已连接读卡器时,一切正常,因此我知道我可以正确地找到设备。 (我正在使用PM> Install-Package hidlibrary
的HID类别。)等待要连接的HID读卡器
我想添加一个功能,其中程序将显示连接读卡器的提示(如果找不到)。
这是我第一次尝试:
public class App : Application
{
public static List<HidDevice> HidDeviceList;
// Block until device is plugged in
static ManualResetEvent m_WaitForPlugin = new ManualResetEvent(false);
// WMI Watcher for actual plug-in event
static ManagementEventWatcher watcher = new ManagementEventWatcher();
[STAThread()]
static void Main()
{
ShowSplashScreen();
FindCardReader();
CloseSplashScreen();
new App();
}
public App() : base()
{
StartupUri = new System.Uri("MainWindow.xaml", UriKind.Relative);
Run();
}
private static void FindCardReader()
{
ShowOnSplashScreen("Searching for card reader");
do
{
int VendorID = Convert.ToInt32(Settings.Default.ReaderVID, 16); // 0x0801
int ProductID = Convert.ToInt32(Settings.Default.ReaderPID, 16); // 0x0002
HidDeviceList = HidDevices.Enumerate(VendorID, ProductID).ToList();
if (HidDeviceList.Count > 0) {
break;
}
ShowOnSplashScreen("Please attach card reader...");
SetupWatcher();
m_WaitForPlugin.WaitOne();
} while (HidDeviceList.Count == 0);
}
private static void SetupWatcher()
{
WqlEventQuery query = new WqlEventQuery("SELECT * FROM Win32_DeviceChangeEvent WHERE EventType = 2");
watcher.EventArrived += new EventArrivedEventHandler(delegate(Object sender, EventArrivedEventArgs e)
{
ShowOnSplashScreen("New device detected!");
m_WaitForPlugin.Set();
});
watcher.Query = query;
watcher.Start();
}
在Main
块FindCardReader()
符合市场预期,但从来没有出现在新的装置插入到被标示(我把一个断点在委托和它从来没有。 )
我不知道如何自己测试WMI观察器(我在PowerShell中测试了这个查询,它似乎可以工作)。我也尝试从new Thread
开始,但结果是一样的。
你可以在定时循环(比如说,每2-3秒)测试一下你的'WqlEventQuery',看看'Win32_DeviceChangeEvent'实际上是否显示在WMI中?之后,您可以尝试使用您知道经常更改的东西来测试'ManagementEventWatcher',例如'Select * From Win32_LocalTime'。 – 2014-10-30 20:11:39
你有没有考虑过不同的查询,可能是基于这一个:http://stackoverflow.com/questions/5278860/using-wmi-to-identify-which-device-caused-a-win32-devicechangeevent?rq=1? – 2014-10-30 20:13:07
你看过一些[示例应用程序](https://github.com/mikeobrien/HidLibrary/blob/master/examples/MagtekCardReader/Program.cs#L23)如何处理连接/断开连接吗? – 2014-10-30 20:53:27