Форум: "WinAPI";
Текущий архив: 2007.09.30;
Скачать: [xml.tar.bz2];
ВнизPlug&Play и DLL Найти похожие ветки
← →
Yosich (2007-04-01 12:29) [0]Подскажите как мне в моей DLL поставить хук чтобы отследить изменение оборудования. Надо определить когда установлена флэшка в комп.
← →
Чапаев © (2007-04-01 20:16) [1]А при чём тут DLL? Отлавливай сообщение WM_DEVICECHANGE.
← →
Yosich (2007-04-02 06:33) [2]когда я ставлю хук на сообщений WM_DEVICECHANGE, прога завершается аварийно при отключении/включении флэшки.
← →
SlymRO © (2007-04-02 07:16) [3]Yosich (02.04.07 6:33) [2]
Хук левой прошел :)type
TForm1 = class(TForm)
private
procedure WMDEVICECHANGE(var Message: TMessage); message WM_DEVICECHANGE;
end;
var Form1: TForm1;
implementation
{$R *.dfm}
procedure TForm1.WMDEVICECHANGE(var Message: TMessage);
begin
Application.MessageBox("WMDEVICECHANGE","WMDEVICECHANGE")
end;
← →
Yosich (2007-04-02 07:32) [4]а вот хотелось бы вот так. Но не работает!
function SysMsgProc(code : integer; wParam : word; lParam : longint) : longint; stdcall;
begin
if code = HC_ACTION then
if TMsg(Pointer(lParam)^).message = 537 then begin
//----------
end;
Result:= CallNextHookEx(CommonArea^.HookHandlePlugAndPlay, Code, wParam, lParam);
end;
function SetHookPlugAndPlay(Activate : BOOL): BOOL; stdcall; export;
begin
Result := FALSE;
if Activate then
begin
//GetCurrentThreadId
CommonArea^.HookHandlePlugAndPlay := SetWindowsHookEx(WH_GETMESSAGE, @SysMsgProc, hInstance, 0);
Result := (CommonArea^.HookHandlePlugAndPlay <> 0);
end
else
begin
if CommonArea^.HookHandlePlugAndPlay <> 0 then
begin
Result := UnhookWindowsHookEx(CommonArea^.HookHandlePlugAndPlay);
if Result then
CommonArea^.HookHandlePlugAndPlay := 0;
end;
end;
end;
← →
Сергей М. © (2007-04-02 08:22) [5]
> а вот хотелось бы вот так
А зачем хук-то ? Тем более глобальный ?
Ведь этот код после установки хука будет работать в каждом GUI-приложении !
А тебе достаточно в своем приложении поймать и обработать сообщение WM_DEVICECHANGE - оно посылается системой каждому приложению, в т.ч. и твоему.
Так что см. [3]
← →
Yosich (2007-04-02 08:29) [6]у меня смысл всего этого заключается в том, что моя DLL регистрируется в системе и грузится с експлорером. у меня самого приложения так такового и нет, только DLL. какие еще могут быть предложения? я в написании DLL не особо силен поэтому другого варианта не знаю.
← →
Сергей М. © (2007-04-02 08:55) [7]
> Yosich (02.04.07 08:29) [6]
И в этом случае глобальный хук вовсе не нужен.
Достаточно локального хука.
Установить его нужно на основной поток текущего процесса (т.е. процесса Explorer.exe), поскольку твоя dll будет загружаться именно в осн.потоке.
Страницы: 1 вся ветка
Форум: "WinAPI";
Текущий архив: 2007.09.30;
Скачать: [xml.tar.bz2];
Память: 0.46 MB
Время: 0.043 c