yurifedorov |
Отправлено: 21.07.2006, 10:18 |
|
Ученик-кочегар
Группа: Участник
Сообщений: 5
|
Есть задача определить, что в USB CardReader вставили карточку.
Перехват WM_DEVICECHANGE не спасает, т.к. логический диск уже присутвует.
Пробовал пользовать GetDiskFreeSpaceEx ( при отсутствии карточки он выдает false ), но возникает другая проблема. На компьютере где не стоит BCB вылетает диалог "Вставьть диск в дисковод Х".
Есть ли какие способы решить эту проблему |
|
Sl@Sh |
Отправлено: 22.07.2006, 07:25 |
|
Мастер участка
Группа: Участник
Сообщений: 383
|
Привет!
У меня вот это работает :
CODE |
if ( GetVolumeInformation( "D:\\", NULL, 0, 0, 0, 0, NULL, 0 ) ) printf( "Yahoo!" ); else printf( "Fail!" ); |
Причем проверял оба случая(с картой и без). Билдер не установлен и ничего не появлялось.
|
|
yurifedorov |
Отправлено: 22.07.2006, 10:10 |
|
Ученик-кочегар
Группа: Участник
Сообщений: 5
|
Спасибо, действительно работает.
а если это делать через RegisterDeviceNotification(), как в МСДН написано чтобы просто "повиснуть" на WM_DEVICECHANGE, но у меня почему-то выскакивает AccessVialation.
В качестве HWND указывал mainform->Handle, Application->Handle....
GUID для USB = {a5dcbf10-6530-11d2-901f-00c04fb951ed}
|
|
Sl@Sh |
Отправлено: 23.07.2006, 06:19 |
|
Мастер участка
Группа: Участник
Сообщений: 383
|
Не пробовал, но думаю можно просто отлавливать сообщение WM_DEVICECHANGE стандартным способом, и не вызывать для этого RegisterDeviceNotification.
При этом (UINT)wParam даст вам инфу о том что случилось с вашим устройством.
Загляните в справку по Win32, которая встроена в билдер. Там есть описание всех возможных событий.
|
|
yurifedorov |
Отправлено: 23.07.2006, 13:47 |
|
Ученик-кочегар
Группа: Участник
Сообщений: 5
|
Без RegisterDeviceNotification() отлавливать возможно только CD-ROM или подключение нового диска, а вставка карточки в ридер не вызывает никаких реакций ( вернее они не доходят ) |
|