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