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

 Здравствуйте, гость ( Вход | Регистрация )   Скачать форум | Поиск по Форуму | Участники | Помощь
 Поиск по:   сайтy   
   архиву форума   
  ОтветитьНовая тема
USB Card Reader, Как определить что вставил карточку..?
« предыдущая тема | следующая тема » Подписаться на тему | Отправить тему на E-mail | Распечатать тему
yurifedorov
Отправлено: 21.07.2006, 10:18 Цитировать


Ученик-кочегар


Группа: Участник
Сообщений: 5
Пользователь № 1851
Регистрация: 21.07.06



Есть задача определить, что в USB CardReader вставили карточку.

Перехват WM_DEVICECHANGE не спасает, т.к. логический диск уже присутвует.

Пробовал пользовать GetDiskFreeSpaceEx ( при отсутствии карточки он выдает false ), но возникает другая проблема. На компьютере где не стоит BCB вылетает диалог "Вставьть диск в дисковод Х".

Есть ли какие способы решить эту проблему
 
Послать сообщение E-mail адрес  Top
Sl@Sh
Отправлено: 22.07.2006, 07:25 Цитировать


Мастер участка


Группа: Участник
Сообщений: 383
Пользователь № 766
Регистрация: 24.07.04



Привет!

У меня вот это работает :
CODE

if ( GetVolumeInformation( "D:\\", NULL, 0, 0, 0, 0, NULL, 0 ) ) printf( "Yahoo!" ); else printf( "Fail!" );


Причем проверял оба случая(с картой и без). Билдер не установлен и ничего не появлялось.

--------------------
http://slsoft.i54.ru
 
Послать сообщение E-mail адрес Домашняя страница ICQ  Top
yurifedorov
Отправлено: 22.07.2006, 10:10 Цитировать


Ученик-кочегар


Группа: Участник
Сообщений: 5
Пользователь № 1851
Регистрация: 21.07.06



Спасибо, действительно работает.

а если это делать через RegisterDeviceNotification(), как в МСДН написано чтобы просто "повиснуть" на WM_DEVICECHANGE, но у меня почему-то выскакивает AccessVialation.
В качестве HWND указывал mainform->Handle, Application->Handle....
GUID для USB = {a5dcbf10-6530-11d2-901f-00c04fb951ed}
 
Послать сообщение E-mail адрес  Top
Sl@Sh
Отправлено: 23.07.2006, 06:19 Цитировать


Мастер участка


Группа: Участник
Сообщений: 383
Пользователь № 766
Регистрация: 24.07.04



Не пробовал, но думаю можно просто отлавливать сообщение WM_DEVICECHANGE стандартным способом, и не вызывать для этого RegisterDeviceNotification.

При этом (UINT)wParam даст вам инфу о том что случилось с вашим устройством.

Загляните в справку по Win32, которая встроена в билдер. Там есть описание всех возможных событий.

--------------------
http://slsoft.i54.ru
 
Послать сообщение E-mail адрес Домашняя страница ICQ  Top
yurifedorov
Отправлено: 23.07.2006, 13:47 Цитировать


Ученик-кочегар


Группа: Участник
Сообщений: 5
Пользователь № 1851
Регистрация: 21.07.06



Без RegisterDeviceNotification() отлавливать возможно только CD-ROM или подключение нового диска, а вставка карточки в ридер не вызывает никаких реакций ( вернее они не доходят )
 
Послать сообщение E-mail адрес  Top
4 ответов с: 21.07.2006, 10:18 Подписаться на тему | Отправить тему на E-mail | Распечатать тему

Back to Работа с внешними устройствами
ОтветитьНовая тема