【发布时间】:2014-09-05 13:07:12
【问题描述】:
如何找到串口鼠标占用的串口
这是我在C# 中检测鼠标的方法(改编自answer 的代码)
var info = IntPtr.Zero;
try
{
var guid = new Guid("{4d36e96f-e325-11ce-bfc1-08002be10318}"); // mouses
info = SetupDiGetClassDevsW(ref guid, null, IntPtr.Zero, 0);
if ((int)info == -1) // INVALID_HANDLE_VALUE
throw new Exception(string.Format("Error({0}) SetupDiGetClassDevsW", Marshal.GetLastWin32Error()));
// enumerate mouses
var device = new SP_DEVINFO_DATA();
device.cbSize = (UInt32)Marshal.SizeOf(device);
for (uint i = 0; ; i++)
{
// get device info
if (!SetupDiEnumDeviceInfo(info, i, out device))
{
var error = Marshal.GetLastWin32Error();
if (error == 259) // ERROR_NO_MORE_ITEMS
break;
else
throw new Exception(string.Format("Error({0}) SetupDiEnumDeviceInfo", error));
}
string id = GetStringPropertyForDevice(info, device, 1); // SPDRP_HARDWAREID
if (id != null && id.Contains("*PNP0F09")) // Microsoft BallPoint Serial Mouse
{
// ...
// here I want to check com-port, how?
// ...
}
}
}
finally
{
if (info != IntPtr.Zero)
SetupDiDestroyDeviceInfoList(info);
}
编辑
删除C# 标签。寻找一般信息(任何语言)。
【问题讨论】:
-
您是否尝试将 SPDRP_LOCATION_INFORMATION 或 SPDRP_LOCATION_PATHS 传递给您的 GetStringPropertyForDevice 函数? (来自msdn.microsoft.com/en-us/library/ff551967.aspx)
-
@SimonMourier,我收到了
ERROR_INVALID_DATA(我认为没问题,它只是意味着这个设备没有这样的属性)SPDRP_LOCATION_INFORMATION(0xD)和SPDRP_LOCATION_PATHS(@ 987654331@). -
您所追求的属性实际上应该显示在“详细信息”选项卡中。你能检查它在你的配置中吗?
-
@SimonMourier,“详细信息”选项卡中的所有属性都不包含
com6之类的内容。我不知道 Windows 如何为此设备显示com6。两者都不相反:如果我在尝试打开com6时遇到UnauthorizedAccessException异常(访问被拒绝 blablabla),则无法查看谁在使用它。 -
没有评论的反对者应该去森林死。问题(截图)很清楚,问题似乎很合理:如何获取 Windows 为设备显示的不明显可获取的信息。