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

Cканировать подключенные флэшки

27.04.2012, 10:06. Просмотров 3248. Ответов 40
Метки нет (Все метки)

Не подскажите возможно ли прикрутить к кнопке код
C++
1
2
3
4
5
6
7
8
9
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 есть
.................
что то вроде
C++
1
2
3
4
void __fastcall TForm1::Button2Click( TObject *Sender ) {
 
ComboBox1DropDown( NULL );    //обновляем ComboBox1
  }
То же самое но для WMDeviceChange?
0
Лучшие ответы (1)
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
27.04.2012, 10:06
Ответы с готовыми решениями:

Нужно чтобы все клиенты, подключенные к COM серверу, получали сообщения.
Работаю на C++ Builder 5. Получается следующая проблема: к COM серверу подключается клиент -...

Находить все подключенные к компьютеру USB устройства и на усмотрения пользователя их блокировать.
Началась производственная практика дали задние: Программа должна находить все подключенные к...

Захват изображения с одного монитора и копирование его на второй, подключенные к одному и тому же компьютеру
Друзья, подскажите пожалуйста. Имеется два монитора, подключенных к одному компьютеру. Нужно...

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

История подключения флэшки.
Всё работает и всё кажется отлично, но! void __fastcall TForm1::WMDeviceChange( TMessage &amp;Message...

40
Sasha
4928 / 2392 / 530
Регистрация: 05.06.2008
Сообщений: 7,491
Записей в блоге: 3
27.04.2012, 10:26 2
А что этот код у тебя вообще делает?
0
Ddv122
Почемучка)
1240 / 300 / 30
Регистрация: 23.12.2010
Сообщений: 2,000
Записей в блоге: 1
27.04.2012, 10:28  [ТС] 3
Отлавливает все флэшеки
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
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;
0
BRcr
4025 / 2314 / 292
Регистрация: 03.02.2011
Сообщений: 5,064
Записей в блоге: 10
27.04.2012, 10:35 4
C++
1
2
3
4
5
6
void __fastcall TForm1::Button2Click( TObject *Sender ) {
  TMessage msg;
  msg.Msg = WM_DEVICECHANGE;
  msg.WParam = 0x8000;
  WMDeviceChange( msg );
}
2
27.04.2012, 10:35
QWIPQ
142 / 121 / 14
Регистрация: 10.10.2011
Сообщений: 359
Записей в блоге: 2
27.04.2012, 15:08 5
C++
1
2
3
4
5
6
7
void __fastcall TForm1::Button2Click( TObject *Sender ) 
{
  TMessage msg;
  msg.Msg = WM_DEVICECHANGE;
  msg.WParam = 0x8000;
  WMDeviceChange( msg );
}
толку-то от него? посылает значение как буд-то флешка вставлена уже и будет искать флешки кот.стоят уже... а чтоб посмотреть кот. появятся надо постоянно кликать на кнопочку - скука... др дело например в мемо выводить как ток флешку вставили в комп... в темах уже разбиралось дофига инфы и не знаю зач тему отдельную создавать... др вопрос если автор не понял как функцию включать без кнопки эт уже др дело... лови код, это нужно вставить в графу "__published" в файле *.h
C++
1
2
3
4
    void virtual __fastcall WMDeviceChange(TMessage &Message);
    BEGIN_MESSAGE_MAP
        MESSAGE_HANDLER(WM_DEVICECHANGE,TMessage,WMDeviceChange);
    END_MESSAGE_MAP(TForm);
