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

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

22.07.2011, 17:45. Показов 8519. Ответов 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
Эксперт С++
 Аватар для fasked
5045 / 2624 / 241
Регистрация: 07.10.2009
Сообщений: 4,310
Записей в блоге: 5
22.07.2011, 17:45
>arty<, система-то хоть какая?
0
29 / 28 / 7
Регистрация: 10.07.2009
Сообщений: 317
22.07.2011, 18:27  [ТС]
Цитата Сообщение от fasked Посмотреть сообщение
>arty<, система-то хоть какая?
Windows XP
0
 Аватар для jonson
240 / 213 / 84
Регистрация: 18.03.2010
Сообщений: 750
22.07.2011, 18:40
>arty<, GetLogicalDriveStrings и GetDriveType тебе в помощь.
2
29 / 28 / 7
Регистрация: 10.07.2009
Сообщений: 317
22.07.2011, 20:20  [ТС]
Вообщем кое что накопал и сделал, но проблема в том что я хочу построчно копировать путь к диску в Memo->lines->addstrings.
Проблема в несовместимости форматов, ругается мол метод addstrings просит Tstrings, а я ему char комрлю, так вот как его переконвертировать?
Код ниже предствлен на CodeGear 2009 C++, это обычная форма с кнопкой и мемо...

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
//---------------------------------------------------------------------------
 
#include <vcl.h>
#include <windows.h>
#pragma hdrstop
#include <stdio.h>
#include <cstring.h>
#include "kiosk_src.h"
//---------------------------------------------------------------------------
#pragma package(smart_init)
#pragma resource "*.dfm"
TForm1 *Form1;
using namespace std;
using namespace System;
//---------------------------------------------------------------------------
__fastcall TForm1::TForm1(TComponent* Owner)
    : TForm(Owner)
{
}
//---------------------------------------------------------------------------
void __fastcall TForm1::Button1Click(TObject *Sender)
{  char szBuffer[256];
 
        GetLogicalDriveStrings(256, szBuffer);
        char * pch = szBuffer;
        while (*pch) {
         Memo1->Lines->Text = pch;
      pch = &pch[strlen(pch) + 1];
   }
     if (GetDriveType("G:")==DRIVE_REMOVABLE) {ShowMessage("OK");}
 
}
0
Автор FAQ
 Аватар для -=ЮрА=-
6614 / 4256 / 401
Регистрация: 08.08.2009
Сообщений: 10,325
Записей в блоге: 24
22.07.2011, 22:09
Тебе нужно обработать сообщение 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;
Вложения
Тип файла: rar rmv_guard.rar (22.2 Кб, 100 просмотров)
1
Автор FAQ
 Аватар для -=ЮрА=-
6614 / 4256 / 401
Регистрация: 08.08.2009
Сообщений: 10,325
Записей в блоге: 24
22.07.2011, 22:11
PS:Чтобы определять устройства в режиме реального времени, тебе прийдётся постоянно вызывать
C++
1
GetLogicalDriveStrings
, и твоя программа будет достаточно сильно грузить проц, при частоте обновлений меньше секунды...
0
 Аватар для jonson
240 / 213 / 84
Регистрация: 18.03.2010
Сообщений: 750
22.07.2011, 22:23
Цитата Сообщение от -=ЮрА=- Посмотреть сообщение
и твоя программа будет достаточно сильно грузить проц, при частоте обновлений меньше секунды..
-=ЮрА=-, это не есть так. Даже при селероне в 1.8GHz обновлял 60 раз в сек, и ни какой загрузки не наблюдал вообще.
0
29 / 28 / 7
Регистрация: 10.07.2009
Сообщений: 317
22.07.2011, 22:45  [ТС]
И так, вроде как разобрался с обнаружением устройства, определением его типа, теперь бы извлечение не могли подсказать как сделать, ну и конечно безопасное чтобы флэхи не сжечь ))

KIOSK.zip
0
Автор FAQ
 Аватар для -=ЮрА=-
6614 / 4256 / 401
Регистрация: 08.08.2009
Сообщений: 10,325
Записей в блоге: 24
22.07.2011, 22:48
Думаю можно сгенерировать
C++
1
SendMessage(WM_DEVICECHANGE,DBT_DEVICEREMOVECOMPLETE,NULL)
Надо будет на досуге и самому попробовать
0
29 / 28 / 7
Регистрация: 10.07.2009
Сообщений: 317
23.07.2011, 12:22  [ТС]
нашёл функцию CM_Request_Device_Eject, вроде как посылает устройству сообщение о том, что надо бы отключится перед этим закрыв все открытые дескрипторы, т.е. безопасно, но она требует хэндл устройства, а у меня уже буква известна, прога перебирает все устройства и проверяет не флэшка ли это, тем самым записывает в листбокс букву съёмного диска, так вот как имея букву диска получить хэндл устройства и извлечь его?
0
29 / 28 / 7
Регистрация: 10.07.2009
Сообщений: 317
23.07.2011, 14:17  [ТС]
Изменил код, но немогу понять почему функция CreateFile не может открыть устройство и получить его хэндл:

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
//---------------------------------------------------------------------------
 
#include <vcl.h>
#include <windows.h>
#pragma hdrstop
#include <iostream.h>
#include<stdio.h>
#include <cstring.h>
#include <time.h>
#include <setupapi.h>
#include "kiosk_src.h"
//---------------------------------------------------------------------------
#pragma package(smart_init)
#pragma resource "*.dfm"
TForm1 *Form1;
using namespace std;
using namespace System;
 
//---------------------------------------------------------------------------
__fastcall TForm1::TForm1(TComponent* Owner)
    : TForm(Owner)
{
}
//---------------------------------------------------------------------------
void __fastcall TForm1::Button1Click(TObject *Sender)
{
char szBuffer[256];
 char fName[100];
 HANDLE hF;
 
        GetLogicalDriveStrings(256, szBuffer);
        char * pch = szBuffer;
        while (*pch) {
        if (GetDriveType(pch)==DRIVE_REMOVABLE) {ListBox1->Items->Add(pch); strcpy(fName,pch);}
         Memo1->Lines->Add(pch);
      pch = &pch[strlen(pch) + 1];
   }
      hF = CreateFile(fName,GENERIC_READ | GENERIC_WRITE,0,NULL,OPEN_EXISTING,0,NULL);
if(hF==INVALID_HANDLE_VALUE) MessageBox(NULL, TEXT("Нельзя открыть файл!"), TEXT("KIOSK"), 0);
 
 
    }
KIOSK.zip
0
Эксперт С++
 Аватар для fasked
5045 / 2624 / 241
Регистрация: 07.10.2009
Сообщений: 4,310
Записей в блоге: 5
25.07.2011, 07:24
Цитата Сообщение от >arty< Посмотреть сообщение
почему функция CreateFile не может открыть устройство и получить его хэндл
Попробуйте запустить Вашу программу с правами администратора.
0
29 / 28 / 7
Регистрация: 10.07.2009
Сообщений: 317
25.07.2011, 17:58  [ТС]
Цитата Сообщение от fasked Посмотреть сообщение
Попробуйте запустить Вашу программу с правами администратора.
Так я и так из под админа работаю...
И проблема не в этом, а вот в этом \\\\.\\N:
Функция воспринимает только такой формат, а как его получить я незнаю...
0
Эксперт С++
 Аватар для fasked
5045 / 2624 / 241
Регистрация: 07.10.2009
Сообщений: 4,310
Записей в блоге: 5
25.07.2011, 18:47
>arty<, sprintf в помощь
C
1
2
3
4
char drive_string[7];
char drive_letter = 'N';
 
sprintf(drive_string, "\\\\.\\%c:", drive_letter);
1
29 / 28 / 7
Регистрация: 10.07.2009
Сообщений: 317
25.07.2011, 20:32  [ТС]
спасибо, но я уже переписал приложение на делфях где уйма примеров, просто хотелось на C++.
Но не мучатся же, мне нужно приложение которое будет копировать заданную папку на флэху, а после завершения операции извлекать, вот и всё....
Но я на C++ написание данной программы не заброшу, постараюсь сделать клон и отпишусь сюда с готовым кодом....
0
Автор FAQ
 Аватар для -=ЮрА=-
6614 / 4256 / 401
Регистрация: 08.08.2009
Сообщений: 10,325
Записей в блоге: 24
26.07.2011, 11:39
Если нужно что то перенести на флеш то проще всего использовать функцию СopyFile и не мучаться!
C++
1
if(CopyFile(sPath + "\\test.txt",pRmvPath,false))
Я так понял суть программы в том чтобы при обнаружении флеш на неё что то записать с компа?Похожее реализовывал, только как и писал раньше копать лучше в сторону WM_DEVICECHANGE и их отлову, этим можно с флешью работать ещё до того как с ней начнёт работать эксплорер...
0
29 / 28 / 7
Регистрация: 10.07.2009
Сообщений: 317
26.07.2011, 16:53  [ТС]
Цитата Сообщение от -=ЮрА=- Посмотреть сообщение
Если нужно что то перенести на флеш то проще всего использовать функцию СopyFile и не мучаться!
C++
1
if(CopyFile(sPath + "\\test.txt",pRmvPath,false))
Я так понял суть программы в том чтобы при обнаружении флеш на неё что то записать с компа?Похожее реализовывал, только как и писал раньше копать лучше в сторону WM_DEVICECHANGE и их отлову, этим можно с флешью работать ещё до того как с ней начнёт работать эксплорер...
А разве функция CopyFile умеет копировать директории и поддиректории?
0
Автор FAQ
 Аватар для -=ЮрА=-
6614 / 4256 / 401
Регистрация: 08.08.2009
Сообщений: 10,325
Записей в блоге: 24
27.07.2011, 13:32
Директорию нужно создавать вручную командой mkdir из direct.h - функций по копированию каталогов я не встречал...
0
29 / 28 / 7
Регистрация: 10.07.2009
Сообщений: 317
27.07.2011, 17:26  [ТС]
Цитата Сообщение от -=ЮрА=- Посмотреть сообщение
Директорию нужно создавать вручную командой mkdir из direct.h - функций по копированию каталогов я не встречал...
Да я думаю выжимки из исходников на шарпе возьму и допишу нормально, хотя у меня прекрасно работает в связке Autoit + C#
AutoIt умеет копировать папки....
Программа готова уже тем более, мониторит подключение дисков и считывает в массив пути, потом скопировав запускает внешний экзешник, ожидает окончания работы программы и выводит информацию о том что можно вынуть флэху....
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
27.07.2011, 17:26
Помогаю со студенческими работами здесь

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

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

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

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

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


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

Или воспользуйтесь поиском по форуму:
20
Ответ Создать тему
Новые блоги и статьи
PhpStorm 2025.3: WSL Terminal всегда стартует в ~
and_y87 14.12.2025
PhpStorm 2025. 3: WSL Terminal всегда стартует в ~ (home), игнорируя директорию проекта Симптом: После обновления до PhpStorm 2025. 3 встроенный терминал WSL открывается в домашней директории. . .
Access
VikBal 11.12.2025
Помогите пожалуйста !! Как объединить 2 одинаковые БД Access с разными данными.
Новый ноутбук
volvo 07.12.2025
Всем привет. По скидке в "черную пятницу" взял себе новый ноутбук Lenovo ThinkBook 16 G7 на Амазоне: Ryzen 5 7533HS 64 Gb DDR5 1Tb NVMe 16" Full HD Display Win11 Pro
Музыка, написанная Искусственным Интеллектом
volvo 04.12.2025
Всем привет. Некоторое время назад меня заинтересовало, что уже умеет ИИ в плане написания музыки для песен, и, собственно, исполнения этих самых песен. Стихов у нас много, уже вышли 4 книги, еще 3. . .
От async/await к виртуальным потокам в Python
IndentationError 23.11.2025
Армин Ронахер поставил под сомнение async/ await. Создатель Flask заявляет: цветные функции - провал, виртуальные потоки - решение. Не threading-динозавры, а новое поколение лёгких потоков. Откат?. . .
Поиск "дружественных имён" СОМ портов
Argus19 22.11.2025
Поиск "дружественных имён" СОМ портов На странице: https:/ / norseev. ru/ 2018/ 01/ 04/ comportlist_windows/ нашёл схожую тему. Там приведён код на С++, который показывает только имена СОМ портов, типа,. . .
Сколько Государство потратило денег на меня, обеспечивая инсулином.
Programma_Boinc 20.11.2025
Сколько Государство потратило денег на меня, обеспечивая инсулином. Вот решила сделать интересный приблизительный подсчет, сколько государство потратило на меня денег на покупку инсулинов. . . .
Ломающие изменения в C#.NStar Alpha
Etyuhibosecyu 20.11.2025
Уже можно не только тестировать, но и пользоваться C#. NStar - писать оконные приложения, содержащие надписи, кнопки, текстовые поля и даже изображения, например, моя игра "Три в ряд" написана на этом. . .
Мысли в слух
kumehtar 18.11.2025
Кстати, совсем недавно имел разговор на тему медитаций с людьми. И обнаружил, что они вообще не понимают что такое медитация и зачем она нужна. Самые базовые вещи. Для них это - когда просто люди. . .
Создание Single Page Application на фреймах
krapotkin 16.11.2025
Статья исключительно для начинающих. Подходы оригинальностью не блещут. В век Веб все очень привыкли к дизайну Single-Page-Application . Быстренько разберем подход "на фреймах". Мы делаем одну. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru