:: Visual Foxpro, Foxpro for DOS
Отследить подключение флешки
Тьма
Автор

Сообщений: 21
Дата регистрации: 12.04.2017
Доброго времени суток уважаемые форумчане!
Необходимо отследить событие подключения к компу флешки
и запустить программу, соответствующую этому событию.
Поиском по форуму ничего не нашел.
Подскажите, пожалуйста, в какую сторону копать?
Спасибо.
Ratings: 0 negative/0 positive
Re: Отследить подключение флешки
of63

Сообщений: 25244
Откуда: Н.Новгород
Дата регистрации: 13.02.2008
"авторан" на флешке - это не то?
Ratings: 0 negative/0 positive
Re: Отследить подключение флешки
akvvohinc

Сообщений: 4216
Откуда: Москва
Дата регистрации: 11.11.2008
Цитата:
Подскажите, пожалуйста, в какую сторону копать?
Первое, что приходит в голову - используя таймер, вызывать с выбранной периодичностью некую функцию, которая с помощью:
1) родной функции DRIVETYPE()
2) WinAPI
3) или даже консольной команды типа
wmic logicaldisk get

будет возвращать признак подключения (наличия) нового съемного носителя и если .T., то делать то, что требуется.
Не знаю, правда, можно ли таким образом отличить именно флешку от других съемных носителей, картридера, например.

У меня функция DRIVETYPE() для флешки возвращает 2 (Floppy disk согласно Help),
а подключенные к USB внешние HDD - 3.
А если DRIVETYPE() не поможет, то пробовать другие способы.

Кроме того, всё равно на "нужной" флешке должно быть что-то - имя, или определенное содержимое, которое бы отличало её хотя бы от других флешек.
И если это так, то задача идентификации нужного устройства упрощается.



Исправлено 2 раз(а). Последнее : akvvohinc, 03.11.22 02:18
Ratings: 0 negative/1 positive
Re: Отследить подключение флешки
Тьма
Автор

Сообщений: 21
Дата регистрации: 12.04.2017
2 akvvohinc: Спасибо за отклик.
Но я неправильно сформулировал задачу. Мне кажется, что Ваши предложения
ведут к перебору подключенных устройств памяти в поисках необходимого носителя.
Мне же желательна (очень!) следующая реакция на событие:
На экране форма со всякими гридами, кнопками и т.д.
Пользователь вставляет флешку и по этому событию вызывается что-нибудь типа
формы или сообщения. А далее дело техники.
Нутром чую, что дело идет в сторону WinAPI (как Вы и упомянули), но я,
к сожалению, API не пробовал от слова "ни разу". Буду пробовать все предложения.
Спасибо.
Ratings: 0 negative/0 positive
Re: Отследить подключение флешки
akvvohinc

Сообщений: 4216
Откуда: Москва
Дата регистрации: 11.11.2008
Тьма
Пользователь вставляет флешку и по этому событию вызывается что-нибудь типа формы или сообщения.
Я не знаю такого события в Фоксе, поэтому предложил таймер.

Тьма
Мне же желательна (очень!) следующая реакция на событие:
На экране форма со всякими гридами, кнопками и т.д.
Пользователь вставляет флешку и по этому событию вызывается что-нибудь типа
формы или сообщения.
В предложенном мною варианте так и будет - с указанной вами периодичностью будет срабатывать событие Timer объекта таймер.
В нем вы будете анализировать (перебором устройств), не появилась ли ваша флешка и так далее.

Никакой особой нагрузки на комп такой способ не окажет - пользователь ничего не заметит.
Но не стоит, наверно, устанавливать интервал для таймера в 1 миллисекунду.
Сами подберёте тот, который вас устроит.

В любом случае, прежде, чем начинать копать в сторону WinAPI, советую попробовать этот вариант - здесь дел-то на пару минут:
otimer = CREATEOBJECT('timer1')
otimer.interval = 1*1000 && 1 сек.
ON KEY LABEL ESC CLEAR EVENTS
READ EVENTS
ON KEY LABEL ESC
DEFINE CLASS timer1 AS Timer
PROCEDURE timer
LOCAL code,driveletter,drivetype
FOR code=65 TO 90 && коды букв устройств от A до Z
driveletter = CHR(code)
drivetype = DRIVETYPE(driveletter)
IF drivetype=2 && Floppy disk (для флешки у меня так)
WAIT WINDOW 'Устройство '+driveletter+': - это флешка (нажмите эникей для выхода)'
CLEAR EVENTS
EXIT
ELSE
WAIT WINDOW 'Ждем флешку... Esc - выход' NOWAIT
ENDIF
ENDFOR
ENDPROC
ENDDEFINE



Исправлено 1 раз(а). Последнее : akvvohinc, 03.11.22 22:11
Ratings: 0 negative/0 positive
Re: Отследить подключение флешки
_vit

Сообщений: 5175
Дата регистрации: 29.07.2002
Тьма
Подскажите, пожалуйста, в какую сторону копать?
Спасибо.

Тут статья об этом www.tek-tips.com
Ratings: 0 negative/0 positive
Re: Отследить подключение флешки
_vit

Сообщений: 5175
Дата регистрации: 29.07.2002
Для затравки.

#Define WM_DEVICECHANGE 0x0219
Public oHandler
Clear
oHandler=Newobject("myhandler")
Bindevent(_vfp.HWnd, WM_DEVICECHANGE, oHandler, "handlewinmsg")
Read Events
Return
Define Class myhandler As Session
Function handlewinmsg(HWnd, Msg, wParam, Lparam)
? "WM_DEVICECHANGE", Msg, wParam, Lparam
Return
Enddefine
Ratings: 0 negative/0 positive
Re: Отследить подключение флешки
Тьма
Автор

Сообщений: 21
Дата регистрации: 12.04.2017
Большое спасибо всем!
Изучая Ваши предложения узнал для себя кое-что новое.
Выбрал вариант с таймером. Действительно совсем не
грузит систему, никакого замедления.
Еще раз большое спасибо всем!
Тему можно закрыть.
Ratings: 0 negative/0 positive


Эта тема закрыта.

On-line: 24 (Гостей: 24)

© 2000-2024 Fox Club 
Яндекс.Метрика