1
Ddv122
Почемучка)
1240 / 300 / 30
Регистрация: 23.12.2010
Сообщений: 2,000
Записей в блоге: 1
27.04.2012, 15:34  [ТС] 6
QWIPQ,
Цитата Сообщение от QWIPQ Посмотреть сообщение
void virtual __fastcall WMDeviceChange(TMessage &Message);
BEGIN_MESSAGE_MAP
MESSAGE_HANDLER(WM_DEVICECHANGE,TMessage,WMDeviceChange);
END_MESSAGE_MAP(TForm);
Я понимаю, так я делаю.Что бы автоматом)НО а на кнопку что бы просканировать уже подключенные флэшки)
0
nick42
Практикантроп
4424 / 2397 / 431
Регистрация: 23.09.2011
Сообщений: 5,140
27.04.2012, 17:39 7
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
void __fastcall TForm1::Button2Click(TObject *Sender)
{
    Button2->Enabled=0; Button2->Repaint();
    char DiskLabel[MAX_PATH], sName[MAX_PATH];
    AnsiString dl, dn; 
    DWORD dr = GetLogicalDrives(), ful[6];
    for (int x = 2; x < 26; x++)
    {  if ((dr >> x) & 1)
       {  dl = AnsiString((char)(65 + x))+":\\";
          SetErrorMode(SEM_FAILCRITICALERRORS);
          if (DirectoryExists(dl))
          {  UINT DriveType = GetDriveType(dl.c_str());
             dn = ExpandUNCFileName(dl+"\\."+"\0");
             if (DriveType != DRIVE_CDROM &&
                 DriveType != DRIVE_FIXED &&
                 DriveType != DRIVE_RAMDISK &&
                 DriveType != DRIVE_REMOTE &&
                 DriveType != DRIVE_NO_ROOT_DIR &&
                 DriveType != DRIVE_UNKNOWN)
             {
               GetVolumeInformation(dl.c_str(),DiskLabel,
                      ful[0],&ful[1],&ful[2],&ful[3],sName,ful[5]);
               dn = DiskLabel;
               Memo1->Lines->Add(dl.SubString(1,1)+" - "+dn);
    }  }  }  }
    Button2->Enabled=1; Button2->Repaint();
}
1
BRcr
4025 / 2314 / 292
Регистрация: 03.02.2011
Сообщений: 5,064
Записей в блоге: 10
27.04.2012, 17:59 8
Цитата Сообщение от QWIPQ Посмотреть сообщение
толку-то от него? посылает значение как буд-то флешка вставлена уже и будет искать флешки кот.стоят уже... а чтоб посмотреть кот. появятся надо постоянно кликать на кнопочку - скука...
Именно. То, что доктор прописал... ну, или автор попросил
0
QWIPQ
142 / 121 / 14
Регистрация: 10.10.2011
Сообщений: 359
Записей в блоге: 2
27.04.2012, 18:10 9
Лучший ответ Сообщение было отмечено как решение

Решение

