使用以下代码,当尝试使用qt_ext::QListWidgetView
读取扫描仪(这是HID设备)时,出现错误5(访问被拒绝)。 In this post有人建议以独占模式打开键盘,这是不可能的。我见过其他人说他们没有遇到这样的问题。
有可能吗?参数有问题吗?
对于那些拒绝投票的人,请问我是新来的,您认为我有什么毛病。
Ps。我在使用CreateFile
和User32.dll
方法拦截原始数据方面取得了一些成功,但这不是一个长期的解决方案。
GetRawxxx
更新:
试图更改为...
public class Hid
{
public const uint FILE_SHARE_READ = 0x00000001;
public const uint FILE_SHARE_WRITE = 0x00000002;
public const int OPEN_EXISTING = 3;
public const uint GENERIC_READ = 0x80000000;
public const uint GENERIC_WRITE = 0x40000000;
string DeviceId = "...";
private SafeFileHandle _ReadSafeFileHandle;
private FileStream _ReadFileStream;
private const int ReadBufferSize = 65;
public async Task<string> Read()
{
_ReadSafeFileHandle = CreateFile(DeviceId, GENERIC_READ, FILE_SHARE_READ, IntPtr.Zero, OPEN_EXISTING, 0, IntPtr.Zero);
if (_ReadSafeFileHandle.IsInvalid)
return "Invalid handle " + Marshal.GetLastWin32Error();
_ReadFileStream = new FileStream(_ReadSafeFileHandle, FileAccess.ReadWrite, ReadBufferSize, false);
var bytes = new byte[ReadBufferSize];
await _ReadFileStream.ReadAsync(bytes, 0, bytes.Length);
return System.Text.ASCIIEncoding.ASCII.GetString(bytes);
}
[DllImport("kernel32.dll", SetLastError = true, CharSet = CharSet.Unicode)]
public static extern SafeFileHandle CreateFile(string lpFileName, uint dwDesiredAccess, uint dwShareMode, IntPtr lpSecurityAttributes, uint dwCreationDisposition, uint dwFlagsAndAttributes, IntPtr hTemplateFile);
}
我得到一个有效的文件句柄,但是调用 _CreateFile(DeviceId, 0, FILE_SHARE_READ | FILE_SHARE_WRITE, IntPtr.Zero, OPEN_EXISTING, 0, IntPtr.Zero);
只会返回空缓冲区。尝试创建ReadFile
会导致“访问路径被拒绝”。