Запуск моего приложения при подключении USB-устройства

Мне нужно запустить мое приложение, когда наше USB-устройство подключено.

Моя первая попытка сделать это — фоновое приложение, которое обращает внимание на подключение USB-устройств. Когда оно замечает, что наше устройство подключено, оно вызывает ShellExecute() и запускает наше приложение.

Это прекрасно работает, за исключением Windows 8. Предположим, что мы находимся на экране «Пуск» в Windows 8. В этой ситуации приложение запускается в фоновом режиме, а начальный экран остается впереди.

Я думаю, что это проблема «фокуса», так как на самом деле я надеюсь «украсть фокус» с начального экрана.

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

Поскольку у моего фонового приложения нет фокуса (фокус есть на начальном экране; кроме того, у моего приложения нет пользовательского интерфейса), оно не может передать фокус моему приложению переднего плана.

Позвольте мне сказать, что в целом я ненавижу кражу фокуса. Запуск приложения, которое пользователь хочет использовать, очень помогает нашим пользователям.

Как я могу решить эту проблему? Возможно, ответ заключается в том, чтобы программно попросить начальный экран запустить мое приложение, но я не вижу способа сделать это:

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

Может быть, я подхожу к этому неправильно. Предложения?


person X-Ray    schedule 27.08.2013    source источник


Ответы (1)


Вы идете об этом неправильно. Хотя вы можете написать программу для постоянного контроля USB-портов, чтобы определить, когда что-то подключено, в этом нет необходимости. В любом случае ОС уже это делает.

Зарегистрируйте обработчик автозапуска для вашего типа и класса устройства. Это отличается от старой функции автозапуска, которая автоматически запускала программы, найденные во вставленной файловой системе.

Вы можете начать с обзора функции из ноябрьского выпуска журнала MSDN Magazine за 2001 г..

Ваш обработчик будет COM DLL. Вы можете зарегистрировать DLL в качестве обработчика и зарегистрировать обработчик событий, которые вы хотите обрабатывать< /а>. Вы можете либо выполнять все в DLL, либо вы можете поместить большую часть функций в свое приложение и просто использовать DLL в качестве прокси между ОС и вашей программой.

person Rob Kennedy    schedule 27.08.2013