小编gog*_*gog的帖子

为什么在显示表单时突出显示(选中)TextBox中的文本?

我有一个包含TextBoxC#的表单,我将其设置为字符串,如下所示:

textBox.Text = str;
Run Code Online (Sandbox Code Playgroud)

显示表单时,为什么texbox中的文本会突出显示/选中?

c# textbox winforms

76
推荐指数
3
解决办法
8万
查看次数

如何在给定设备实例ID的情况下可靠,快速地获取网卡的MAC地址

给定网卡的设备实例ID,我想知道它的MAC地址.集成Intel千兆卡的系统上的设备实例ID示例:

PCI\VEN_8086&DEV_10CC&SUBSYS_00008086&REV_00\3&33FD14CA&0&C8
Run Code Online (Sandbox Code Playgroud)

到目前为止,我使用的算法的工作原理如下:

  1. 打电话SetupDiGetClassDevsDIGCF_DEVICEINTERFACE.
  2. 调用SetupDiEnumDeviceInfo以获取返回的设备SP_DEVINFO_DATA.
  3. 调用SetupDiEnumDeviceInterfacesGUID_NDIS_LAN_CLASS得到一个设备接口.
  4. 调用SetupDiGetDeviceInterfaceDetail此返回的设备接口.这使我们将设备路径作为字符串: \\?\pci#ven_8086&dev_10cc&subsys_00008086&rev_00#3&33fd14ca&0&c8#{ad498944-762f-11d0-8dcb-00c04fc3358c}\{28fd5409-15bd-4c06-b62f-004d3a06f852}
  5. 此时我们有一个网卡驱动程序接口的地址.CreateFile使用#4的结果打开它.
  6. 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产生其涉及的一个列表InstanceNameDeviceName,像\DEVICE\{28FD5409-15BD-4C06-B62F-004D3A06F852}.我不知道如何从DeviceName即插即用设备实例ID(PCI\VEN_8086...... …

c++ windows wmi networking device-instance-id

9
推荐指数
1
解决办法
6014
查看次数

托管C++中的数组初始化

我希望声明并初始化一维托管数组.

如果它是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)

这有两个问题:

  1. 它更冗长
  2. 它需要我预先声明数组的大小,这对我的代码生成器来说是不方便的

Managed C++中的GC数组是否有"数组初始化"语法?什么是正确的语法?是否有关于此问题和其他类似问题的良好网络链接?

.net managed-c++ c++-cli

7
推荐指数
1
解决办法
2万
查看次数

从设备实例路径字符串获取设备实例 DWORD

我得到一个设备实例路径,例如

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。

c++ windows winapi device-driver device-instance-id

5
推荐指数
1
解决办法
3573
查看次数

我可以使用什么字符来显示“四个箭头图标”?

我可以使用哪个Unicode字符显示此字符?

四个箭头图标

我目前需要它来编写.doc文档,但我想知道是否有Unicode字符,以便在应用程序中将其打印出来,或者某些字体中是否包含此字形。

unicode icons ascii symbols

5
推荐指数
1
解决办法
936
查看次数

Windows 上的 USB 实例 ID 对于设备来说是唯一的吗?

我正在尝试在 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?

我是否有机会唯一标识特定设备(不仅仅是型号)?

windows usb device-instance-id

4
推荐指数
1
解决办法
6412
查看次数

获取 USB 设备的父信息 C++

我正在开发一个 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)

c++ windows winapi device-instance-id

4
推荐指数
1
解决办法
2443
查看次数

驱动器号到设备实例ID

如何从驱动器号获取设备实例ID?

我的过程从设备到达消息开始。我已经成功地从到达消息中获取了驱动器号并打开了DVD托盘。

我搜索了各种Setup API项目;但是我还没有发现任何让我从驱动器号到设备实例ID的东西。

使用C#或VB.NET的解决方案将是理想的,但是只要我能看到API调用,我愿意从任何其他语言中找出解决方案。

提前致谢...

windows device hardware-interface device-instance-id

3
推荐指数
1
解决办法
3078
查看次数

在HTML表单中执行操作之前先调用JavaScript函数

我可以拦截表单提交操作并执行一些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)

html javascript

3
推荐指数
1
解决办法
3336
查看次数