Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск  
 
 
Рейтинг 4.69/39: Рейтинг темы: голосов - 39, средняя оценка - 4.69
29 / 28 / 7
Регистрация: 10.07.2009
Сообщений: 317

Обнаружение USB устройств с последующим их безопасным извлечением

22.07.2011, 17:45. Показов 9279. Ответов 27
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Интересует вопрос об обнаружении съёмных накопителей (usb-flash), с последующим копированием на них и извлечением, прошу в гугл не посылать, т.к. объяснений кода от него не дождёшься, хотелось бы получить внятное разъяснение, помогите кто чем может
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
22.07.2011, 17:45
Ответы с готовыми решениями:

Обнаружение устройств usb
Нужно сделать так, чтобы при подключении любого устройства по usb выполнялся код. Пытался найти ответ в интернете, не получилось. Если...

Заполнение массива словами, сохранение их в файл с последующим их извлечением
Собственно смотрим заголовок, помогите. Хотелось бы увидеть больше объяснения а не кода. Заранее спасибо!!!

Сохранение изображения jpg/png в базу данных средствами С++ и WinAPI с последующим извлечением оного из БД
Можно ли с использованием C++ на winApi сохранить изображение (png,jpeg) в какую нибудь переменную , потом сохранить все это в MysQL , а...

27
Автор FAQ
 Аватар для -=ЮрА=-
6614 / 4256 / 401
Регистрация: 08.08.2009
Сообщений: 10,325
Записей в блоге: 24
28.07.2011, 10:42
Студворк — интернет-сервис помощи студентам
>arty<, привожу премер Си проекта основанного на твоей логике обнаружения съёмных носителей.
Для создания каталога на флеш использую системную команду MKDIR. Суть работы программы следующая, при обнаружении съёмного носителя она будет пытаться создавать в его корне папку USB_DETECT в указанную папку будет скопирован файл USB_INFO.txt из каталога sTempPath
C++
1
GetTempPath(MAX_PATH,sTempPath)
/ USB_INFO.txt содержит в себе информацию о съёмном носителе полученную посредством GetVolumeInformation. Тайм-аут вызова
C++
1
GetLogicalDriveStrings(MAX_PATH,sDRIVES)
задаётся в функции
C++
1
Sleep(1000);
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
#include <windows.h>
#include <direct.h>
#include <stdio.h>
 
void GetDrives();
void GetDriveInfo(LPCTSTR sInfoPath, LPCTSTR sDRIVE);
bool CreateDir(LPCTSTR sDRIVE, LPCTSTR sDIR, char * szPath);
 
int main()
{
    printf("PROGRAM START\r\n");
    while(true)
    {
        GetDrives();
        Sleep(1000);
    }
    return 0;
}
 
void GetDrives()
{
    char sDRIVES[MAX_PATH];
    char szPath[MAX_PATH];
    DWORD len = GetLogicalDriveStrings(MAX_PATH,sDRIVES);
    for(int i = 0; i < len; i += 4)
    {
        if(!strchr(&sDRIVES[i],'A'))
        if (GetDriveType(&sDRIVES[i]) == DRIVE_REMOVABLE)
        {
            if(CreateDir(&sDRIVES[i],"USB_DETECT",szPath))
                printf("\r\nDIR: %s CREATED\r\n",szPath);
            else
                printf("DIR: %s NOT CREATED\r\n",szPath);
            printf("\tVOLUME INFORMATION\r\n");
            GetDriveInfo(strcat(szPath,"\\USB_INFO.txt"),&sDRIVES[i]);
        }
    }
}
 
void GetDriveInfo(LPCTSTR sInfoPath, LPCTSTR sDRIVE)
{
    FILE * f;
    char sTempPath[MAX_PATH];
    char sVolName[MAX_PATH];
    char sFSysName[MAX_PATH];
    DWORD dwSerial;
    DWORD dwMaxLen;
    DWORD dwSysFlag;
    GetTempPath(MAX_PATH,sTempPath);
    if(!(f = fopen(strcat(sTempPath,"USB_INFO.txt"),"wb+")))
        printf("ERROR ACCESS %s\r\n",sInfoPath);
    else
    {
        if(GetVolumeInformation
            (
                sDRIVE,
                sVolName,
                MAX_PATH,
                &dwSerial,
                &dwMaxLen,
                &dwSysFlag,
                sFSysName,
                MAX_PATH
            )
        )
        fprintf(f,"\t%s\r\n","USB_DETECT InfoFile:");
        fprintf(f,"DRIVE   : %s\r\n",sDRIVE);
        fprintf(f,"VOLNAME : %s\r\n",sVolName);
        fprintf(f,"SERIAL# : 0x%p\r\n",dwSerial);
        fprintf(f,"MAXLEN  : 0x%p\r\n",dwMaxLen);
        fprintf(f,"FSFlag  : 0x%p\r\n",dwSysFlag);
        fprintf(f,"FSystem : %s\r\n",sFSysName);
        fclose(f);
 
        if(CopyFile(sTempPath,sInfoPath,false))
            printf(">INFOFile %s CREATED\r\n",sInfoPath);
        else
            printf(">INFOFile %s NOT CREATED\r\n",sInfoPath);
 
        printf("DRIVE   : %s\r\n",sDRIVE);
        printf("VOLNAME : %s\r\n",sVolName);
        printf("SERIAL# : 0x%p\r\n",dwSerial);
        printf("MAXLEN  : 0x%p\r\n",dwMaxLen);
        printf("FSFlag  : 0x%p\r\n",dwSysFlag);
        printf("FSystem : %s\r\n",sFSysName);
    }
}
 
bool CreateDir(LPCTSTR sDRIVE, LPCTSTR sDIR, char * szPath)
{
    bool bRet = false;
    char sCMD[MAX_PATH];
    if(szPath)
    {
        sprintf(szPath,"%s%s",sDRIVE,sDIR);
        sprintf(sCMD,"MKDIR %s",szPath);
        if(/*mkdir(szPath)*/system(sCMD))
            bRet = true;
    }
    return bRet;
 
}
Миниатюры
Обнаружение USB устройств с последующим их безопасным извлечением  
Вложения
Тип файла: rar USB_DETECT.exe.rar (16.5 Кб, 46 просмотров)
1
29 / 28 / 7
Регистрация: 10.07.2009
Сообщений: 317
28.07.2011, 17:04  [ТС]
Спасибо -=ЮрА=-, ксатити я уже на шарпе написал функцию копирования и детектирования, как полностью закончу проект, скину....
0
29 / 28 / 7
Регистрация: 10.07.2009
Сообщений: 317
29.07.2011, 19:16  [ТС]
Проект почти закончил, осталось последнее, мне надо сам процесс копирования файлов и бегающий прогрессбар вывести в два отдельных синхронизируемых друг с другом потока, пример кто-нибудь может дать краткий и ясный, я в шарпе новичок, читал на RSDN и MSDN, но нифига не понял...
0
29 / 28 / 7
Регистрация: 10.07.2009
Сообщений: 317
29.07.2011, 21:19  [ТС]
Проект готов, за исключением одного: начало копирования определяется нажатием кнопки, остаётся лишь перенести действия из buttonclick в case при обнаружении устройства...

Смотрите и выкладывайте замечания, про то что я вместо invoke отключил вообще проверку на принадлежность потоков, я знаю, может кто поправит меня и сделает нормальный код с делегатами?

DirCopy.zip
0
UeArtemis
18 / 18 / 3
Регистрация: 23.09.2011
Сообщений: 205
23.09.2011, 16:51
Цитата Сообщение от -=ЮрА=- Посмотреть сообщение
Тебе нужно обработать сообщение DWM_DEVICECHANGE вот те кусок кода и готовый проект
C++
1
2
3
4
5
6
7
8
LRESULT CRmv_guardDlg::WindowProc(UINT message, WPARAM wParam, LPARAM lParam) 
{
    // TODO: Add your specialized code here and/or call the base class
    switch(message){
    case WM_DEVICECHANGE:
        if ( DBT_DEVICEARRIVAL == wParam || DBT_DEVICEREMOVECOMPLETE == wParam ) 
            UpdateDevice((PDEV_BROADCAST_HDR)lParam, wParam);
        break;
Я вот мучаюсь, ищу уже хз сколько и всё же никак не могу понять как это делается - обработка сообщений. Можете объяснить? Просто скопировать этот текст - не работает.
0
Каратель
Эксперт С++
6610 / 4029 / 401
Регистрация: 26.03.2010
Сообщений: 9,273
Записей в блоге: 1
23.09.2011, 16:54
Цитата Сообщение от TheDarkMax2 Посмотреть сообщение
ищу уже хз сколько
непонятно что вы ищите и зачем
курить литературу по ВинАпи надо
0
Автор FAQ
 Аватар для -=ЮрА=-
6614 / 4256 / 401
Регистрация: 08.08.2009
Сообщений: 10,325
Записей в блоге: 24
23.09.2011, 16:55
Цитата Сообщение от TheDarkMax2 Посмотреть сообщение
Я вот мучаюсь, ищу уже хз сколько и всё же никак не могу понять как это делается - обработка сообщений. Можете объяснить? Просто скопировать этот текст - не работает.
- что именно хочешь узнать?Текст программы я выкладывать не буду, а вот дельным советом подскажуПонятное дело что это

Цитата Сообщение от TheDarkMax2 Посмотреть сообщение
LRESULT CRmv_guardDlg::WindowProc(UINT message, WPARAM wParam, LPARAM lParam)
{
* * * * // TODO: Add your specialized code here and/or call the base class
* * * * switch(message){
* * * * case WM_DEVICECHANGE:
* * * * * * * * if ( DBT_DEVICEARRIVAL == wParam || DBT_DEVICEREMOVECOMPLETE == wParam )
* * * * * * * * * * * * UpdateDevice((PDEV_BROADCAST_HDR)lParam, wParam);
* * * * * * * * break;
- лишь часть кода, но по моему и так всё ясно что и к чему, чё не понятно то???
0
UeArtemis
18 / 18 / 3
Регистрация: 23.09.2011
Сообщений: 205
23.09.2011, 17:04
Работаю в Билдере.
Не понятно как сделать, чтобы это исполнялось. Там к каждому стандартному событию привязана функция: нажал кнопку - запустил что-то. Не понятно куда писать свой код обработки сообщения. Пытался просто добавить в класс окна еще одну функцию (в .h объявляю, в .cpp сама функция), но не исполняется. Программа работает как будто её нет.

Добавлено через 2 минуты
Цитата Сообщение от Jupiter Посмотреть сообщение
непонятно что вы ищите и зачем
курить литературу по ВинАпи надо
до Апи дело не доходит
Хотя... работать с устройством я могу, но Plag'n'Play не выходит. Проблема ж не в том, чтобы связаться с устройством (это я могу), а в том, чтобы делать это не в ручную нажатием кнопки, а по-человечески.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
23.09.2011, 17:04

Неполадки с извлечением флешки USB
Почему после сообщения &quot;Оборудование может быть удалено&quot; огонёк на флешке продолжает светиться? Это вообще особенность 7-й...

JMF обнаружение устройств
Доброго времени суток. Возникла нужда-кросплатформенно вывести изображение с вебкамеры во фрейм. Скачал JMF. Использую Eclipse KEPLER...

работа с потоками и обнаружение устройств
добрый день, господа. 1) При разработке программы морда стала немного притормаживать на пк. В ней крутиться 2 таймера постоянно с...

Обнаружение новых устройств на последовательной шине
Доброго времени суток, форумчане. Есть некоторая система, состоящая из ведущих и ведомых устройств. Общение между нимим происходит на...

Обнаружение компьютеров и устройств подключенных по сети
Как реализовать обнаружение компьютеров и устройств подключенных по сети? просто выдать список компьютеров и устройств на основе тех что...


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

Или воспользуйтесь поиском по форуму:
28
Ответ Создать тему
Новые блоги и статьи
Транслитерация текста с кириллицы на латиницу (вариант №1)
Maks 11.11.2026
Решил облегчить жизнь себе и коллегам админам при создании электронных почтовых ящиков для пользователей, в результате написал обработку "Транслитерация текста" с кириллицы на латиницу, а в ней. . .
Книги по геймдизайну, левел-дизайну, игровым механикам и проектированию игрового опыта
8Observer8 08.11.2026
Содержание блога | English Version 1. 2003 - 06 - Designing Virtual Worlds (1st Edition) Автор: Richard A. Bartle | Объем: 768 стр. Ссылки: Amazon . . .
Родители токсичные абьюзеры по отношению к своим детям ругают их оскорбляют не любят
zorxor 08.11.2026
Жить в атмосфере постоянных оскорблений, критики и холодности со стороны родителей — это тяжелое и болезненное испытание, которое оставляет глубокие эмоциональные раны. Токсичное и абьюзивное. . .
Как только я захожу к себе в свою комнату я сразу же с себя снимаю свои трусы. Ответ от Джемени ИИ.
zorxor 08.11.2026
Джемени, как только я захожу к себе в свою комнату я сразу же с себя снимаю свои трусы. Многие люди, возвращаясь домой, сразу переодеваются в максимально свободную одежду или вовсе предпочитают. . .
Паттерн очереди действий/команд (Action / Command Queue). Система очереди действий и кат-сцен с SDL3 Callbacks, cglm и OpenGL
8Observer8 07.11.2026
Содержание блога | English Version Руководство для начинающих по реализации паттерна очереди действий/ команд (Action / Command Queue) на C++ (C++20) с использованием официального SDL3 Callbacks. . .
Проверка полного ФИО в типовом справочнике
Maks 07.11.2026
Решение реализовано в конфигурации КА2, на примере справочника "КонтактныеЛицаПартнеров". Задача: Запрет инициалов. Не допускаеть использование сокращений вида "И. И. ", "И. И. ", "И И" и. . .
Про "Windows must die!"
kumehtar 04.11.2026
Знаете, чет накатило. . . . Когда-то это было почти боевым кличем: мол, нормальный человек сидит на DOS, OS/ 2 или Linux, а вот это вот - Must Die. А теперь человек произносит «мастдай» с усмешкой - и. . .
Красочные поля с номером страницы svg+background-image
russiannick 04.11.2026
Красочные поля с номером страницы не менее важны чем в эпоху бумажных книг. Посему спешу представить почтеннейшей публике этот важный инструмент который эти поля и формирует. В процессе разработки. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru