Форум программистов, компьютерный форум CyberForum.ru

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
 
Рейтинг: Рейтинг темы: голосов - 37, средняя оценка - 4.95
_arty_
29 / 28 / 1
Регистрация: 10.07.2009
Сообщений: 316
#1

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

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

Интересует вопрос об обнаружении съёмных накопителей (usb-flash), с последующим копированием на них и извлечением, прошу в гугл не посылать, т.к. объяснений кода от него не дождёшься, хотелось бы получить внятное разъяснение, помогите кто чем может
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
22.07.2011, 17:45     Обнаружение USB устройств с последующим их безопасным извлечением
Посмотрите здесь:
C++ Почему программа выдает мусор при сортировке извлечением?
C++ Обнаружение ошибок работы с памятью
C++ Обнаружение повторяющихся цифр в массиве
C++ OpenCV: обнаружение объектов по цвету
Динамическое обнаружение ошибки переполнения буфера C++
Подключении механизма обнаружение утечек памяти C++
C++ Visual Studio 2015 Обнаружение утечек памяти
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
fasked
Эксперт С++
4933 / 2513 / 180
Регистрация: 07.10.2009
Сообщений: 4,311
Записей в блоге: 1
22.07.2011, 17:45     Обнаружение USB устройств с последующим их безопасным извлечением #2
>arty<, система-то хоть какая?
_arty_
29 / 28 / 1
Регистрация: 10.07.2009
Сообщений: 316
22.07.2011, 18:27  [ТС]     Обнаружение USB устройств с последующим их безопасным извлечением #3
Цитата Сообщение от fasked Посмотреть сообщение
>arty<, система-то хоть какая?
Windows XP
jonson
232 / 205 / 61
Регистрация: 18.03.2010
Сообщений: 749
22.07.2011, 18:40     Обнаружение USB устройств с последующим их безопасным извлечением #4
>arty<, GetLogicalDriveStrings и GetDriveType тебе в помощь.
_arty_
29 / 28 / 1
Регистрация: 10.07.2009
Сообщений: 316
22.07.2011, 20:20  [ТС]     Обнаружение USB устройств с последующим их безопасным извлечением #5
Вообщем кое что накопал и сделал, но проблема в том что я хочу построчно копировать путь к диску в 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");}
 
}
-=ЮрА=-
Заблокирован
Автор FAQ
22.07.2011, 22:09     Обнаружение USB устройств с последующим их безопасным извлечением #6
Тебе нужно обработать сообщение 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 Кб, 83 просмотров)
-=ЮрА=-
Заблокирован
Автор FAQ
22.07.2011, 22:11     Обнаружение USB устройств с последующим их безопасным извлечением #7
PS:Чтобы определять устройства в режиме реального времени, тебе прийдётся постоянно вызывать
C++
1
GetLogicalDriveStrings
, и твоя программа будет достаточно сильно грузить проц, при частоте обновлений меньше секунды...
jonson
232 / 205 / 61
Регистрация: 18.03.2010
Сообщений: 749
22.07.2011, 22:23     Обнаружение USB устройств с последующим их безопасным извлечением #8
Цитата Сообщение от -=ЮрА=- Посмотреть сообщение
и твоя программа будет достаточно сильно грузить проц, при частоте обновлений меньше секунды..
-=ЮрА=-, это не есть так. Даже при селероне в 1.8GHz обновлял 60 раз в сек, и ни какой загрузки не наблюдал вообще.
_arty_
29 / 28 / 1
Регистрация: 10.07.2009
Сообщений: 316
22.07.2011, 22:45  [ТС]     Обнаружение USB устройств с последующим их безопасным извлечением #9
И так, вроде как разобрался с обнаружением устройства, определением его типа, теперь бы извлечение не могли подсказать как сделать, ну и конечно безопасное чтобы флэхи не сжечь ))

KIOSK.zip
-=ЮрА=-
Заблокирован
Автор FAQ
22.07.2011, 22:48     Обнаружение USB устройств с последующим их безопасным извлечением #10
Думаю можно сгенерировать
C++
1
SendMessage(WM_DEVICECHANGE,DBT_DEVICEREMOVECOMPLETE,NULL)
Надо будет на досуге и самому попробовать
_arty_
29 / 28 / 1
Регистрация: 10.07.2009
Сообщений: 316
23.07.2011, 12:22  [ТС]     Обнаружение USB устройств с последующим их безопасным извлечением #11
нашёл функцию CM_Request_Device_Eject, вроде как посылает устройству сообщение о том, что надо бы отключится перед этим закрыв все открытые дескрипторы, т.е. безопасно, но она требует хэндл устройства, а у меня уже буква известна, прога перебирает все устройства и проверяет не флэшка ли это, тем самым записывает в листбокс букву съёмного диска, так вот как имея букву диска получить хэндл устройства и извлечь его?
_arty_
29 / 28 / 1
Регистрация: 10.07.2009
Сообщений: 316
23.07.2011, 14:17  [ТС]     Обнаружение USB устройств с последующим их безопасным извлечением #12
Изменил код, но немогу понять почему функция 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
fasked
Эксперт С++
4933 / 2513 / 180
Регистрация: 07.10.2009
Сообщений: 4,311
Записей в блоге: 1
25.07.2011, 07:24     Обнаружение USB устройств с последующим их безопасным извлечением #13
Цитата Сообщение от >arty< Посмотреть сообщение
почему функция CreateFile не может открыть устройство и получить его хэндл
Попробуйте запустить Вашу программу с правами администратора.
_arty_
29 / 28 / 1
Регистрация: 10.07.2009
Сообщений: 316
25.07.2011, 17:58  [ТС]     Обнаружение USB устройств с последующим их безопасным извлечением #14
Цитата Сообщение от fasked Посмотреть сообщение
Попробуйте запустить Вашу программу с правами администратора.
Так я и так из под админа работаю...
И проблема не в этом, а вот в этом \\\\.\\N:
Функция воспринимает только такой формат, а как его получить я незнаю...
fasked
Эксперт С++
4933 / 2513 / 180
Регистрация: 07.10.2009
Сообщений: 4,311
Записей в блоге: 1
25.07.2011, 18:47     Обнаружение USB устройств с последующим их безопасным извлечением #15
>arty<, sprintf в помощь
C
1
2
3
4
char drive_string[7];
char drive_letter = 'N';
 
sprintf(drive_string, "\\\\.\\%c:", drive_letter);
_arty_
29 / 28 / 1
Регистрация: 10.07.2009
Сообщений: 316
25.07.2011, 20:32  [ТС]     Обнаружение USB устройств с последующим их безопасным извлечением #16
спасибо, но я уже переписал приложение на делфях где уйма примеров, просто хотелось на C++.
Но не мучатся же, мне нужно приложение которое будет копировать заданную папку на флэху, а после завершения операции извлекать, вот и всё....
Но я на C++ написание данной программы не заброшу, постараюсь сделать клон и отпишусь сюда с готовым кодом....
-=ЮрА=-
Заблокирован
Автор FAQ
26.07.2011, 11:39     Обнаружение USB устройств с последующим их безопасным извлечением #17
Если нужно что то перенести на флеш то проще всего использовать функцию СopyFile и не мучаться!
C++
1
if(CopyFile(sPath + "\\test.txt",pRmvPath,false))
Я так понял суть программы в том чтобы при обнаружении флеш на неё что то записать с компа?Похожее реализовывал, только как и писал раньше копать лучше в сторону WM_DEVICECHANGE и их отлову, этим можно с флешью работать ещё до того как с ней начнёт работать эксплорер...
_arty_
29 / 28 / 1
Регистрация: 10.07.2009
Сообщений: 316
26.07.2011, 16:53  [ТС]     Обнаружение USB устройств с последующим их безопасным извлечением #18
Цитата Сообщение от -=ЮрА=- Посмотреть сообщение
Если нужно что то перенести на флеш то проще всего использовать функцию СopyFile и не мучаться!
C++
1
if(CopyFile(sPath + "\\test.txt",pRmvPath,false))
Я так понял суть программы в том чтобы при обнаружении флеш на неё что то записать с компа?Похожее реализовывал, только как и писал раньше копать лучше в сторону WM_DEVICECHANGE и их отлову, этим можно с флешью работать ещё до того как с ней начнёт работать эксплорер...
А разве функция CopyFile умеет копировать директории и поддиректории?
-=ЮрА=-
Заблокирован
Автор FAQ
27.07.2011, 13:32     Обнаружение USB устройств с последующим их безопасным извлечением #19
Директорию нужно создавать вручную командой mkdir из direct.h - функций по копированию каталогов я не встречал...
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
27.07.2011, 17:26     Обнаружение USB устройств с последующим их безопасным извлечением
Еще ссылки по теме:
Обнаружение столкновения Sprite и отдельного Tile карты C++
C++ Обнаружение всех объектов класса, удовлетворяющих условию
Fatal error C1004: непредвиденное обнаружение конца файла C++
Fatal error C1004: непредвиденное обнаружение конца файла C++
C++ Fatal error C1004: непредвиденное обнаружение конца файла

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

Или воспользуйтесь поиском по форуму:
_arty_
29 / 28 / 1
Регистрация: 10.07.2009
Сообщений: 316
27.07.2011, 17:26  [ТС]     Обнаружение USB устройств с последующим их безопасным извлечением #20
Цитата Сообщение от -=ЮрА=- Посмотреть сообщение
Директорию нужно создавать вручную командой mkdir из direct.h - функций по копированию каталогов я не встречал...
Да я думаю выжимки из исходников на шарпе возьму и допишу нормально, хотя у меня прекрасно работает в связке Autoit + C#
AutoIt умеет копировать папки....
Программа готова уже тем более, мониторит подключение дисков и считывает в массив пути, потом скопировав запускает внешний экзешник, ожидает окончания работы программы и выводит информацию о том что можно вынуть флэху....
Yandex
Объявления
27.07.2011, 17:26     Обнаружение USB устройств с последующим их безопасным извлечением
Ответ Создать тему
Опции темы

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