Форум программистов, компьютерный форум, киберфорум
Наши страницы
C++ Builder
Войти
Регистрация
Восстановить пароль
 
Рейтинг 5.00/6: Рейтинг темы: голосов - 6, средняя оценка - 5.00
Ddv122
Почемучка)
1241 / 301 / 30
Регистрация: 23.12.2010
Сообщений: 2,000
Записей в блоге: 1
1

История подключения флэшки.

26.04.2012, 23:55. Просмотров 1084. Ответов 5
Метки нет (Все метки)

Всё работает и всё кажется отлично, но!
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
void __fastcall TForm1::WMDeviceChange( TMessage &Message ) {
    if ( Message.Msg == WM_DEVICECHANGE && Message.WParam == 0x8000 ) {
        char DiskLabel[MAX_PATH];
        WORD OldErrorMode;
        AnsiString dl;
        DWORD dr = GetLogicalDrives( );  // функция возвращает битовую маску
        for ( int x = 0; x < 26; x++ ) { // проходимся циклом по битам
            if ( ( dr >> x ) & 1 ) {     // узнаём значение текущего бита, если единица - диск с номером x есть
                dl = AnsiString( ( char )( 65 + x ) ) + "://"; // получаем литеру диска
                OldErrorMode = SetErrorMode( SEM_FAILCRITICALERRORS ); // убираем показ ошибок
                bool ready = DirectoryExists(dl); // пытаемcя открыть корневую директорию
                if (ready)
                {   // пытаемcя открыть корневую директорию
                    UINT DriveType = GetDriveType( dl.c_str( ) ); // получаем тип диска
                    if ( DriveType != DRIVE_CDROM && // исключаем CDROMы
                            DriveType != DRIVE_FIXED && // исключаем  HDD
                             DriveType != DRIVE_RAMDISK &&
                             DriveType != DRIVE_REMOTE &&
                             DriveType != DRIVE_NO_ROOT_DIR &&
                             DriveType != DRIVE_UNKNOWN)
                            {
                            Edit1->Text=dl;
 ShellExecute( Handle, "open", dl, NULL, NULL, SW_RESTORE );//ну или почти так(суть не в этом)[
если мы делаем так то -
Он откроет все флэшки подключенный на данный момент, а не последнюю подключенную.Как исправить?
Или по времени сравнивать их,и открыть последний подключенный...По букве не прокатит.
0
QA
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
26.04.2012, 23:55
Ответы с готовыми решениями:

Cканировать подключенные флэшки
Не подскажите возможно ли прикрутить к кнопке код void __fastcall TForm1::WMDeviceChange(...

Безопасное извлечение флэшки.
Добрый вечер)Не кто не реализовывал функцию Безопасного извлечение флэшки? Нужно копать в сторону...

Оследить момент появления флэшки в проводнике.
Как отловить момент появления дисков в проводнике а не в системе? UINT uDriveType =...

Определенные действия при подключении флэшки
if ( Message.Msg == WM_DEVICECHANGE &amp;&amp; Message.WParam == 0x8000 ) { char DiskLabel; ...

Как отследить момент отключения флэшки
void __fastcall TForm1::WMDeviceChange( TMessage &amp;Message ) { if ( Message.Msg ==...

5
BRcr
4025 / 2314 / 292
Регистрация: 03.02.2011
Сообщений: 5,064
Записей в блоге: 10
27.04.2012, 08:46 2
При подключении флэшки суйте ее серийник в стек, а когда надо открыть последнюю подключенную, берете последний серийник из стека и делаете по нему выборку из всех логический дисков.
1
Ddv122
Почемучка)
1241 / 301 / 30
Регистрация: 23.12.2010
Сообщений: 2,000
Записей в блоге: 1
27.04.2012, 20:20  [ТС] 3
Цитата Сообщение от BRcr Посмотреть сообщение
При подключении флэшки суйте ее серийник в стек, а когда надо открыть последнюю подключенную, берете последний серийник из стека и делаете по нему выборку из всех логический дисков.
Последний серийник, хм WMDeviceChange сканирует все флэшки причем формирует их по алфавиту..
А при подключении флэшки не извесно, какую букву будет иметь флэшка.(выше или ниже подключенной) как то так.
0
BRcr
4025 / 2314 / 292
Регистрация: 03.02.2011
Сообщений: 5,064
Записей в блоге: 10
27.04.2012, 20:51 4
Какая разница, чего флэшка будет или не будет иметь? Список томов интересующего вас типа DRIVE_REMOVABLE изменился, в нем появился элемент, которого в нем доселе не было - это единственное, что должно волновать вас на этой стадии.

Программка запустилась, составила список томов, смонтированных в системе, и запомнила его. Программка получила оповещение WM_DEVICECHANGE об изменении конфигурации оборудования, составила список томов повторно, сравнила его с ранее сохраненным и, вуаля - вот она, искомая флэшка.
1
Ddv122
Почемучка)
1241 / 301 / 30
Регистрация: 23.12.2010
Сообщений: 2,000
Записей в блоге: 1
27.04.2012, 21:01  [ТС] 5
BRcr, что то я туплю как всегда
Код
27.04.2012 19:56:52  -  Подключен накопитель: (F://) 
27.04.2012 19:56:52  -  Подключен накопитель: (G://)
1 флэшка стояла в системе, 1 подключил...В логе появилось 2 записи.
Причём диск (G://) был подключен часа 2 назад....
Код использую что вверху.
WM_DEVICECHANGE сканирует все DRIVE_REMOVABLE и выводит всё.
Нужно сравнить, не подскажите как?
0
QWIPQ
142 / 121 / 14
Регистрация: 10.10.2011
Сообщений: 359
Записей в блоге: 2
27.04.2012, 21:22 6
Цитата Сообщение от EdarGp Посмотреть сообщение
Или по времени сравнивать их,и открыть последний подключенный...По букве не прокатит.
посмотри тот проект что я скидывал в предыдущей твой теме
там я обошел эт следующим образом:
1) при первичном включении проги искал ВСЕ подключенное к компу в данный момент и выводится в верхнее мемо
2) как ток подключается флешка у меня организован поиск по тому что есть и выводит ток её данные в нижнее
или
допустим флеха стояла когда произошло включение проги, можн сделать следующее:
1) как только вытаскивают флешку над в мемко данные обновить и не добавлять туда
2) как ток снов вставляется флеха одной просто делай поиск этой флехе в мемо если её нет то добавь её туда

можн организовать через одну мемку или стринглист или любой др вид эмитированного списка...
0
27.04.2012, 21:22
Answers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
27.04.2012, 21:22

Определение подключения/отключения флэшки. Qt и WinAPI
Помогите пожалста победить проблему – требуется в Qt проге определять подкл./откл. флэшки. Написал...

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

История ICQ, Skype и история браузеров. Как экспортировать и где хранится?
Доброго времени суток. Требуется из телефона на базе ОС Андроид, а именно аппарат Lenovo 700i,...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
6
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2019, vBulletin Solutions, Inc.
Рейтинг@Mail.ru