我正在尝试通过Windows.devices.usb使用通用Windows应用程序来连接到设备(Secugen Hamster Pro 20). 该设备是指纹扫描仪. 我已经完成了在线发现的所有步骤: 我使用以下方式寻找了所有设备: var myDevices = await Windows.Devices.Enumeration.DeviceInformation.FindAllAsync(); 这将返回约1400个设备.过滤后使用: var resultList = myDevices.Where(s => s.Name.ToLower().Contains("secu")).ToList(); resultList在我的计算机中包含3个设备(我已经在其他机器上尝试了它,并在某些机器上找到了10个结果). 我没有使用过载来查找设备DeviceInformation.FindAllAsync(String
以下是关于 hardware 的编程技术问答
我正在使用一个3-RD Party DLL,该DLL可以列举音频设备(提供名称和GUID-ID),并将音频设备设置为默认设备(通过ID). 如何获得当前音频设备(OS使用)?我需要名称或设备ID. this 问题似乎没有有用的答案. 也是如此. P> 解决方案 您可以将DirectShow用于此. private IBaseFilter CreateFilter(Guid category, string name) { object source = null; Guid guid = typeof(IBaseFilter).GUID; foreach (DsDevice device in DsDevice.GetDevicesOfCat(category)) { if ( device.Name == name ) { device.Mon.BindToObject(
简短版本 如何自动更改多个显示设置? NVIDIA,3X显示器(2x DVI和1X HDMI),GPU仅支持2个主动显示器. 长版本 所以我有一个NVIDIA GeForce GTX 560 Ti可以同时运行两个显示.它具有两个 dvi 连接和一个 hdmi .我经常通过使用我的两个桌面显示器来交换,并仅连接一个桌面监视器以及使用 hdmi 的电视. . 我想使用批处理脚本或其他程序自动自动化更改,而不是使用Windows Control面板(控制面板\ All Control面板项目\ Display \ Screens \ Screens \屏幕分辨率)或NVIDIA控制面板. 我找到了一些有关使用" rundll32.exe,NvCpl.dll,dtcfg ...."等文档.这根本不起作用.我在NVIDIA PDF文档中使用的任何参数什么都没有发生.有人有效果吗?我也在Windows 7上尝试过. 我试图使用 wmi 查看监视器是否存在,但它仅显示
我正在为我的应用程序制作错误报告工具,我想将硬件信息附加到错误报告中,以使确定某些问题更容易.有人知道是否有任何Win32 API功能来查询OS以获取图形和声卡的信息? 谢谢 Rob 解决方案 如果您愿意深入研究WMI,则应使您开始. using System; using System.Management; namespace WMIData { class Program { static void Main(string[] args) { SelectQuery querySound = new SelectQuery("Win32_SoundDevice"); ManagementObjectSearcher searcherSound = new ManagementObjectSearcher(querySound); foreac
我对获得CPU硬件的信息感到有些noob,因此我提出了此请求:硬盘驱动器,CD/DVD/BLURAY阅读器,软盘,如果可能的话,请使用. 我一直在寻找msdn getDrivetype 但是似乎我擅长搜索或不明白.有什么想法吗? 解决方案 我不确定您对链接到... 的文档不了解什么 该函数接受的唯一参数是要获取有关驱动器的根目录(包括落后倾斜).该函数返回一个值,指示哪种类型的驱动器.显示了一个图表,显示可能的返回值及其每个含义. 例如: GetDriveType(_T("C:\\")) // returns DRIVE_FIXED if C:\ is my hard drive GetDriveType(_T("A:\\")) // returns DRIVE_REMOVABLE if A:\ is my floppy drive GetDriveType(_T("D:\\")) // returns DRIVE_CDROM if D:\ is
许多USB设备包含一个唯一的序列号(实际上是Unicode字符串),主机可以与16位供应商和产品ID号一起使用,以唯一标识该设备. 我正在尝试弄清楚如何编写Windows应用程序,该应用程序能够显示系统附加到系统的所有USB人类界面设备的列表.该列表将对每个HID(包括系统键盘)有一行.供应商ID,产品ID和序列号的列表中将有列. 我可以通过返回HidD_GetHidGuid返回的GUID来获取USB HID的列表,并通过反复调用SetupDiEnumDeviceInterfaces来循环通过结果.然后,我可以致电SetupDiGetDeviceInterfaceDetail获取到达每个设备的路径,只要我小心地要求读取也不需要写许可,就可以使用CreateFile打开的路径,这对于系统键盘将被拒绝.从那里我可以通过调用HidD_GetAttributes. 来获取供应商和产品ID号 我遇到的问题是如何检索序列号字符串.当我搜索解决此问题的解决方案时,我发现了很多有关如何获
我的计算机上有很多硬盘驱动器(7). 不使用它们时,电源选项会在一段时间后将其发送入睡. 但是,因为一切都会发出很多噪音,所以我想在我想要的时候将它们发送入睡,而不仅仅是默认系统超时之后. 在Windows(XP及向上)上,最好在C#中, 中 如何通过代码发送磁盘进入睡眠? 预先感谢您的帮助... 解决方案 我不知道直接执行此操作的API,但是有些工具可以做到.我看到的一个是其他解决方案 如果您使用我不认为这是C#的项目. 其他解决方案 afaik,这是一个ATA命令,可以设置 *旋转时间8-这意味着驱动器本身会关闭.您可以使用IOCTL_ATA_PASS_TROUGH将命令直接发送到驱动器 - 但恐怕您不仅要将其设置为某个最小值(我不知道它是什么,但是应该在ATA规格中). 编辑:看起来像尊贵的 hdparm支持它,因此必须在ATA规格: -y 强迫IDE驱动器立即进入低功耗备用模式,通常会导致其旋转. -y强迫IDE驱动器立即
我想编程并阅读 linux上有各种perf_events系统可以执行此操作(以及perf实用程序,可以从未修改的程序外部进行). Windows中是否有此类内置设施?如果不存在内置设施,那么第二好的方法可能是使用第三方代码的另一种方法,但这并不需要我签署驾驶员. 解决方案 简短答案 不,Windows中没有内置设施.另外,Linux perf命令在Windows 10的Linux子系统上不起作用. 长答案 要访问这些计数器,您需要组合以下说明: rdpmc __readpmc //stackoverflow.com/a/8800266/1300910"> answer ) rdmsr __readmsr wrmsr __writemsr 不幸的是,这些说明只能从内核模式调用,因此您需要与驱动程序接口.虽然编写驾驶员代码本身很容易,但是签署驱动程序并不容易(尤其是当您提到的那样,您想作为一个个人做到这一点). 这就是为什么我建议您研究现
常规读者:SAGA™继续... 我的应用程序在我的开发机器上运行良好 - 该机器(5年前)是一个相当不错的游戏钻机.因此,它的64位具有2.2GHz时钟速,并具有2GB的内存. 但是,工作中的机器是标准的戴尔发行办公室计算机,甚至很难启动我的应用程序,更不用说运行它了. (解释...我可以想象人们对我尖叫:"您到底在做什么需要这样的规格?"好吧,我正在做很多实时图像分析和音频产生.因此.) 我们的团队有预算购买专用的笔记本电脑(需要便携式)来运行它.因此,现在我的任务是生成最低要求的规格. 我可以使用哪些工具来确定能够舒适运行我的应用程序的最低规格? 更新:到目前为止的答案,同时有用,更多地专注于分析的替代方案.因此,我放了一个赏金,看看是否有任何可以做这种事情的软件. 解决方案 您是否可以访问好的参考器?我认为值得了解您的应用程序中的性能瓶颈.如果事实证明您的应用程序是CPU绑定的,那么您显然需要考虑在高端处理器上挥霍.应用程序是多线程吗?如
我对这三个概念感到困惑. 我的理解是,Serial Port通常表示RS-232兼容端口(RS =推荐标准). USB代表Universal Serial Bus.因此,它的名称包含串行端口,它支持RS-232吗? Universal是什么意思? com端口是什么意思? 添加1 汉斯回答的一些理解: 为了减少努力,设备制造商通常也可以像串行端口设备一样行事.这取决于以下事实:许多OS和语言库已经包括串行端口通信支持.尽管这种支持与真实匹配的设备驱动程序不可媲美. 添加2 关于串行端口how-to how to . 和顺便说一句, Linux文档项目真的很有用. 解决方案 Serial port是一种使用UART芯片(通用异步接收器发射器)的设备.在过去,在过去的两种基本方法中,平行端口是另一种方式.串行很容易连接,不需要很多电线.如果您想快速行驶,那么平行是有用的,典型速度比串行速度快8倍,但是电缆和连接器很昂贵.平行I/O已完全从
我正在使用C++的Win32 API. 我想知道如何使用"设备路径"获得卷GUID. 我的设备看起来像这样: \\?\usb#vid_04f2&pid_0111#5&39fe81e&0&2#{a5dcbf10-6530-11d2-901f-00c04fb951ed} 谢谢. 解决方案 这将是具有设备实例ID usb\VID_04f2&PID_0111\5&39fe81e&0&2的设备.那可能是一个质量存储设备,也就是磁盘.现在,您遇到的问题是质量存储设备实际上没有驱动器字母.带有驱动器字母的磁盘上的音量.如果有两个分区,则单个USB质量存储设备可能具有两个驱动器字母.因此,没有直接的功能来获得 卷. 看来您需要枚举扎根于usb\VID_04f2&PID_0111\5&39fe81e&0&2的设备树,以找到具有"音量"设备类型的儿童.您得到的Dev_broadcast_deviceinterface将具有一个可以传递到GetVolumeNameForVo
我需要生成一个唯一的字符串,该字符串因机器而异,一个"设备指纹". 什么是... 自定义实施的可能方法? (我有一些想法,但我认为你们可能有更好的想法) 现有解决方案? (商业/非商业都可以接受) 解决方案 设备指纹刻印是一个复杂的话题,如果您想涵盖许多边缘案例(例如,硬件升级,操作系统升级等),并且如果您担心人们会花费能量来伪造已知的好设备指纹(良好的意思是您知道的指纹并获得了一些好处,例如软件使用权),或者创建一个您不了解的全新指纹(例如,指纹在某种形式的黑名单上,用户都希望创建不在黑名单上的设备的新设备ID). 有些事情是相当静态的,并且是简单指纹的合理基础. MAC地址最适合该类别,但也很容易更改.另外,某些计算机具有多个MAC地址(包括虚拟机的Mac地址),因此您需要处理这种复杂性.一些网络设备是短暂的,例如束缚手机. 计算机的其他方面更难(但绝对不可能)伪造,例如CPU信息,BIOS校验和硬盘驱动器序列号等.可能会更改(BIOS升级,新硬盘驱
这可能不被认为是直接与编程有关的,但我不知所措地知道其他地方要问.我尝试查看各种网站,但到目前为止,Google还不是我的朋友. 我很难找出我是否需要为我开发的设备可能连接到的各种Windows/Linux/Mac平台编写自己的设备驱动程序,还是标准驱动程序提供的功能. 我的设备是一个以COM:端口为端口的USB CDC(通信设备).它还包括一个电池充电器,一旦列举设备,就需要从USB连接器中抽出的完整5个单位负载(500mA)电源电流.我的问题是,如果主机中的USB驱动程序决定无法传递全部电源电流,那么它应该无法枚举设备. 如果作为后备,我提供了第二个配置集,该设置仅允许设备从接口连接器中绘制1个单位负载,将使用此配置来枚举设备. 解决方案 您需要为Windows编写一个.inf文件,该文件将您的设备VID绑定并与System usbser.sys一起使用.我的看起来像这样(根据需要替换您的Company,放入您的vid和pid(在十六进制中),然后将驱动程序线更
我正在研究软件,其中我需要访问CPU中的温度传感器并控制它们. 我不知道太多的硬件接口;我只知道如何与鼠标接口.我已经搜索过很多谷歌,但没有找到任何相关信息或代码. 我真的需要在软件中添加它.请指导我如何使用C ++或ASM对传感器的控制. 解决方案 没有特定的内核驱动器,除了通过WMI以外,很难查询温度.这是基于WMI的MSACPI_THERMALZONETEMPERATUR类的C代码: HRESULT GetCpuTemperature(LPLONG pTemperature) { if (pTemperature == NULL) return E_INVALIDARG; *pTemperature = -1; HRESULT ci = CoInitialize(NULL); // needs comdef.h HRESULT hr = CoInitializeSecurity(NULL, -1, NULL
我正在尝试将WM_KEYDOWN/WM_KEYUP对发送到通常不响应keybDinput结构的应用程序.我需要发送逃生键以及字母数字字符.由于MSDN仅提供有关使用硬件结构的模糊信息,因此我只能假设UMSG字段旨在保存WM_KEYDOWN/WM_KEYUP消息,而接下来的两个字段是用于LPARAM的Loword和Hiword(由几个位组成)定义扫描代码,无论密钥是否"重复",等等). ,但是经过几个小时的调整,我完全损失了如何正确模拟硬件击键.我该怎么做才能使它工作? 解决方案 事实证明,我实现了不当的键键键,并且还在单个呼叫中发送了每个击键.下面似乎适用于我的目标应用程序中的标准和扩展虚拟键: VOID SimulateKeystroke(USHORT vk, BOOL bExtended) { INPUT input = {0}; if(bExtended) input.ki.dwFlags = KEYEVENTF_EXTENDEDKEY;
我似乎无法通过搜索获得明确的答案. Win32爆炸操作硬件加速(GDI,而不是GDI+).我不知道这些功能如何与图形驱动程序接口.是否有任何功能来验证此功能,例如?getcaps?要使用特定的图形设备(WIN32图形设备)来查看这些功能是否正在接收硬件加速度? 解决方案 根据此,GDI仅在Windows 7上加速了硬件. 其他解决方案 如果GDI操作是硬件加速取决于驱动程序,但是Windows的所有版本都支持它. 支持它. Vista添加了一个名为Windows Display驱动程序模型(WDDM)的新驱动程序模型 Windows 7中添加了WDDM v1.1 %29.apx#gdi_rendering_in_windows_7" rel =" nofollow"> gdi硬件加速. *:可以在Vista上使用XP驱动程序,在我不知道的设置中GDI会发生什么. (也许您可以通过检查有一些内核上限您可以检查Win7,但我不知道是否可以检查Usermode.
在大多数较新的计算机上,您可以通过按下电源按钮几秒钟来关闭艰难的方式.但是我想完全防止这一点. 您可以防止Windows控制面板中的一些软件,例如睡眠,悬挂,冬眠和"按下电源按钮"事件;您还可以使用一些Win32和WDI编程来捕获和处理/拒绝这些事件,但是当您持续更长的时间时,它似乎不会停止机械功率. 我猜电源按钮与电源连接在一起,并且在将其固定几秒钟时永远不会等待操作系统?还是有某种方法可以通过代码来防止这种情况? 我是.NET开发人员. whooaaa ...!你们中的很多人真的争论不这样做 - "你不这样做 拥有我的计算机或我的操作系统", - 开发天网"等等:) 应用程序是高度定制的, 一些客户的封闭解决方案. 这是自定义的信息亭应用程序 在Windows XP上运行硬件 嵌入并使用触摸屏.它是 不是公开. 解决方案 参见与4秒规则有关的ACPI规格的第86页nofollow noreferrer"> https://uefi.org/sites/
这个问题是在我的工作面试中.我只是要看看我是否提供了所有细节... 解决方案 机械开关短路向上拉到地面的R1电阻端 一个特殊的多路复用器将其转换为消息,以减少电线数 嵌入在键盘中的CPU解释的消息 消息转换为USB协议消息,并将其调制为一系列的电动冲动,在零和5伏之间进行交替电压 USB接收中心测量样品线电压定期 主机集线器控制器将消息转换为数据 数据通过USB总线控制器进入PC,连接到PCIE总线,通过IRQ Notificaitons和DMA转移的组合,由Bus Driver发行 总线驱动程序将消息解释并沿驾驶员堆栈转发,最终到HID驱动程序 HID驱动程序会与Windows交谈,最终导致发送到属于Msword Process的窗口的窗口消息 WM_KEYDOWN将通过DefWindowProc()翻译为WM_CHAR.键关闭时,可能会创建多个WM_CHAR. Word应用程序捕获WM_CHAR以在文档模型中添加另一个字符,并发行UI 的重新渲染 U
我需要在我的多个过程中的应用程序中访问母体识别(串行,制造等). 我已经能够使用WMI成功查询此问题,但是我正在寻找替代方案. 如果您想知道情况: 我的应用程序行为取决于硬件配置,或者设置了特定环境变量(用于测试目的). bool IsVideoCardDisplay = ( getenv("Z_VI_DISPLAY") || !QueryWmiForSpecialBoard() ) ? false : true; 设置了环境变量时,不需要WMI查询 - 应用程序运行良好.但是,当不存在环境变量时,我的应用程序的某些组件在进行WMI查询时就无法启动.我怀疑WMI调用可能会有某些副作用(每个过程最多发生一次.这就是为什么我要寻找另一种方式. 解决方案 显然没有办法做到这一点,这是不幸的. 其他解决方案 在Vista+您可以使用 GetSystemFirmwareTable API访问SMBIOS表并将其解析以获取[可能可用]序列号和其他标识字符串和值.
我正在编写诊断程序(例如珠穆朗玛峰,但更简单),我需要知道硬盘驱动器的速度.我想知道: 1-每秒字节(读) 2-每秒字节(写) 3 -S.M.A.R.T数据 我想我可以使用WMI查询此类内容,但我不知道如何进行查询.我是否需要购买组件或获得OpenSOURCE都没关系.我也知道Windows Perfmoon能够做到这一点,但是我无法使用它. 解决方案 拉斐尔要获得S.M.A.R.T数据,您可以使用WMI或Windows API. 使用WMI WMI classes to obtain S.M.A.R.T 数据是 msstoragedriver_atapismartdata msstoragedriver_failurepredictdata msstoragedriver_failurePredictStatus msstoragedriver_failurePredictThrestholds msstoragedriver_scsi