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

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

22.07.2011, 17:45. Показов 9002. Ответов 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
Ответ Создать тему
Новые блоги и статьи
Алиса нашла кучу ошибок компиляции и запуска в проекте, который без проблем компилировался и запускался)))
anaschu 30.06.2026
Я пока посмеюся, но завтра проверю. А вообще интерсно. Дал алисе файл, в котором точно нет ошибок компиляции и запуска, и попросил их найти. Нашла кучу))) Критические ошибки, мешающие компиляции и. . .
сукцессия 16. Общий обзор, в основном что бы другие ии поняли
anaschu 29.06.2026
# Передаточный документ: модель микоризной сукцессии (для нового чата) Этот документ предназначен для того, чтобы новый чат Claude мог продолжить работу без необходимости заново разбираться в. . .
сукцессия 15 неявная схема
anaschu 29.06.2026
Алиса Калибровка параметров симбиотической модели: технический обзор Содержание: Введение Постановка проблемы Технические аспекты реализации Процесс внедрения изменений
сукцессия 14. Обновленная схема модели
anaschu 28.06.2026
ГЛОБАЛЬНАЯ ОПИСАТЕЛЬНАЯ СПЕЦИФИКАЦИЯ ЭКОСИСТЕМНОЙ МОДЕЛИ «SOIL CHEMISTRY & MYCORRHIZA 2. 0» https:/ / ibb. co/ NnkGpfMd Представленная интегрированная схема описывает непрерывную нелинейную. . .
сукцессия 13. Питон модель трехзонного мицелия, пока что в основном арбускулярного
anaschu 28.06.2026
## Разработка агентной модели микоризной сукцессии: от выявления артефактов к созданию комплексной системы ### Аннотация Представлено исследование по разработке агентной модели микоризной. . .
сукцессия 12. краткий список проверок модели перед запуском.
anaschu 27.06.2026
Скрытые отказы в моделях систем динамики (SD-models) экологических систем: два случая из практики Контекст Разбирался прототип модели систем динамики (SD-модели) микоризной сукцессии: пять. . .
Сукцессия 11. Проверка орудий перед войной: разработка через тестирование
anaschu 27.06.2026
Как не дать модели соврать самой себе: проверки для симуляции микоризной сукцессии Введение Когда вы строите математическую модель живой системы — грибов, растений, почвы — главная опасность. . .
10 сукцессия. Питон код войны грибов и растений
anaschu 27.06.2026
import numpy as np class PlantAgent: def __init__(self, name, strategy, initial_biomass): self. name = name self. strategy = strategy # "greedy" (широколиственные) или. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru