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

Определенные действия при подключении флэшки

18.04.2012, 12:19. Показов 3512. Ответов 15
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
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
  if ( Message.Msg == WM_DEVICECHANGE && Message.WParam == 0x8000 ) {
        char DiskLabel[MAX_PATH];
        WORD OldErrorMode;
        AnsiString dl;
        DWORD dr = GetLogicalDrives( );  // функция возвращает битовую маску
        for ( int x = 1; 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
                            {
                        PlaySoundW( L"alert.wav", 0, SND_ASYNC );   //проигрываем звук
                        GetVolumeInformation( dl.c_str( ), DiskLabel, MAX_PATH, NULL, NULL, NULL, NULL, 0 );
                        ComboBox1->Items->Add(( dl + "//" ) + " [" + DiskLabel + "]" );
                        // для отчета
                        dt = Now( ); // формат даты
                        memo->Lines->Add( DateToStr( dt ) + " " + TimeToStr( dt ) +
                                          " " + " - " + " Подключен накопитель: " "(" + ( dl ) +
                                          ")" + " " + DiskLabel + "" );
                        if ( Settings->CheckBox5->Checked ) {   //если стоит галочка на  CheckBox
                            Button1->Click( );                  //НАЖИМАЕТСЯ Button
                        }
                        if ( Settings->CheckBox6->Checked ) {   //если стоит галочка на  CheckBox
                            Button5->Click( );                  //НАЖИМАЕТСЯ Button
                        }
                        if ( Settings->CheckBox7->Checked ) {   //если стоит галочка на  CheckBox
                            Button2->Click( );                  //НАЖИМАЕТСЯ Button
                        }
                        if ( Settings->CheckBox8->Checked ) {   //если стоит галочка на  CheckBox
                            Button3->Click( );                  //НАЖИМАЕТСЯ Button
                        }
                        if ( Settings->CheckBox9->Checked ) {    //если стоит галочка на  CheckBox
                            Button4->Click( );                   //НАЖИМАЕТСЯ Button
                        }
                    }
                }
            }
        }
    }
}
Этот код позволяет выполнять определенные действия при подключении флэшки
Все работает хорошо.Но есть 1 проблема
Код перехватывает флэшку , удаляет с неё необходимые папки, и диск появляется в системе.
1)Мне нужно удалить папки ищё раз при появлении диска в explorere или примерно через 10 секунд после выполнения этого кода.
2)И ещё раз удалить папки при отключении флэшки.
По 1 пункту таймер делать не сообразно, так как время может менятся от 3-20 сек.
Нужно как то повторить код, после этого кода с задержкой 2 секунды.
Я понимаю что по 2 пункту нужно копать в сторону
C++
1
WM_DEVICECHANGE && Message.WParam == 0x8000
Может кто небудь чем небудь поможет?
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
18.04.2012, 12:19
Ответы с готовыми решениями:

Выполнять определенные действия при любом выходе из функции
Есть функция, в которой ряд ветвлений и return'ов... при этом хотелось бы при каждом return'е выполнять определенные действия (обнуление...

Label не меняет текст при подключении флэшки
Добрый день. Пробую записывать файлы на флешку по событию подключения USB, все функции работают, но строка уведомлений почему то не выводит...

Определенные действия программы при разрыве сети
Как сделать так, что бы при сбои сети, к примеру, когда связь розорвата, а я пытаюсь что то отправить не выводило ошибку, а просто...

15
 Аватар для cpp_developer
20124 / 5691 / 417
Регистрация: 09.04.2010
Сообщений: 22,546
Записей в блоге: 1
18.04.2012, 12:29
Цитата Сообщение от EdarGp Посмотреть сообщение
Код перехватывает флэшку , удаляет с неё необходимые папки, и диск появляется в системе.
1)Мне нужно удалить папки ищё раз при появлении диска в explorere или примерно через 10 секунд после выполнения этого кода.
2)И ещё раз удалить папки при отключении флэшки.
Цель-то какая? Не лихое ли дело вы задумали?
0
Почемучка)
 Аватар для Ddv122
1244 / 304 / 30
Регистрация: 23.12.2010
Сообщений: 2,001
Записей в блоге: 1
18.04.2012, 12:52  [ТС]
Цель-то какая? Не лихое ли дело вы задумали?
Программа для универа, в стадии Beta уже запущена и работает
+> Удаляет все файлы с расширением *.lnk с корня флэшки
+> Убирает скрытый и системный атрибут у всех файлов в корне флэшки
+> удаление файлов и папок по черному списку

В таком роде маленький "антивирус"...Но проблема такова, флэшку то она чистит, ну если вирус есть на пк, он её повторно заражает.через секунды после моей программы.Заражение происходит тогда когда диск появляется в explorer . а это уже после кода.

Добавлено через 11 минут
DRIVE_TYPE_UNDTERMINED не знаете какой синтаксис буден на С++ Builder?
0
872 / 448 / 35
Регистрация: 25.10.2011
Сообщений: 910
18.04.2012, 13:08
Цитата Сообщение от EdarGp Посмотреть сообщение
2)И ещё раз удалить папки при отключении флэшки.
Анриал в случае с вирусом. При безопасном отключении вирус, в лучшем случае в последний момент запишет свои файлы и произойдет отключение, а в обычном варианте - безопасное отключение будет невозможно из-за того, что файлы заняты. Удалить перед тем, как ее нервно вынут... при такой постановке у меня в голове всегда мысли о проводах подведенных к креслу. В случае, если вирус повторно записывает данные один раз, что мешает отмерить минуту, удалить повторно и сообщить "Вселенная больше не в апасносте!!1"
Цитата Сообщение от EdarGp Посмотреть сообщение
Нужно как то повторить код, после этого кода с задержкой 2 секунды.
C++
1
2
KillAndDestoy();
Sleep(2000);
Для справки: 99% университетских вирусов блокируются установкой NTFS на накопитель и блока основного каталога для записи, для всех кроме указанных пользователей (обычно админская учетка на домашнем стационаре). А еще лучше, выдать права на запись только одной папке на флешке (некий буфер/шлюз), тогда вирусы вообще обижаются.

Добавлено через 2 минуты
Цитата Сообщение от EdarGp Посмотреть сообщение
DRIVE_TYPE_UNDTERMINED не знаете какой синтаксис буден на С++ Builder?
Насколько помню, GetDriveType - WinAPI функция, а значит такой же
2
 Аватар для Samrisbe
1365 / 732 / 67
Регистрация: 28.01.2011
Сообщений: 2,069
18.04.2012, 16:11
функцию которая бы отлавливала момент обращения к проводнику
напоминаю про поиск по форуму совсем свежая тема...
1
Эксперт С++
 Аватар для Avazart
8484 / 6151 / 615
Регистрация: 10.12.2010
Сообщений: 28,683
Записей в блоге: 30
18.04.2012, 17:59
Не понимаю, что защищает программа комп или флешку?
И почему не обойтись обычным антивирусником?

В свое время на институте ходил вирус который скрывал папки на флешке и и фигачил вместо них ярлыки на самого себя,авторан клепал и себя копировал.
Лечился легко антивирусом. Но приходилось каждый раз менять атрибуты файлов и чистить флешку поэтому пришлось писать програмулену.

Но врятле такие программы канают в качестве защиты.
1
Почемучка)
 Аватар для Ddv122
1244 / 304 / 30
Регистрация: 23.12.2010
Сообщений: 2,001
Записей в блоге: 1
18.04.2012, 19:29  [ТС]
Но приходилось каждый раз менять атрибуты файлов и чистить флешку поэтому пришлось писать програмулену.
Вот я и написал програмулину)
Но в ней есть 1 недоработка.
Файлы вируса, ярлыки все удаляет.
Атрибуты делает стандартными.
Но если есть вирус на пк, то он после моей програмулинки повторно заражает флэшку, через пару секунд.
И тогда приходится использовать программу в ручном режиме(кнопкой лечение) и всё работает как надо.Но хотелось бы всё это автоматизировать.
0
Эксперт С++
 Аватар для Avazart
8484 / 6151 / 615
Регистрация: 10.12.2010
Сообщений: 28,683
Записей в блоге: 30
18.04.2012, 20:09
Не проще ли установить на комп антивирусник? например NOD32 c этим справлялся (при последних обновлениях).

Я пытался отследить что делает вирус и понял что ехе файл может быть с разным именем, а значит и пытаться отследить его будет тяжело.

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

Знаю есть такая вещь как мониторинг каталогов, может её применить ну или тупо сверять размер данных на флешки с размером после чистки и проводить чистку если она отличается
1
Почемучка)
 Аватар для Ddv122
1244 / 304 / 30
Регистрация: 23.12.2010
Сообщений: 2,001
Записей в блоге: 1
19.04.2012, 17:45  [ТС]
Avazart, я то понимаю что лучше поставить антивирусник, но это универ, и не кто не следит за компьютерами и т.д...И + это моя дипломная работа.
удаление всех скрытых *.exe с ApplicationData (в разных каталогах) в XP и в user\appdata в win7.
Вот это вирус.
мне по сути просто нужно повторить мой код, при появлении диска в explorer.
DRIVE_TYPE_UNDTERMINED...
Code
1
[C++ Error] Unit1.cpp(64): E2451 Undefined symbol 'DRIVE_TYPE_UNDTERMINED'
Не понимаю, что защищает программа комп или флешку?
И почему не обойтись обычным антивирусником?
Программа в принципе защищает и то и то ,
Для пк- программа удаляет (файлы и папки)вируса, ярлыки до того как диск появится в exploorer
Для флэшки- уберает сурытые атрибуты файлов и папок с корня диска

Добавлено через 31 минуту
KillAndDestoy();
Sleep(2000);
KillAndDestoyВ builder 2006 такого нет)не в справке, не в google
0
Эксперт С++
 Аватар для Avazart
8484 / 6151 / 615
Регистрация: 10.12.2010
Сообщений: 28,683
Записей в блоге: 30
19.04.2012, 17:50
C++
1
DRIVE_TYPE_UNDTERMINED
Так это ведь числовая констана нужно просто найти её определение в h файлах и взять ее числовое значение
1
Почемучка)
 Аватар для Ddv122
1244 / 304 / 30
Регистрация: 23.12.2010
Сообщений: 2,001
Записей в блоге: 1
20.04.2012, 18:47  [ТС]
KillAndDestoy();
Sleep(2000);
Можете пояснить?
0
872 / 448 / 35
Регистрация: 25.10.2011
Сообщений: 910
20.04.2012, 23:03
Цитата Сообщение от EdarGp Посмотреть сообщение
KillAndDestoyВ builder 2006 такого нет)не в справке, не в google
Я бы весьма удивился, если бы нашлось. Под "убить и уничтожить" я имел ввиду вашу процедуру по удалению файлов. А затем ожидание в 2 секунды после этого действия. Но если хотите более "точную" синхронизацию, то используйте функции в отдельном потоке, а потом используйте WaitForSingleObject для того, чтобы синхронизировать действия, но мне по прежнему кажется странным метод борьбы с вирусом на флешке.
1
Почемучка)
 Аватар для Ddv122
1244 / 304 / 30
Регистрация: 23.12.2010
Сообщений: 2,001
Записей в блоге: 1
20.04.2012, 23:53  [ТС]
C++
1
2
    Button3Click(Sender);
    Sleep(2000);
Приводит к зависанию...
0
Эксперт С++
 Аватар для Avazart
8484 / 6151 / 615
Регистрация: 10.12.2010
Сообщений: 28,683
Записей в блоге: 30
21.04.2012, 00:02
Ну поэтому и должно быть в потоке...
1
Почемучка)
 Аватар для Ddv122
1244 / 304 / 30
Регистрация: 23.12.2010
Сообщений: 2,001
Записей в блоге: 1
21.04.2012, 00:13  [ТС]
Цитата Сообщение от Avazart Посмотреть сообщение
Ну поэтому и должно быть в потоке...
Что то я не дочитал на радостях, извиняюсь, а как создать правильно поток? File | New | Other |Thread Object. Всё что я знаю
0
Эксперт С++
 Аватар для Avazart
8484 / 6151 / 615
Регистрация: 10.12.2010
Сообщений: 28,683
Записей в блоге: 30
21.04.2012, 00:31
Либо CreateThread(), но это не всегда подходит

Добавлено через 4 минуты
Поток: программа зависает во время парсинга
1
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
21.04.2012, 00:31
Помогаю со студенческими работами здесь

Определённые действия с TreeView...
Подскажите как для определённой группы в TreeView сделать условия? Пример: ПК Устройства Мыши Клавиатуры Не...

Сделать так чтобы при подключении нулевого порта выполнялся один цикл кода а при подключении другого - другой
Как сделать так чтобы при подключении нулевого порта выполнялся один цикл кода, а при подключении другого другой. И вообще возможно ли это...

Определить четность числа и выполнить определенные действия
доброго времени суток, помогите пожалуйста, завтра экзамен((( Рассмотрим некоторое натуральное число п (п &gt; 1). Если оно четно, то...

Выполнять действия через определенные интервалы таймера
Нужно считывать информацию с таймера и в соответствии со временем делать клик мышкой. Таймер до ТЫСЯЧНЫХ мсек.:00.00.000сек Пример: в txt...

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


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

Или воспользуйтесь поиском по форуму:
16
Ответ Создать тему
Новые блоги и статьи
Thinkpad X220 Tablet — это лучший бюджетный ноутбук для учёбы, точка.
Programma_Boinc 23.12.2025
Thinkpad X220 Tablet — это лучший бюджетный ноутбук для учёбы, точка. Рецензия / Мнение/ Перевод Сайт называется reddit: The Thinkpad X220 Tablet is the best budget school laptop period. Это. . .
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
Кстати, совсем недавно имел разговор на тему медитаций с людьми. И обнаружил, что они вообще не понимают что такое медитация и зачем она нужна. Самые базовые вещи. Для них это - когда просто люди. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru