windows - 连接 USB 设备时启动我的应用程序

标签 windows delphi focus focusmanager

我需要在连接 USB 设备后启动我的应用。

我的第一个尝试是一个后台应用程序,它会注意何时插入 USB 设备。当它注意到我们的设备已连接时,它会调用 ShellExecute() 并启动我们的应用程序。

这在 Windows 8 中运行良好。假设我们在 Windows 8 中的“开始”屏幕上。在这种情况下,应用程序在后台启动,而开始屏幕仍然在前面。

我认为这是一个“焦点”问题,因为我实际上希望做的是从“开始”屏幕“窃取焦点”。

http://blogs.msdn.com/b/oldnewthing/archive/2009/02/20/9435239.aspx

由于我的后台应用程序没有焦点(开始屏幕有焦点;此外,我的应用程序没有 UI),它无法将焦点移交给我的前台应用程序。

总的来说,我讨厌窃取焦点。启动用户想要使用的应用程序对我们的用户有很大帮助。

我该如何解决这个问题?也许答案是以编程方式要求开始屏幕启动我的应用程序,但我看不到这样做的方法:

http://social.msdn.microsoft.com/Forums/windowsdesktop/en-US/9ed23f32-0708-48a8-9ff7-5fce6dbe123f/windows-8-start-screen-api

也许我处理这个问题的方式不对。有什么建议吗?

最佳答案

你的做法是错误的。虽然您可以编写一个程序来持续监控 USB 端口以检测何时连接,但没有必要。操作系统已经在这样做了。

为您的设备类型和类别注册一个自动播放处理程序。这与旧的自动运行功能不同,后者会自动执行在插入的文件系统上找到的程序。

您可以从 overview of the feature from the November 2001 issue of MSDN Magazine 开始.

您的处理程序将是一个 COM DLL。你可以register the DLL as a handler, and register the handler with events you want to handle .您可以在 DLL 中执行所有操作,也可以将大部分功能放在您的应用程序中,只使用 DLL 作为操作系统和您的程序之间的代理。

关于windows - 连接 USB 设备时启动我的应用程序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18471739/

相关文章:

c++ - getch 结合 while-loop 两次触发 loopcontent

delphi - TSpeedbutton 中的图像与 TImageList

c++ - Delphi:使用调试器调用 C dll 函数需要 15 秒,没有调试器需要 0.16 秒。为什么?

德尔福日/周计划器

javascript - 使 Div 在可滚动溢出中聚焦并可见

有/没有 cmd.exe 的 Java 子进程命令行执行

python - subprocess.check_output 参数中的变量? [Python]

windows - 如何自动提升我的批处理文件,以便它在需要时从 UAC 管理员权限请求?

javascript - 查找具有焦点的表单元素

wpf - WPF焦点,无法同时获得逻辑和键盘焦点