| Типы программирования, программирование, языки программирования, книги программирование | На сайте представлена информация про программирование в Интернете и работу |
|
Handle, пишет- нет такой переменной DLL и потоки!, Остановить DLL!!! Delphi, API, Message, Где найти соответствующие константы как пол. коорд. курсора мыши над TScroll Реестр, Работа с реестром Доступ к локальным дискам (XP), открытие\закрытие доступа... Использование mlang.dll Трей, Глюки в WinXP, Win2k Как очистить экран в консольном приложении? Лдюди объясните по русски как установить Rxlib, для Delphi 7.0 ошибка MItec, Помогите разобраться Перенаправление ввода и вывода, Bind Shell Текст вместо иконки Браузер на Delphi Помогите не могу понять!, Про окна Как упрятать программу Помогите с иконкой в трее!, иконка втрее Как Вы относитесь к курящим девушкам? IP адрес, связь Кнопки, Интерес Рисунок с рабочго стола по LAN, Рисунок с рабочго стола Как распознать запуск другой проги? Блокировка CD-ROMа полосы прокрутки у TMemo & TListBox, как сделать их плоскими и другого цвета Hook на процессы!, Отловить запуск и завершение процесса! Ресурсы: окошки Температура процессора, Как контролировать Как загружать прогу в безопасном режиме Идентификаторы в Delphi Новый форум, Новый форум Данные из клавы направить не туда. как получить температуру?, как программно получить температуру? ПРограммирование HASP-ключей, ЗАдали лабораторную .. ничего не понятно Есть ли в Делфи реализация интерфейса, а-ля интерфейс как в Java ?? Как минимизировать приложение при старте ?, Мне казалось что это так просто... Что такое хинты, и как их показывать Запрет запуска хранителя экрана, при работе программы Восстановление удалённых файлов Поиск ехе, Поиск ехе в директориях Работа с ОЗУ, как? Как загрузить данные из Reources ? А-у! Помогите, не работает детская процедура, Процедура сбора статистики работы СД Как программно запретить вход в виндовс убить заголовок окна, чужого Работа в потоке, Ну, типа, работа в потоке Как сделать окно поверх панели задач Как вычислить подключение винта к USB Как избежать LOg off/on при изменении реестра, Столкнулся с такой проблемой. метод Synchonize объекта TThread Функция типа TStringList Где храняться пути для переменных окружения ? Как сейчас на счет бесплатного Delphi 6 personal Дефрагментация Скрытие окна..., ...как это делает LiteAlloy Как сделать, чтобы фокус ввода окна нельзя, отменить пока его не закроешь Програмка для тестирования памяти, алгоритмы есть Серийный номер процессора, Как получить? Внедрение DLL Как получить информацию запущен процесс или нет ?? Hook на печать, это возможно? Текстурирование, как сделать скины для окон Прочитать значение из оперативки, ID процесса известен, адрес тоже. Надо прочитать куда нить значения из памяти, сабж Как Вы относитесь к курящим девушкам? объем физического диска под Win9x Кто пробывал написать свой компилятор ??, Нужен ваш хелп. WM_DEVICECHANGE, отслеживаем изменения одного устройства Порты и Дельфи, HELP!!!!!! CreateRemoteThread, как использовать? Как это работает?, есть такая прога... LClock |
Платные хостинги Раскрутка сайта Книги по программированию Как вычислить подключение винта к USB
- Задача - засечь подключение винта к USB, и как только это произойдет, слить с него нужные файлы. Если кто сталкивался просьба поделиться примером кода. - Наверное, проверять через определённое время, какие диски есть в системе. См. ф-цию GetDriveType. Надо посмотреть, что она выдаёт на флешку... Проверть не могу, сего девайса не имею. - То dm9, согласен, можно и так. Но сомневаюсь, что винда имеенно так это делает. Она ж не проверяет каждый промежуток веремени все диски в системе. Мне так кажется. Когда подключаем винт в ЮСБ в трее появляется иконка, что подключили что-то к юсб. Вот как можно перехватить этот момент? - Драйвер USB-контроллера в этот момент генерит в систему мессагу. Какую - ищи... - Может попробовать WM_DEVICECHANGE ?+ RegisterDeviceNotification - Код unit u_USB;interfaceuses Windows, Messages, SysUtils, Classes, Forms;type PDevBroadcastHdr = ^DEV_BROADCAST_HDR; DEV_BROADCAST_HDR = packed record dbch_size: DWORD; dbch_devicetype: DWORD; dbch_reserved: DWORD;end; PDevBroadcastDeviceInterface = ^DEV_BROADCAST_DEVICEINTERFACE; DEV_BROADCAST_DEVICEINTERFACE = record dbcc_size: DWORD; dbcc_devicetype: DWORD; dbcc_reserved: DWORD; dbcc_classguid: TGUID; dbcc_name: short;end;const GUID_DEVINTERFACE_USB_DEVICE: TGUID = '{A5DCBF10-6530-11D2-901F-00C04FB951ED}'; DBT_DEVICEARRIVAL = $8000; // system detected a new device DBT_DEVICEREMOVECOMPLETE = $8004; // device is gone DBT_DEVTYP_DEVICEINTERFACE = $00000005; // device interface classtype TComponentUSB = class(TComponent) private FWindowHandle: HWND; FOnUSBArrival: TNotifyEvent; FOnUSBRemove: TNotifyEvent; procedure WndProc(var Msg: TMessage); function USBRegister: Boolean; protected procedure WMDeviceChange(var Msg: TMessage); dynamic; public constructor Create(AOwner: TComponent); override; destructor Destroy; override; published property OnUSBArrival: TNotifyEvent read FOnUSBArrival write FOnUSBArrival; property OnUSBRemove: TNotifyEvent read FOnUSBRemove write FOnUSBRemove; end;implementationconstructor TComponentUSB.Create(AOwner: TComponent);begin inherited Create(AOwner); FWindowHandle := AllocateHWnd(WndProc); USBRegister;end;destructor TComponentUSB.Destroy; begin DeallocateHWnd(FWindowHandle); inherited Destroy;end;procedure TComponentUSB.WndProc(var Msg: TMessage); begin if (Msg.Msg = WM_DEVICECHANGE) then begin try WMDeviceChange(Msg); except Application.HandleException(Self); end; end else Msg.Result := DefWindowProc(FWindowHandle, Msg.Msg, Msg.wParam, Msg.lParam);end;procedure TComponentUSB.WMDeviceChange(var Msg: TMessage);var devType: Integer; Datos: PDevBroadcastHdr;begin if (Msg.wParam = DBT_DEVICEARRIVAL) or (Msg.wParam = DBT_DEVICEREMOVECOMPLETE) then begin Datos := PDevBroadcastHdr(Msg.lParam); devType := Datos^.dbch_devicetype; if devType = DBT_DEVTYP_DEVICEINTERFACE then begin // USB Device if Msg.wParam = DBT_DEVICEARRIVAL then begin if Assigned(FOnUSBArrival) then FOnUSBArrival(Self); end else begin if Assigned(FOnUSBRemove) then FOnUSBRemove(Self); end; end; end;end;function TComponentUSB.USBRegister: Boolean;var dbi: DEV_BROADCAST_DEVICEINTERFACE; Size: Integer; r: Pointer;begin Result := False; Size := SizeOf(DEV_BROADCAST_DEVICEINTERFACE); ZeroMemory(@dbi, Size); dbi.dbcc_size := Size; dbi.dbcc_devicetype := DBT_DEVTYP_DEVICEINTERFACE; dbi.dbcc_reserved := 0; dbi.dbcc_classguid := GUID_DEVINTERFACE_USB_DEVICE; dbi.dbcc_name := 0; r := RegisterDeviceNotification(FWindowHandle, @dbi, DEVICE_NOTIFY_WINDOW_HANDLE); if Assigned(r) then Result := True;end;end.highlightSyntax('delphi2ZGI1Z','delphi'); - Когда я писал прогу для своего цифровика, чтобы сливать автоматически файлы при его подключении, я добавил ее в список AutoPlay (появляется при подключении съемного диска). Правда есть один недостаток: работает только в XP. Это сообщение отредактировал Ivan Kolesnikov - 26.3.2005, 12:49 |