![>](style_images/2/nav_m.gif)
![]() |
NetLab · Rules · Torrent Tracker · Have a problem? · Eng/Rus |
![]() ![]() ![]() ![]() ![]() |
Welcome Guest ( Log In | Register | Validation ) | Resend Validation Email |
![]() |
|
Posted: 24-08-2010, 19:53
(post 1, #979408)
|
||
Daysleeper ![]() Group: Privileged Posts: 21936 Warn:0% ![]() |
Задали мне такую вот задачку - написать программу под Винды, которая отслеживает когда пользователь подключает USB хард или мемори стик. Если такой диск подключен, надо показать менюшку типа "чего дальше делать-то?". Если диск вытащили - сообщение типа "какого хрена, собственно?". Кроме того, программулина при старте должна запускать другую программу и отслеживать ее состояние. Если пользователь ее закрыл, то надо ее перезапустить. Запустить-то просто, а вот отслеживать... В Юниксах достаточно просто (раз в секунду проверять хэндлер процесса на живучесть), а в Винде как? Я в этом ни в зуб ногой, поскольку всегда писал софт без операционки вообще на всяческих микропроцессорах. А тут такое... Прога должна быть сделана до конца недели. Помогите плиз ![]() |
||
|
Posted: 24-08-2010, 20:10
(post 2, #979413)
|
||
proRock ![]() Group: Netlab Soldier Posts: 25108 Warn:0% ![]() |
А отказаться ты конечно не мог? ![]() До конца недели... наверно только содрать код с какого freeware. ![]() |
||
|
Posted: 24-08-2010, 20:16
(post 3, #979414)
|
||
Daysleeper ![]() Group: Privileged Posts: 21936 Warn:0% ![]() |
Я там только начал работать (правда, уже по сторонам смотрю, бо надоело всякой х-ней заниматься). Какую-нибудь бетку сварганить и то хлеб был бы. А тут еще этот чертов Visual Studio, с которым я никогда не работал. Если надо было что-то по-быстрому накропать для Винды, брал C++ Builder. |
||
|
Posted: 24-08-2010, 20:23
(post 4, #979417)
|
||
proRock ![]() Group: Netlab Soldier Posts: 25108 Warn:0% ![]() |
![]() |
||
|
Posted: 24-08-2010, 20:24
(post 5, #979418)
|
||
Daysleeper ![]() Group: Privileged Posts: 21936 Warn:0% ![]() |
Такая функция есть и даже сигнал есть. Но мне надо как-то этот сигнал связать с прогой. И вот как это сделать - я не знаю. |
||
|
Posted: 24-08-2010, 20:26
(post 6, #979419)
|
||
Part time flamer Group: Read Only Posts: 7784 Warn:0% ![]() |
Как правильно это делать не знаю если честно, по моему там надо отслеживать какой то эвент по басу, но нам когда надо было просто мониторили ветку в регистре. А вообще предложи им купить прогу с http://safelyremove.com/ |
||
|
Posted: 24-08-2010, 20:43
(post 7, #979423)
|
||
Daysleeper ![]() Group: Privileged Posts: 21936 Warn:0% ![]() |
Прога мне не поможет. Дело в том, что я должен написать полную замену шелла в Винде (та, которая Embedded). Эмбеднутого там, на самом деле, нифига нет, но шелл сменить можно. И вот руководство хочет чтобы я его написал. Первую версию-то я написал давно и вроде как даже работает. Но там я не отслеживал USB. |
||
|
Posted: 24-08-2010, 23:45
(post 8, #979502)
|
||
Visionary Group: Members Posts: 5181 Warn:0% ![]() |
|||
|
Posted: 25-08-2010, 03:05
(post 9, #979518)
|
||||||
Мышъ с сыром Group: Prestige Posts: 5279 Warn:0% ![]() |
Запускаешь процесс как
где первый параметр одно из: P_WAIT, P_NOWAIT, P_DETACH. Если запускать процесс в моде P_WAIT, то твоя программа зависнет пока не завершится запущенная. Остальные 2 отвязывают запущенный процесс. Вместо spawnv() можно использовать любую сишную posix функцию spawn*(), ну или напрямую использовать WIN32API -- ::CreateProcess(). spawnv() возвращает пид, а не хэндл, как CreateProcess(), поэтому методы проверки на живучесть разные: Для CreateProcess():
Для spawn*() всё тоже, но сначала надо получить хэндл:
|
||||||
|
Posted: 25-08-2010, 20:05
(post 10, #979647)
|
||
Daysleeper ![]() Group: Privileged Posts: 21936 Warn:0% ![]() |
izanoza Спасибо. Я, кстати, и так запускал процесс через spawn с P_NOWAIT. Только не догадался как этот pid правильно использовать. ![]() Set С USB я уже разобрался, оказалось очень просто. Надо было отслеживать DBT_DEVICEARRIVAL и DBT_DEVICEREMOVAL. В итоге все работает без проблем. Всем спасибо за помощь. Прога работает, босс счастлив до охренения. Лучше бы он лицензию на Visual C++ купил, а то редактировать ресурсы вручную (так в Express) несколько муторно. |
||
![]() |