我正在编写一个小型C#应用程序,以便在检测到其他鼠标设备时禁用设备(我的笔记本电脑触摸板),如果未检测到鼠标,则再次启用触摸板.我甚至无法在设备管理器中禁用触摸板(它在默认的鼠标类驱动程序上运行).
我正在进入设备驱动程序开发,所以我想也许我可以编写一个小的过滤器驱动程序,它只接受IOCTL来启用和禁用在设备堆栈上传递鼠标事件消息,并通过原始PDO从用户模式获取消息.但是,我问了这个问题,并且有人建议我可以通过SetupDi ..函数在usermode中执行此操作.这将是非常好的,因为这种原始的PDO通信方法是一个可以使用的PITA.
我以前只使用过SetupDiGetClassDevs,而且有很多这样的人,对于这部分Win32 API有更多经验的人可以快速告诉我应该调用什么来停止/禁用鼠标设备或其界面,或者是否有在框架的黑暗角落某处可以做到这一点(也许在WMI?).
更新(2009年9月24日)我想出了如何使用过滤器驱动程序执行此操作并发布了我在原始问题上的操作方式.我仍然想知道是否可以直接从Win32启用或禁用设备,如果可以,如何 - 所以我将打开这个问题.
有没有办法从C#.NET禁用系统设备.
当您转到设备管理器并以此方式禁用设备时,基本上是模拟的吗?
我假设有一个我可以调用的WinAPI函数,但我不知道它是哪一个?
我需要这样做的原因是我需要在再次启用设备后禁用并直接启用.
我需要在Windows XP和Vista(x86和x64)中工作.我看了一下名为"DevCon"的东西,但它似乎不适用于Vista x64.
谢谢.
有关答案,请参阅此处:如何以编程方式禁用系统设备?
所以我们有一个简单的C++ win32控制台应用程序.我们想要的只是打印网络摄像机列表和其他可用的视频捕获设备.我们想尽可能多地使用windows apis - 毕竟没有外部库 - 我们想要的就是打印出一个列表 - 不要飞到月球上!)怎么做这样的事情?
我自己的研究:我发现这个官方的msdn样本,但我仍然没有得到如何输出设备列表到屏幕=((对不起 - 我是C++的新手)
......还有一些研究......
在一个关于主题的最简单的ms样本中找到了这个
HRESULT OnInitDialog(HWND hwnd, ChooseDeviceParam *pParam)
{
HRESULT hr = S_OK;
HWND hList = GetDlgItem(hwnd, IDC_DEVICE_LIST);
// Display a list of the devices.
for (DWORD i = 0; i < pParam->count; i++)
{
WCHAR *szFriendlyName = NULL;
hr = pParam->ppDevices[i]->GetAllocatedString(
MF_DEVSOURCE_ATTRIBUTE_FRIENDLY_NAME,
&szFriendlyName,
NULL
);
if (FAILED(hr))
{
break;
}
int index = ListBox_AddString(hList, szFriendlyName);
ListBox_SetItemData(hList, index, i);
CoTaskMemFree(szFriendlyName);
}
Run Code Online (Sandbox Code Playgroud)
看起来它应该做的工作,但我不知道如何将其包含在简单的命令行应用程序中,以便输出数据...
也来自这个系列: