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

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

27.04.2012, 10:06. Показов 5560. Ответов 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
Ответ Создать тему
Новые блоги и статьи
Знаешь почему 90% людей редко бывают счастливыми?
kumehtar 14.04.2026
Потому что они ждут. Ждут выходных, ждут отпуска, ждут удачного момента. . . а удачный момент так и не приходит.
Фиксация колонок в отчете СКД
Maks 14.04.2026
Фиксация колонок в СКД отчета типа Таблица. Задача: зафиксировать три левых колонки в отчете. Процедура ПриКомпоновкеРезультата(ДокументРезультат, ДанныеРасшифровки, СтандартнаяОбработка) / / . . .
Настройки VS Code
Loafer 13.04.2026
{ "cmake. configureOnOpen": false, "diffEditor. ignoreTrimWhitespace": true, "editor. guides. bracketPairs": "active", "extensions. ignoreRecommendations": true, . . .
Оптимизация кода на разграничение прав доступа к элементам формы
Maks 13.04.2026
Алгоритм из решения ниже реализован на нетиповом документе, разработанного в конфигурации КА2. Задачи, как таковой, поставлено не было, проделанное ниже исключительно моя инициатива. Было так:. . .
Контроль заполнения и очистка дат в зависимости от значения перечислений
Maks 12.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "ПланированиеПерсонала", разработанного в конфигурации КА2. Задача: реализовать контроль корректности заполнения дат назначения. . .
Архитектура слоя интернета для сервера-слоя.
Hrethgir 11.04.2026
В продолжение https:/ / www. cyberforum. ru/ blogs/ 223907/ 10860. html Знаешь что я подумал? Раз мы все источники пишем в голове ветки, то ничего не мешает добавить в голову такой источник, который сам. . .
Подстановка значения реквизита справочника в табличную часть документа
Maks 10.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "ПланированиеПерсонала", разработанного в конфигурации КА2. Задача: при выборе сотрудника (справочник Сотрудники) в ТЧ документа. . .
Очистка реквизитов документа при копировании
Maks 09.04.2026
Алгоритм из решения ниже применим как для типовых, так и для нетиповых документов на самых различных конфигурациях. Задача: при копировании документа очищать определенные реквизиты и табличную. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru