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

时间:2013-08-27 17:17:19

标签: 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

也许我正以错误的方式接近这一点。建议?

1 个答案:

答案 0 :(得分:8)

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

为您的设备类型和类注册自动播放处理程序。这与旧的AutoRun功能不同,旧功能会自动执行插入文件系统上的程序。

您可以从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用作操作系统和程序之间的代理。