C++ Builder
| Главная | Уроки | Статьи | FAQ | Форум | Downloads | Литература | Ссылки | RXLib | Диски |

 
USB Card Reader, Как определить что вставил карточку..?
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 или подключение нового диска, а вставка карточки в ридер не вызывает никаких реакций ( вернее они не доходят )

Вернуться в Работа с внешними устройствами