Форум программистов, компьютерный форум, киберфорум
C++ Builder
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
 
Рейтинг 4.52/27: Рейтинг темы: голосов - 27, средняя оценка - 4.52
Почемучка)
 Аватар для Ddv122
1244 / 304 / 30
Регистрация: 23.12.2010
Сообщений: 2,001
Записей в блоге: 1

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

27.04.2012, 10:06. Показов 5451. Ответов 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)
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
27.04.2012, 10:06
Ответы с готовыми решениями:

Извлечение флэшки с программы которая запущена с той же флэшки
Пишу типа авторана для флэшки. И там я хочу написать код который-би безопасно извлекал флэшку. Использую юнит который с большим трудом...

Внутри флэшки ярлык флэшки
Добрый день! Уже не знаю который день внутри флэшки лежит ярлык на саму флэшку через который можно открыть файлы.Но буквально вчера или...

Подключенные устройства
Всем Привет, Подскажите, через что или как сделать что бы увидеть кто подключился (Высветить список IP кто подключился). Просто...

40
 Аватар для Sasha
4956 / 2420 / 531
Регистрация: 05.06.2008
Сообщений: 7,518
Записей в блоге: 3
27.04.2012, 10:26
А что этот код у тебя вообще делает?
0
Почемучка)
 Аватар для Ddv122
1244 / 304 / 30
Регистрация: 23.12.2010
Сообщений: 2,001
Записей в блоге: 1
27.04.2012, 10:28  [ТС]
Отлавливает все флэшеки
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
4043 / 2333 / 292
Регистрация: 03.02.2011
Сообщений: 5,066
Записей в блоге: 10
27.04.2012, 10:35
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
 Аватар для QWIPQ
144 / 123 / 14
Регистрация: 10.10.2011
Сообщений: 366
Записей в блоге: 2
27.04.2012, 15:08
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
1244 / 304 / 30
Регистрация: 23.12.2010
Сообщений: 2,001
Записей в блоге: 1
27.04.2012, 15:34  [ТС]
QWIPQ,
Цитата Сообщение от QWIPQ Посмотреть сообщение
void virtual __fastcall WMDeviceChange(TMessage &Message);
BEGIN_MESSAGE_MAP
MESSAGE_HANDLER(WM_DEVICECHANGE,TMessage ,WMDeviceChange);
END_MESSAGE_MAP(TForm);
Я понимаю, так я делаю.Что бы автоматом)НО а на кнопку что бы просканировать уже подключенные флэшки)
0
Практикантроп
 Аватар для nick42
4841 / 2726 / 534
Регистрация: 23.09.2011
Сообщений: 5,798
27.04.2012, 17:39
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
4043 / 2333 / 292
Регистрация: 03.02.2011
Сообщений: 5,066
Записей в блоге: 10
27.04.2012, 17:59
Цитата Сообщение от QWIPQ Посмотреть сообщение
толку-то от него? посылает значение как буд-то флешка вставлена уже и будет искать флешки кот.стоят уже... а чтоб посмотреть кот. появятся надо постоянно кликать на кнопочку - скука...
Именно. То, что доктор прописал... ну, или автор попросил
0
 Аватар для QWIPQ
144 / 123 / 14
Регистрация: 10.10.2011
Сообщений: 366
Записей в блоге: 2
27.04.2012, 18:10
Лучший ответ Сообщение было отмечено как решение

Решение

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

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
1365 / 732 / 67
Регистрация: 28.01.2011
Сообщений: 2,069
27.04.2012, 19:44
Инклуды какие нужно сделать?
0
 Аватар для QWIPQ
144 / 123 / 14
Регистрация: 10.10.2011
Сообщений: 366
Записей в блоге: 2
27.04.2012, 19:51
оу оу забыл прошу прощения вот:
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
1244 / 304 / 30
Регистрация: 23.12.2010
Сообщений: 2,001
Записей в блоге: 1
27.04.2012, 20:04  [ТС]
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
144 / 123 / 14
Регистрация: 10.10.2011
Сообщений: 366
Записей в блоге: 2
27.04.2012, 20:14
вот раз пошла такая маза... в понедельник за вечерок набросал блокер флешек... GUID можн узнать, можно монтировать, размонтировуются автоматом если они неизвестны в файле(по чеку), горячие кнопки(скрыть,открыть,закрыть) + пароль из трея(не доработан ) пользуйся и радуйся ток форму хотяб измени
Вложения
Тип файла: rar USB blocker.rar (11.1 Кб, 40 просмотров)
2
 Аватар для Samrisbe
1365 / 732 / 67
Регистрация: 28.01.2011
Сообщений: 2,069
27.04.2012, 20:36
Спасибо интересный проект!
У меня exe компилится но перед запуском выскакивает ошибка что за Dll он просит?:
Миниатюры
Cканировать подключенные флэшки  
0
 Аватар для QWIPQ
144 / 123 / 14
Регистрация: 10.10.2011
Сообщений: 366
Записей в блоге: 2
27.04.2012, 20:43
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
1244 / 304 / 30
Регистрация: 23.12.2010
Сообщений: 2,001
Записей в блоге: 1
27.04.2012, 20:46  [ТС]
А безопасное извлечение не кто не знает как сделать случайно?
0
 Аватар для QWIPQ
144 / 123 / 14
Регистрация: 10.10.2011
Сообщений: 366
Записей в блоге: 2
27.04.2012, 20:59
вот тебе инфа:
№1
№2

P.S. сам не юзал, попробуй разобраться...
2
Почемучка)
 Аватар для Ddv122
1244 / 304 / 30
Регистрация: 23.12.2010
Сообщений: 2,001
Записей в блоге: 1
27.04.2012, 21:08  [ТС]
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
18 / 34 / 2
Регистрация: 28.01.2012
Сообщений: 181
27.04.2012, 21:22
EdarGp
Вложения
Тип файла: rar USB_Disable.rar (13.6 Кб, 36 просмотров)
1
 Аватар для QWIPQ
144 / 123 / 14
Регистрация: 10.10.2011
Сообщений: 366
Записей в блоге: 2
27.04.2012, 21:35
C++
1
SendMessage(WM_DEVICECHANGE,DBT_DEVICEREMOVECOMPLETE,NULL)
попытайся вот так

или так
1
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
27.04.2012, 21:35
Помогаю со студенческими работами здесь

Подключенные библиотеки
Помогите нубу разобраться что да как На странице подключаю две библиотеки &lt;script...

Не работают подключенные библиотеки
друзья такая беда, не знал в какую тему написать: Подключены две библиотеки: &lt;script...

Подключенные устройства и их список
Доброго времени суток, форумчане! Необходимо получить список всех подключенных периферийных устройств, которые подключены к компьютеру в...

ip подключенные к порту cisco
День добрый! Интересует такой вопрос, возможно ли узнать какие ip адреса подключены к определённому порту cisco Catalyst 3550 Series Device...

Система не видит подключенные смартфоны
Дело в том что после перестановки системы у меня не установлены драйвера на подключаемые телефоны и при подключении к ПК они в диспетчере...


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

Или воспользуйтесь поиском по форуму:
20
Ответ Создать тему
Новые блоги и статьи
Советы по крайней бережливости. Внимание, это ОЧЕНЬ длинный пост.
Programma_Boinc 28.12.2025
Советы по крайней бережливости. Внимание, это ОЧЕНЬ длинный пост. Налог на собак: https:/ / **********/ gallery/ V06K53e Финансовый отчет в Excel: https:/ / **********/ gallery/ bKBkQFf Пост отсюда. . .
Кто-нибудь знает, где можно бесплатно получить настольный компьютер или ноутбук? США.
Programma_Boinc 26.12.2025
Нашел на реддите интересную статью под названием Anyone know where to get a free Desktop or Laptop? Ниже её машинный перевод. После долгих разбирательств я наконец-то вернула себе. . .
Thinkpad X220 Tablet — это лучший бюджетный ноутбук для учёбы, точка.
Programma_Boinc 23.12.2025
Рецензия / Мнение/ Перевод Нашел на реддите интересную статью под названием The Thinkpad X220 Tablet is the best budget school laptop period . Ниже её машинный перевод. Thinkpad X220 Tablet —. . .
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
Сколько Государство потратило денег на меня, обеспечивая инсулином. Вот решила сделать интересный приблизительный подсчет, сколько государство потратило на меня денег на покупку инсулинов. . . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru