Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "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
2-1188314106
Bora.ru
2007-08-28 19:15
2007.09.30
Копирование файла по сети


15-1188440446
Slider007
2007-08-30 06:20
2007.09.30
С днем рождения ! 30 августа 2007 четверг


15-1188495796
EFFe
2007-08-30 21:43
2007.09.30
C# Хорошая книга


3-1180000443
TCrash
2007-05-24 13:54
2007.09.30
IB expert &amp; *.fdb


2-1188251587
Dummy
2007-08-28 01:53
2007.09.30
Как узнать погоду через инет средствами Дельфи 5?





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский