我有一个包含TextBoxC#的表单,我将其设置为字符串,如下所示:
textBox.Text = str;
Run Code Online (Sandbox Code Playgroud)
显示表单时,为什么texbox中的文本会突出显示/选中?
给定网卡的设备实例ID,我想知道它的MAC地址.集成Intel千兆卡的系统上的设备实例ID示例:
PCI\VEN_8086&DEV_10CC&SUBSYS_00008086&REV_00\3&33FD14CA&0&C8
Run Code Online (Sandbox Code Playgroud)
到目前为止,我使用的算法的工作原理如下:
SetupDiGetClassDevs给DIGCF_DEVICEINTERFACE.SetupDiEnumDeviceInfo以获取返回的设备SP_DEVINFO_DATA.SetupDiEnumDeviceInterfaces与GUID_NDIS_LAN_CLASS得到一个设备接口.SetupDiGetDeviceInterfaceDetail此返回的设备接口.这使我们将设备路径作为字符串: \\?\pci#ven_8086&dev_10cc&subsys_00008086&rev_00#3&33fd14ca&0&c8#{ad498944-762f-11d0-8dcb-00c04fc3358c}\{28fd5409-15bd-4c06-b62f-004d3a06f852}CreateFile使用#4的结果打开它.DeviceIoControl使用IOCTL_NDIS_QUERY_GLOBAL_STATS和OID 调用OID_802_3_PERMANENT_ADDRESS以获取MAC地址.这通常有效,并已在相当多的机器上成功使用.但是,似乎很少有机器的网络驱动程序DeviceIoControl在步骤#6 中没有对请求做出正确响应; 即使将网卡驱动程序更新到最新版本后问题仍然存在.这些是较新的基于Windows 7的计算机.具体来说,DeviceIoControl成功完成,但返回零字节而不是包含MAC地址的预期六个字节.
一条线索似乎在MSDN页面上IOCTL_NDIS_QUERY_GLOBAL_STATS:
此IOCTL将在以后的操作系统版本中弃用.您应该使用WMI接口来查询微型端口驱动程序信息.有关更多信息,请参阅NDIS对WMI的支持.
- 也许更新的网卡驱动程序不再实现这个IOCTL?
那么,我应该怎么做呢?是否有可能在我的方法中存在疏忽并且我做了一些稍微错误的事情?或者我需要采取更加不同的方法吗?一些替代方法似乎包括:
Win32_NetworkAdapterWMI类:提供所需信息但由于性能糟糕而被拒绝.请参阅Win32_NetworkAdapter WMI类的快速替换以获取本地计算机的MAC地址MSNdis_EthernetPermanentAddressWMI类:似乎是WMI的替代品,IOCTL_NDIS_QUERY_GLOBAL_STATS并直接从驱动程序查询OID - 这个工作在麻烦的网络驱动程序上.不幸的是,返回的类实例只提供MAC地址和InstanceName,这是一个本地化的字符串Intel(R) 82567LM-2 Gigabit Network Connection.查询MSNdis_EnumerateAdapter产生其涉及的一个列表InstanceName到DeviceName,像\DEVICE\{28FD5409-15BD-4C06-B62F-004D3A06F852}.我不知道如何从DeviceName即插即用设备实例ID(PCI\VEN_8086...... …我希望声明并初始化一维托管数组.
如果它是C#代码,我会这样写:
VdbMethodInfo[] methods = new VdbMethodInfo[] {
new VdbMethodInfo("Method1"),
new VdbMethodInfo("Method2")
};
Run Code Online (Sandbox Code Playgroud)
我想在托管C++中写(实际上,我正在编写一个程序生成)同样的东西...
到目前为止,我有:
typedef array<VdbMethodInfo^, 1> MethodArray;
// How do I avoid pre-declaring the size of the array up front?
MethodArray^ methods = gcnew MethodArray(2);
methods[0] = gcnew VdbMethodInfo("Method1");
methods[1] = gcnew VdbMethodInfo("Method2");
Run Code Online (Sandbox Code Playgroud)
这有两个问题:
Managed C++中的GC数组是否有"数组初始化"语法?什么是正确的语法?是否有关于此问题和其他类似问题的良好网络链接?
我得到一个设备实例路径,例如
L"\\\\?\\USB#VID_0403&PID_6001#6&2cc2d230&0&2#{219d0508-57a8-4ff5-97a1-bd86587c6c7e}"
Run Code Online (Sandbox Code Playgroud)
来自IWDFRemoteInterfaceInitialize::RetrieveSymbolicLink。
但对于CM_Get_Parent我需要设备的 DEVINST/DWORD 这让我发疯。
我试过例如
instancePath = L"\\\\?\\USB#VID_0403&PID_6001#6&2cc2d230&0&2#{219d0508-57a8-4ff5-97a1-bd86587c6c7e}";
HDEVINFO hinfo = SetupDiGetClassDevs(NULL, instancePath, NULL, DIGCF_DEVICEINTERFACE | DIGCF_ALLCLASSES);
Run Code Online (Sandbox Code Playgroud)
和其他一些SetupDi...巫毒没有成功。非常感谢任何帮助,因为 - 正如所提到的 - 我现在几个小时都无法解决这种疯狂问题,尽管有数十个相反的示例(devid->实例路径),但我还没有找到任何实例路径->DEVINST。
我正在尝试在 Windows 系统上唯一地识别 USB 设备。由于序列号是可选的(并且在大多数设备上为空),我正在查看实例 ID。的领域,就像USB\VID_03F0&PID_094A\6&24b73976&0&2。
我已经知道如果我将同一设备插入不同的端口,这个 ID 会发生变化,但这对我来说没问题。问题是:如果我使用相同的设备(在我的示例中为鼠标)并将其插入,它会获得相同还是不同的实例 ID?
我做了一些研究,似乎没有人完全知道 VID 和 PID 背后的部分是什么。它们似乎可以识别端口和/或集线器,但是如果我将不同的设备插入同一个插槽,我不仅会看到不同的 VID 和 PID,还会看到不同的垃圾。例如,这是插入同一端口的键盘:USB\VID_046D&PID_C328&MI_00\7&3f9ff46&0&0000
Microsoft 文档和此处的相关问题均未回答此问题。
如果我有两个相似的鼠标(或键盘,或其他),即相同的制造商和型号,如果我将它们插入相同的端口,它们会获得相同或不同的实例 ID?
我是否有机会唯一标识特定设备(不仅仅是型号)?
我正在开发一个 MFC 工具,用于检查已连接 USB 设备的一些驱动程序信息,例如位置信息、父设备、硬件 ID 等。我已经获得了我想要的所有其他信息,但我一直在获取设备父设备信息。
我已经使用Setupapi.dll在我的代码中获取设备信息。使用SetupDiGetClassDevs函数获取 USB 设备信息句柄。使用SetupDiEnumDeviceInfo函数获取特定设备信息数据。使用SetupDiGetDeviceRegistryProperty函数获取设备描述和硬件 ID 。
// List all connected USB devices
hDevInfo = SetupDiGetClassDevs(pClassGuid, pszEnumerator,
NULL, pClassGuid != NULL ? DIGCF_PRESENT : DIGCF_ALLCLASSES |
DIGCF_PRESENT);
// Get device info data
SetupDiEnumDeviceInfo(hDevInfo, i, &DeviceInfoData);
// Get device instance id
CM_Get_Device_ID(DeviceInfoData.DevInst, szDeviceInstanceID, MAX_PATH,
0);
// Get device description
SetupDiGetDeviceRegistryProperty(hDevInfo, &DeviceInfoData,
SPDRP_DEVICEDESC,
&dwPropertyRegDataType, (BYTE*)szDesc, sizeof(szDesc), &dwSize);
#define DEFINE_DEVPROPKEY(name, l, w1, w2, b1, b2, b3, b4, b5, b6, b7, …Run Code Online (Sandbox Code Playgroud) 如何从驱动器号获取设备实例ID?
我的过程从设备到达消息开始。我已经成功地从到达消息中获取了驱动器号并打开了DVD托盘。
我搜索了各种Setup API项目;但是我还没有发现任何让我从驱动器号到设备实例ID的东西。
使用C#或VB.NET的解决方案将是理想的,但是只要我能看到API调用,我愿意从任何其他语言中找出解决方案。
提前致谢...
我可以拦截表单提交操作并执行一些JavaScript函数,然后再将其发送到发布/获取吗?
例如:
<form action="something.php" method="post">
<input type="text" value="Some data"/>
<input ... ... ... />
<input type="submit" value="Send"/>
</form>
Run Code Online (Sandbox Code Playgroud)
单击提交按钮时,有什么方法可以在调用动作之前调用JavaScript函数?
javascriptFunction();
//now go to form action...
Run Code Online (Sandbox Code Playgroud)