gpt4 book ai didi

c# - C# 的 C 库从操作系统队列中删除消息

转载 作者:太空宇宙 更新时间:2023-11-04 02:13:24 27 4
gpt4 key购买 nike

我一直在用 c# 开发一个应用程序,我想在插入 USB 大容量存储器时进行一些验证。

问题是在验证期间我想从消息队列中取出大容量存储的消息。

一个人告诉我,你不能在 C# 中做到这一点,而只能在使用汇编语言的 C 中做到这一点。

你们能帮我找到一个 C 库,我可以使用 C# 从操作系统消息队列中提取消息吗?

protected override void WndProc(ref Message m)
{
switch (m.Msg)
{

case Win32.WM_DEVICECHANGE:


//OnDeviceChange(ref m);

break;
}
base.WndProc(ref m);

}

void OnDeviceChange(ref Message msg)
{
int wParam = (int)msg.WParam;

if (wParam == Win32.DBT_DEVICEARRIVAL)
{
label1.Text = "Arrival";
//MessageBox.Show("" + wParam);
//msg = Message.Create(new IntPtr(),1,new IntPtr(),new IntPtr());
}
else if (wParam == Win32.DBT_DEVICEREMOVECOMPLETE) label1.Text =
"Remove";
}

我已经这样做了,但它只是告诉你发生了什么。

我想关闭消息,这样操作系统就不会知道设备的存在,然后在验证通过后再次打开消息。

最佳答案

不会发生的,伙计。当您收到 Win32 WM_DEVICECHANGE 消息时,设备已经加载很多。内核已经意识到该设备,加载了驱动程序,并且在这种情况下作为大容量存储设备,已经创建了一个卷。这就是所有(大部分)内核模式事件。然后 Win32(用户模式)将此消息广播到所有顶级窗口。您根本无法在 Win32 级别使用任何语言和这种 WM_DEVICECHANGE 机制来做到这一点。

为此,您将不得不编写一个设备驱动程序。它们是用 C 编写的,在内核模式下运行,并且比简单的 C# 应用程序更难实现。我建议您寻找一些其他解决方案来完成您正在尝试做的事情。哪个是……什么,顺便说一句?

"else it discards the message so that the operating system won't know about it"

抱歉,您完全没有捕获要点。 WM_DEVICECHANGE 从操作系统(即 Win32 子系统)发送到所有顶层窗口。它只是一个通知,没有与此消息关联的控件。 WM_DEVICECHANGE 对您阻止访问设备的目标没有帮助。就像我说的,为此你需要一个设备驱动程序,很可能是一个文件系统过滤驱动程序。您将向该驱动程序发送一个 IOCTL(从用户模式)以允许访问该设备。

关于c# - C# 的 C 库从操作系统队列中删除消息,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10740070/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com