ОК... вот тебе альтернатива

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
void __fastcall TForm1::Button1Click(TObject *Sender)
{
Memo1->Clear();
HDEVINFO deviceInfoSet;
GUID *guidDev = (GUID*) &GUID_DEVCLASS_USB;
deviceInfoSet = SetupDiGetClassDevs(guidDev, NULL, NULL, DIGCF_PRESENT | DIGCF_PROFILE);
TCHAR buffer [4000];
int memberIndex = 0;
while (true)
        {
        SP_DEVINFO_DATA deviceInfoData;
        ZeroMemory(&deviceInfoData, sizeof(SP_DEVINFO_DATA));
        deviceInfoData.cbSize = sizeof(SP_DEVINFO_DATA);
        if (SetupDiEnumDeviceInfo(deviceInfoSet, memberIndex, &deviceInfoData) == FALSE)
                {
                if (GetLastError() == ERROR_NO_MORE_ITEMS)
                        {
                        break;
                        }
                }
        DWORD nSize=0 ;
        SetupDiGetDeviceInstanceId (deviceInfoSet, &deviceInfoData, buffer, sizeof(buffer), &nSize);
        buffer [nSize] ='\0';
        _tprintf (_T("%s\n"), buffer);
        memberIndex++;
        if (String(buffer).SubString(1,8)=="USB\\VID_")Form1->Memo1->Lines->Add(String(buffer));
        }
        if (deviceInfoSet)
        {
            SetupDiDestroyDeviceInfoList(deviceInfoSet);
        }
}
разница между эти двумя кода в том... тот который используешь ТЫ состоит в том что он определит любую флешку которая имеет букву диска... а тот который прикрипил я ныне определяет любые средства USB будь-то флешка, видеокамера, мышка(не все), съемный жесткий, например у ноутов картридер и видеокамера на USB щлейфе находятся и их параметры можн получить в зависимости от того что тебе необходимо можешь использовать
3
Samrisbe
1353 / 723 / 66
Регистрация: 28.01.2011
Сообщений: 2,004
27.04.2012, 19:44 10
Инклуды какие нужно сделать?
0
QWIPQ
142 / 121 / 14
Регистрация: 10.10.2011
Сообщений: 359
Записей в блоге: 2
27.04.2012, 19:51 11
оу оу забыл прошу прощения вот:
C++
1
2
3
4
5
6
7
8
9
10
11
#include <vcl.h>
#pragma hdrstop
#include <stdio.h>
#include <windows.h>
#include <Setupapi.h>
#include <devguid.h>
#include "conio.h"
#include "tchar.h"
#include <dbt.h>
//#include <devguid.h>
DEFINE_GUID( GUID_DEVCLASS_USB,0x36FC9E60, 0xC465, 0x11CF, 0x80, 0x56, 0x44, 0x45, 0x53, 0x54, 0x00, 0x00 );
2
Ddv122
Почемучка)
1240 / 300 / 30
Регистрация: 23.12.2010
Сообщений: 2,000
Записей в блоге: 1
27.04.2012, 20:04  [ТС] 12
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
void virtual __fastcall WMDeviceChange(TMessage &Message);
    BEGIN_MESSAGE_MAP
    MESSAGE_HANDLER(WM_DEVICECHANGE,TMessage,WMDeviceChange);
    END_MESSAGE_MAP(TForm);
 
void __fastcall TForm1::Button2Click( TObject *Sender ) 
{
    TMessage msg;
    msg.Msg = WM_DEVICECHANGE;
    msg.WParam = 0x8000;
    WMDeviceChange( msg );
}
 
void __fastcall TForm1::WMDeviceChange( TMessage &Message ) {
  if ( Message.Msg == WM_DEVICECHANGE && Message.WParam == 0x8000 ) {
        char DiskLabel[MAX_PATH];
        WORD OldErrorMode;
        AnsiString disk;   //ïåðåìåГ*Г*Г*Гї disk ГІГЁГЇГ*  AnsiString
        DWORD dr = GetLogicalDrives( );  // ГґГіГ*êöèÿ âîçâðГ*Г№Г*ГҐГІ áèòîâóþ Г¬Г*Г±ГЄГі
        for ( int x = 0; x < 26; x++ ) { // ïðîõîäèìñÿ öèêëîì ГЇГ® ГЎГЁГІГ*Г¬
            if ( ( dr >> x ) & 1 ) {     // ГіГ§Г*Г*ВёГ¬ Г§Г*Г*Г·ГҐГ*ГЁГҐ ГІГҐГЄГіГ№ГҐГЈГ® ГЎГЁГІГ*, åñëè åäèГ*ГЁГ¶Г* - äèñê Г± Г*îìåðîì x ГҐГ±ГІГј
                disk = AnsiString( ( char )( 65 + x ) ) + "://"; // ïîëó÷Г*ГҐГ¬ ëèòåðó äèñêГ*
                OldErrorMode = SetErrorMode( SEM_FAILCRITICALERRORS ); // ГіГЎГЁГ°Г*ГҐГ¬ ïîêГ*Г§ îøèáîê
                bool ready = DirectoryExists(disk); // ïûòГ*ГҐГ¬cГї îòêðûòü êîðГ*ГҐГўГіГѕ äèðåêòîðèþ
                if (ready)
                {   // ïûòГ*ГҐГ¬cГї îòêðûòü êîðГ*ГҐГўГіГѕ äèðåêòîðèþ
                    UINT DriveType = GetDriveType( disk.c_str( ) ); // ïîëó÷Г*ГҐГ¬ ГІГЁГЇ äèñêГ*
                    if ( DriveType != DRIVE_CDROM && // èñêëþ÷Г*ГҐГ¬ CDROMГ»
                            DriveType != DRIVE_FIXED && // èñêëþ÷Г*ГҐГ¬  HDD
                            DriveType != DRIVE_RAMDISK &&  // èñêëþ÷Г*ГҐГ¬  Ram disk
                            DriveType != DRIVE_REMOTE &&     //èñêëþ÷Г*ГҐГ¬ FDD
                            DriveType != DRIVE_NO_ROOT_DIR &&    //èñêëþ÷Г*ГҐГ¬ ïîâðåæä¸Г*Г*ûå äèñêè
                            DriveType != DRIVE_UNKNOWN)       //èñêëþ÷Г*ГҐГ¬ Г*åèçâåñòГ*ûå äèñêè
                    {
                        Edit1->Text=disk;         //ðåçóëüòГ*ГІ Гў Edit1
И ловит Автоматически все флэшки + на кнопке сканирует все уже подключенные и можно с ними выполнять какие либо действия.
0
QWIPQ
142 / 121 / 14
Регистрация: 10.10.2011
Сообщений: 359
Записей в блоге: 2
27.04.2012, 20:14 13
вот раз пошла такая маза... в понедельник за вечерок набросал блокер флешек... GUID можн узнать, можно монтировать, размонтировуются автоматом если они неизвестны в файле(по чеку), горячие кнопки(скрыть,открыть,закрыть) + пароль из трея(не доработан ) пользуйся и радуйся ток форму хотяб измени
2
Вложения
Тип файла: rar USB blocker.rar (11.1 Кб, 35 просмотров)
Samrisbe
1353 / 723 / 66
Регистрация: 28.01.2011
Сообщений: 2,004
27.04.2012, 20:36 14
Спасибо интересный проект!
У меня exe компилится но перед запуском выскакивает ошибка что за Dll он просит?:
0
Миниатюры
Cканировать подключенные флэшки  
QWIPQ
142 / 121 / 14
Регистрация: 10.10.2011
Сообщений: 359
Записей в блоге: 2
27.04.2012, 20:43 15
C++
1
TStringList *OPEN = new TStringList;
сюда записывается "аля dll"

C++
1
2
3
4
5
6
7
8
9
10
__fastcall TForm1::TForm1(TComponent* Owner)
        : TForm(Owner)
{
    OPEN->LoadFromFile("open.dll");
    TBorderIcons tempBI = BorderIcons;
.
.
.
.
}
тут сама запись...

вообщем она лежит в проекте эт обычный txt файл переименнованный в нем аппаратники флешек которые можн вставлять в комп))) а другие флешки идут лесом))

P.S. прога писалась чисто для друзей которые любят флешки вставлять в комп без разрешения и всякую лабуду с них смотреть и на них записывать)
P.S.S. в букву чисто "G" или др над писать))
1
Ddv122
Почемучка)
1240 / 300 / 30
Регистрация: 23.12.2010
Сообщений: 2,000
Записей в блоге: 1
27.04.2012, 20:46  [ТС] 16
А безопасное извлечение не кто не знает как сделать случайно?
0
QWIPQ
142 / 121 / 14
Регистрация: 10.10.2011
Сообщений: 359
Записей в блоге: 2
27.04.2012, 20:59 17
вот тебе инфа:
№1
№2

P.S. сам не юзал, попробуй разобраться...
2
Ddv122
Почемучка)
1240 / 300 / 30
Регистрация: 23.12.2010
Сообщений: 2,000
Записей в блоге: 1
27.04.2012, 21:08  [ТС] 18
QWIPQ, я 1ссылку смотрел уже но там пример на си шарпе, осталось импортировать.
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
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
/*
 * Сделано в SharpDevelop.
 * Пользователь: 075033-1080
 * Дата: 28.07.2011
 * Время: 9:51
 * 
 * Для изменения этого шаблона используйте Сервис | Настройка | Кодирование | Правка стандартных заголовков.
 */
using System;
using System.Data;
using System.Collections.Generic;
using System.Diagnostics;
using System.Drawing;
using System.IO;
using System.Runtime.InteropServices;
using System.Windows.Forms;
using System.Runtime;
using System.Threading;
 
    namespace DirCopy
{
    /// <summary>
    /// Description of MainForm.
    /// </summary>
    public partial class MainForm : Form
    {
        unsafe public MainForm()
        {
            System.Windows.Forms.Control.CheckForIllegalCrossThreadCalls = false;
            
            //
            // The InitializeComponent() call is required for Windows Forms designer support.
            //
            InitializeComponent();
            
            //
            // TODO: Add constructor code after the InitializeComponent() call.
            //
        }
        
        const int WM_DEVICECHANGE           = 0x0219;
        const int DBT_DEVICEARRIVAL         = 0x8000; 
        const int DBT_DEVICEREMOVECOMPLETE  = 0x8004;
 
        
 
        
        //[StructLayout(LayoutKind.Sequential)]
        public struct DEV_BROADCAST_HDR
        {
            public int dbch_size;
            public int dbch_devicetype;
            public int dbch_reserved;
        }
 
        protected override void WndProc(ref Message m)
        {
            if (m.Msg == WM_DEVICECHANGE)
            {
                int EventCode = m.WParam.ToInt32();
                //Log(string.Format("WM_DEVICECHANGE. Код={0}", EventCode));
                
                switch (EventCode)
                {
                    case DBT_DEVICEARRIVAL:
                    {
                        foreach (var s in DriveInfo.GetDrives())
                        {
                            if (s.DriveType == DriveType.Removable)
                                //Выводим имена всех дисков.
                                listBox1.Items.Add(s.ToString());
                            destination.Text = s.ToString() + "PFR";
                            source.Text = "C:\\Netgear";
                        }
 
                        //MessageBox.Show("Device connected","Info");
                        break;
                    }
                    case DBT_DEVICEREMOVECOMPLETE:
                    {
                        //Log("Удаление устройства");
                        label1.Text = "Копирование завершено, устройство может быть извлечено!";
                        Thread.Sleep(10000);
                        label1.Text = "Вставьте флэшку!";   
                        break;
                    }
                }
            }
            base.WndProc (ref m);
 
        }
        
         public unsafe static bool IsRemovable(SetupAPI.SP_DEVINFO_DATA DevData)
        {
            int Status = 0;
            int Problem = 0;
 
            SetupAPI.CM_Get_DevNode_Status(ref Status, ref Problem, DevData.DevInst, 0);
            return ((Status & SetupAPI.DN_REMOVABLE) != 0);
        }
         
         
         public unsafe static string GetRegistryProperty(int PnPHandle, ref SetupAPI.SP_DEVINFO_DATA DeviceInfoData, SetupAPI.RegPropertyType Property)
        {
            int RequiredSize = 0;
            SetupAPI.DATA_BUFFER Buffer = new SetupAPI.DATA_BUFFER();
 
            int result = SetupAPI.SetupDiGetDeviceRegistryProperty(
                PnPHandle,
                ref DeviceInfoData,
                Property,
                null,
                ref Buffer,
                1024,
                ref RequiredSize
                );
 
            return Buffer.Buffer;
 
        }
 
////////////////////////////////////////////////////////////////////////////////////        
        
        
        unsafe void Button1Click(object sender, EventArgs e)
        {
            /*
           foreach (var s in DriveInfo.GetDrives())
            {if (s.DriveType==DriveType.Removable)
                //Выводим имена всех дисков.
                listBox1.Items.Add(s.ToString());
            destination.Text = s.ToString() + "PFR";
            }*/
            
                    
                progressBar1.Style = ProgressBarStyle.Marquee;
                //Thread b = new Thread(new ParameterizedThreadStart(CopyDir));
              //  CopyDir(source.Text,destination.Text);
                backgroundWorker1.RunWorkerAsync();
 
                //progressBar1.Style = ProgressBarStyle.Blocks;
               
                    
                //MessageBox.Show("Копирование завершено!","Info!");
                
           
            
        }
 
 
 
    
        void CopyDir(string FromDir, string ToDir)
    {
     Directory.CreateDirectory(ToDir);
   
    foreach (string s1 in Directory.GetFiles(FromDir))
    {
        string s2 = ToDir + "\\" + Path.GetFileName(s1);
        //if(label1.InvokeRequired) label1.Invoke(new Action<string>(() => listBox1.Text = s1), s1);
        label1.Text = s1;
        if (File.Exists(s2)) File.Delete(s2);
        File.Copy(s1,s2);
        File.SetAttributes(s2, FileAttributes.Normal);        
    }
    foreach (string s in Directory.GetDirectories(FromDir))
    {
        CopyDir(s, ToDir + "\\" + Path.GetFileName(s));
       // File.SetAttributes(s, FileAttributes.Normal);
    }
}
 
        private void backgroundWorker1_DoWork(object sender, System.ComponentModel.DoWorkEventArgs e)
        {
            CopyDir(source.Text, destination.Text);
            
            Thread.Sleep(30);
        }
 
        private unsafe void backgroundWorker1_RunWorkerCompleted(object sender, System.ComponentModel.RunWorkerCompletedEventArgs e)
        {
            progressBar1.Style = ProgressBarStyle.Blocks;
            MessageBox.Show("Копирование завершено!", "Info!");
           
            Guid UsbGuid = new Guid("{36FC9E60-C465-11CF-8056-444553540000}");
 
            int PnPHandle = SetupAPI.SetupDiGetClassDevs(
                ref UsbGuid,
                null,
                null,
                SetupAPI.ClassDevsFlags.DIGCF_PRESENT
            );
 
            int result = -1;
            int DeviceIndex = 0;           
 
            while (result != 0)
            {
                SetupAPI.SP_DEVINFO_DATA DeviceInfoData = new SetupAPI.SP_DEVINFO_DATA();
                DeviceInfoData.cbSize = Marshal.SizeOf(DeviceInfoData);
                result = SetupAPI.SetupDiEnumDeviceInfo(PnPHandle, DeviceIndex, ref DeviceInfoData);
 
                if (result == 1)
                {
                    if (IsRemovable(DeviceInfoData))
                    {
                        Console.WriteLine("{0}", GetRegistryProperty(PnPHandle, ref DeviceInfoData, SetupAPI.RegPropertyType.SPDRP_DEVICEDESC));
                        if (SetupAPI.CM_Request_Device_Eject(DeviceInfoData.DevInst, null, null, 0, 0) == 0)
                            Console.WriteLine("Устройство успешно отключено.");
                    }
                }
 
                DeviceIndex++;
            }
            Marshal.FreeHGlobal((System.IntPtr)PnPHandle);
            
        }
 
       
 
        
    }
 
}
0
Dondok
18 / 34 / 2
Регистрация: 28.01.2012
Сообщений: 181
27.04.2012, 21:22 19
EdarGp
1
Вложения
Тип файла: rar USB_Disable.rar (13.6 Кб, 30 просмотров)
QWIPQ
142 / 121 / 14
Регистрация: 10.10.2011
Сообщений: 359
Записей в блоге: 2
27.04.2012, 21:35 20
C++
1
SendMessage(WM_DEVICECHANGE,DBT_DEVICEREMOVECOMPLETE,NULL)
попытайся вот так

или так
1
27.04.2012, 21:35
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
27.04.2012, 21:35

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

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

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


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

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

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