Почемучка)
 Аватар для Ddv122
1244 / 304 / 30
Регистрация: 23.12.2010
Сообщений: 2,001
Записей в блоге: 1

Как в потоке организовать открытие флешки

25.05.2012, 00:43. Показов 6400. Ответов 77
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Как уже все слышали у меня есть 2 проблемы
1)Открытие проводника при подключении флэшки (на XP) на 7 всё ок, Xp не может быстро сооброзить
2)Программа удаляет файлы с флэшки до появления флэшки в проводнике, и как только флэшка появляется в проводнике другая программа заново их копирует на флэшку, а мне нужно их удалить)
Ставить на таймер как то не профессионально :| гыыы, умные люди советуют в поток...
Как создать какой-нить элементарный поток(Thread например),также в потоке организовать открытие флешки чтоб все шло по порядку а все значения передавались после открытия например.
А как его реализовать то???
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
25.05.2012, 00:43
Ответы с готовыми решениями:

Как организовать открытие другой формы в соответствии поставленого флажка
Всем привет. Как организовать открытие другой формы в соответствии поставленого флажка Пример Форма А - Форма Б -

Открытие окна в новом потоке.
Есть основное окно, на котором находиться кнопка, и другие контролы. При её нажатии обрабатывается достаточное большое количество данных и...

Открытие формы в отдельном потоке
Добрый день, такой вопрос: имеется главная форма, на ней кнопка, которая делает любую длительную операцию. Создал отдельную форму на ней...

77
Почемучка)
 Аватар для Ddv122
1244 / 304 / 30
Регистрация: 23.12.2010
Сообщений: 2,001
Записей в блоге: 1
29.05.2012, 14:50  [ТС]
Студворк — интернет-сервис помощи студентам
LK может вы что нибудь подскажите как это лучше реализовать?

Добавлено через 18 часов 22 минуты
голова треснет, нужно следить за проводником, его активностью....нужен цикл который будет пробовать открыть покуда не откроет,
C++
1
2
3
4
if(GetDriveType(Edit1->Text) == DRIVE_NO_ROOT_DIR)(или что то вроде этого
повторить команду много много раз)
else
 открыть диск) и остановить проверку
или
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
ProgressBar1->Position = 0;
char disk[100];
strcpy( disk, Edit1->Text.c_str( ) );
bool ready = false;
do {
        ready=DirectoryExists(disk); // ïûòàåìcÿ îòêðûòü êîðíåâóþ äèðåêòîðèþ
        Application->ProcessMessages();
} while (!ready);
try {
        ShellExecute( Handle, "open", disk, NULL, NULL, SW_RESTORE );
        dt = Now( ); // ôîðìàò äàòû
        Log->Lines->Add( DateToStr( dt ) + " " + TimeToStr( dt ) + " " + " - " + "Îòêðûò äèñê: " + "(" + Edit1->Text.SubString(1,2) +")" );
        ProgressBar1->Position = 100;
} catch (...) {
 ещё раз и раз стучу к диску;}
Просто без этих функций моя дипломка не рабочая выходит...
0
 Аватар для cpp_developer
20124 / 5691 / 417
Регистрация: 09.04.2010
Сообщений: 22,546
Записей в блоге: 1
29.05.2012, 18:08
Цитата Сообщение от EdarGp Посмотреть сообщение
LK может вы что нибудь
может быть, может быть...
А ловить системные сообщения без цикла нельзя? Где-то уже было и не раз про WM_DeviceChange .
0
Эксперт С++
 Аватар для Avazart
8489 / 6156 / 615
Регистрация: 10.12.2010
Сообщений: 28,683
Записей в блоге: 30
29.05.2012, 18:14
LK, у него на XP DeviceChange как-то неправильно срабатывает вроде как...
0
Почемучка)
 Аватар для Ddv122
1244 / 304 / 30
Регистрация: 23.12.2010
Сообщений: 2,001
Записей в блоге: 1
29.05.2012, 19:36  [ТС]
LK, на xp задержка....около секунды или трёх...
0
 Аватар для cpp_developer
20124 / 5691 / 417
Регистрация: 09.04.2010
Сообщений: 22,546
Записей в блоге: 1
29.05.2012, 20:23
EdarGp, дык, это не смертельно в данном случае - пишем письмо пользователю в стиле "Анализ системных служб. Ждите.", что, наверное, не такая уж и ложь , тоже, в данном случае.

И я не помню, от чего у вас задержка.
0
Эксперт С++
 Аватар для Avazart
8489 / 6156 / 615
Регистрация: 10.12.2010
Сообщений: 28,683
Записей в блоге: 30
29.05.2012, 20:58
"Анализ системных служб. Ждите.", что, наверное, не такая уж и ложь
Ага так почти безпаливн... сразу после открытия проводника...
0
Почемучка)
 Аватар для Ddv122
1244 / 304 / 30
Регистрация: 23.12.2010
Сообщений: 2,001
Записей в блоге: 1
30.05.2012, 00:34  [ТС]
LK,
Цитата Сообщение от Avazart Посмотреть сообщение
DeviceChange
видит диск но делает его доступным через 1-3 секунды...
если я на DeviceChange вешаю открытие диска он не откроет, нужно ждать 3 секунды и открывать его
0
Почемучка)
 Аватар для Ddv122
1244 / 304 / 30
Регистрация: 23.12.2010
Сообщений: 2,001
Записей в блоге: 1
31.05.2012, 22:49  [ТС]
Цитата Сообщение от EdarGp Посмотреть сообщение
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
ProgressBar1->Position = 0;
char disk[100];
strcpy( disk, Edit1->Text.c_str( ) );
bool ready = false;
do {
 ready=DirectoryExists(disk); // пытаемcя открыть корневую директорию
 Application->ProcessMessages();
} while (!ready);
try {
 ShellExecute( Handle, "open", disk, NULL, NULL, SW_RESTORE );
 dt = Now( ); // формат даты
 Log->Lines->Add( DateToStr( dt ) + " " + TimeToStr( dt ) + " " + " - " + "Открыт диск: " + "(" + Edit1->Text.SubString(1,2) +")" );
 ProgressBar1->Position = 100;
} catch (...) {
 ещё раз и раз стучу к диску;}
Так не работает (на Xp равно ошибка), добры люди помогите.
Ошибка Диск не найден! Жму окай, 2 секунды и он появляется в проводнике.
0
 Аватар для cpp_developer
20124 / 5691 / 417
Регистрация: 09.04.2010
Сообщений: 22,546
Записей в блоге: 1
31.05.2012, 22:57
Значит, срабатывает ваш следующий код стука, которого здесь нет.
1
Почемучка)
 Аватар для Ddv122
1244 / 304 / 30
Регистрация: 23.12.2010
Сообщений: 2,001
Записей в блоге: 1
31.05.2012, 23:38  [ТС]
LK,

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
void __fastcall TMain::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 = 1; 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)       //исключаем неизвестные диски
                    {
                    PlaySoundW( L"alert.wav", 0, SND_ASYNC );   //проигрываем звук
                            GetVolumeInformation( disk.c_str( ), DiskLabel, MAX_PATH, NULL, NULL, NULL, NULL, 0 );    //получаем Имя диска
                            // для отчета
                            dt = Now( ); // полный формат даты
                            Log->Lines->Add( DateToStr( dt ) + " " + TimeToStr( dt ) +
                                             " " + " - " + " Подключен накопитель: " "(" + ( disk.SubString(1,2) ) +
                                             ")" + " " + DiskLabel + "" );     //указываем в Лог время,дату, имя диска.
                        Edit1->Text=disk;         //результат в Edit1
                            Button6->Click();     //жмяк на кпопку
                        }
+ на Button6->Click();

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
ProgressBar1->Position = 0;
char disk[100];
strcpy( disk, Edit1->Text.c_str( ) );
bool ready = false;
do {
 ready=DirectoryExists(disk); // пытаемcя открыть корневую директорию
 Application->ProcessMessages();
} while (!ready);
try {
 ShellExecute( Handle, "open", disk, NULL, NULL, SW_RESTORE );
 dt = Now( ); // формат даты
 Log->Lines->Add( DateToStr( dt ) + " " + TimeToStr( dt ) + " " + " - " + "Открыт диск: " + "(" + Edit1->Text.SubString(1,2) +")" );
 ProgressBar1->Position = 100;
} catch (...) {
0
Почемучка)
 Аватар для Ddv122
1244 / 304 / 30
Регистрация: 23.12.2010
Сообщений: 2,001
Записей в блоге: 1
10.06.2012, 12:18  [ТС]
Вот и я)Доброго дня всем) Идей нет по повод моей проблемы?
0
 Аватар для cpp_developer
20124 / 5691 / 417
Регистрация: 09.04.2010
Сообщений: 22,546
Записей в блоге: 1
10.06.2012, 12:24
Многопотоковость и THREAD...
1
 Аватар для QWIPQ
144 / 123 / 14
Регистрация: 10.10.2011
Сообщений: 366
Записей в блоге: 2
10.06.2012, 13:12
вопрос из этой серии:
"Вопросы комплексной защиты от Autorun-вирусов на флешках"
"Ограничение на использование USB-накопителей"
более подробная
во второй ссылке тебя должен интересовать больше такой момент:
Запрет записи на USB-устройство.
HKLM\SYSTEM\CurrentControlSet\control\St orageDevicePolicies.
Параметр «WriteProtect» — скорей всего его нет. Тогда его нужно создать с типом «dword» и присвоить значение «1». И не забыть перегрузить компьютер. Чтобы восстановить — присвоить значение «0».

единственный момент как это сделать динамически без перезагрузки... если можно было бы реализовать программно блокирование флешки на запись то эт решит все твои проблемы
2
Почемучка)
 Аватар для Ddv122
1244 / 304 / 30
Регистрация: 23.12.2010
Сообщений: 2,001
Записей в блоге: 1
10.06.2012, 13:23  [ТС]
QWIPQ, это я всё знаю, во время тестирования нашли баги
1)Автоматически открыть флэшку в проводнике на Win Xp не возможно с кодом
C++
1
2
void __fastcall TMain::WMDeviceChange( TMessage &Message ) {
    if ( Message.Msg == WM_DEVICECHANGE && Message.WParam == 0x8000 ) {
так как мы получаем имя диска, путь и т.д , но для проводника она ещё не готова...
2)Если Win Xp заражена вирусом, тогда на автомате флэшка не ловится.... только при повторном ручном сканировании
3)Win 7 и Xp Если на Пк есть вирус он повторно заражает флэшку так как этим кодом я ловлю и удаляю всю нечисть
C++
1
2
void __fastcall TMain::WMDeviceChange( TMessage &Message ) {
    if ( Message.Msg == WM_DEVICECHANGE && Message.WParam == 0x8000 ) {
потом флэшка появляется в проводнике и повторно заражается)
0
 Аватар для QWIPQ
144 / 123 / 14
Регистрация: 10.10.2011
Сообщений: 366
Записей в блоге: 2
10.06.2012, 13:24
P.S. не во всех источниках говорится про перезагрузку компа... нужно попробывать без перезагрузки сделать эту операцию... в итоге если все гуд своей прогой ты сможет открывать или загрывать права на запись на флешку...

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

Но не открывает флэшку в проводнике при её подключении
P.S. хм, над покумекать еще)
1
Почемучка)
 Аватар для Ddv122
1244 / 304 / 30
Регистрация: 23.12.2010
Сообщений: 2,001
Записей в блоге: 1
10.06.2012, 13:30  [ТС]
QWIPQ, мне не нужен запрет на запись
У меня практически всё работает
Но не открывает флэшку в проводнике при её подключении, повторить функцию удаления в течении допустим 15 секунд без тормозов... ну и всё)
0
Эксперт С++
 Аватар для Avazart
8489 / 6156 / 615
Регистрация: 10.12.2010
Сообщений: 28,683
Записей в блоге: 30
10.06.2012, 13:39
Где то слышал что можно защитить флешку путем создания на ней папок и файлов с именами такими же какие и у файлов вируса только изменив атрибуты так что бы их нельзя было изменять - т.е вирус попросту не сможет создать свои файлы из-за этого....

Добавлено через 4 минуты
А вот же есть тут...

Создается bat-файл (например, с именем flashprotect.bat(см. вложение)) и следующим содержимым:
Code
1
2
3
4
5
attrib -s -h -r autorun.*
del autorun.*
mkdir %~d0AUTORUN.INF
mkdir "?%~d0AUTORUN.INF.."
attrib +s +h %~d0AUTORUN.INF
1
Почемучка)
 Аватар для Ddv122
1244 / 304 / 30
Регистрация: 23.12.2010
Сообщений: 2,001
Записей в блоге: 1
10.06.2012, 13:39  [ТС]
Avazart, да, я это реализовывал уже...
0
 Аватар для QWIPQ
144 / 123 / 14
Регистрация: 10.10.2011
Сообщений: 366
Записей в блоге: 2
10.06.2012, 13:43
ну есть еще способ кроме этого сделать защитный файл который сжирает все свободное место на флешке... в итоге вирус просто не сможет копироваться... создать как Avazart предлагает файл авторан и чтоб он весил все свободное место на флешке...
1
Почемучка)
 Аватар для Ddv122
1244 / 304 / 30
Регистрация: 23.12.2010
Сообщений: 2,001
Записей в блоге: 1
10.06.2012, 13:49  [ТС]
QWIPQ, а если я на флэшку то скопировать сам хочу?)И место занято всё)Если освобожу вирус с копируется на флэшку )так как в процессах он
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
10.06.2012, 13:49
Помогаю со студенческими работами здесь

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

Ярлык на открытие флешки
Здравствуйте уважаемые специалисты CyberForum. Благодарю за вашу бесценную работу. Прошу описать вкратце логику создания...

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

Как получить значение переменной созданной в потоке, в другом потоке?
Добрый день :) Возник такой вопрос &quot;как получить значение переменной созданной в потоке, в другом потоке?&quot; Не знаю, как правильно...

Ошибка флешки - Ярлык на открытие флешке в самой ней!
У меня на флешке какойто странный вирус!!! Открываю я флешку через мой комп*ютер, там внутри ярлык на эту же флешку...когда я его открываю...


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

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

Новые блоги и статьи
19. здоровье, усталость и психотип работника влияют на производительность предприятия, и наоборот, производительность на здоровье, усталось и психотип
anaschu 28.05.2026
Дискретно-событийная модель рабочего коллектива на AnyLogic: здоровье, выгорание, психотипы и микростимуляция Привет, коллеги. Хочу поделиться итогами нескольких недель работы над симуляционной. . .
"Прокси" для последовательного порта
Eddy_Em 28.05.2026
Эту штуку написал я достаточно давно. Но сейчас вот понадобилось настроить датчик грозы, но при этом не отключать его от "метеодемона". Соответственно, надо запустить этот "прокси": метеодемон будет. . .
Рефакторинг программы уравнивания.
Massaraksh7 26.05.2026
Пример по предыдущей записи в блоге. Но, надо заметить, что, во-первых, там оптимизация не только математики, но и работы с базой данных, и с графами, а во-вторых, это ещё не всё.
Использование TThread в Lazarus для математических вычислений.
Massaraksh7 25.05.2026
Производя рефакторинг своих программ на предмет ускорения их работы, обратил внимание на такой аспект, как сокращение времени матвычислений. Дело в том, что приходится работать с большими матрицами. . .
Модель здравосохранения 18. Чем здоровее работник, тем быстрее выгорает
anaschu 24.05.2026
Имитационная модель корпоративного здравоохранения: что показывает математика Сегодня в модели рабочего коллектива на AnyLogic появились три новые механики — выгорание через накопленную усталость,. . .
Модель здравосохранения 17. Планы на выгорание
anaschu 23.05.2026
Вот конкретная схема реализации: В классе Работник добавить: накопленнаяУсталость — растёт каждый час работы, снижается в перерывы и болезни коэффициентПрезентеизма — снижает продуктивность. . .
Изменение цветов в палитре gif файла aka фавикона
russiannick 23.05.2026
Изменение цветов в палитре gif файла, юзаемого как фавиконка в составе html-файла, помещенная в base64, средствами нативного Java Script, навеянное сном в майский день. Для работы необходим браузер,. . .
Модель здравосохранения 16. Слишком хорошие и здоровые сотрудники уходят, недовольные зарплатой
anaschu 23.05.2026
Отладка увольнений и настройка производительности Сегодня во второй половине дня разобрались с механикой увольнений и настроили коэффициент сложности заданий. Вот что было сделано. . . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru