Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > Общие вопросы Delphi
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 17.12.2009, 18:47   #1
GenniY
Форумчанин
 
Регистрация: 09.09.2009
Сообщений: 181
Счастье Хук wm_DeviceChange

Привет.
Интересно почему с помощью хука не отлавливает сообщение WM_DEVICECHENGE?
Такое, например, как нажатие кнопки ловит.

Код:
unit Unit1;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs;

type
  TForm1 = class(TForm)
    procedure FormCreate(Sender: TObject);
    procedure FormCloseQuery(Sender: TObject; var CanClose: Boolean);
    procedure FormDestroy(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;


var
  Form1: TForm1;
  HandleHook : HWND;
implementation

function Proc(code : Integer; wParam : Word; lParam : longint): LongInt; stdcall;
var
  Msg : PEventMsg;
begin
  msg := Pointer(lParam);
  if code >= 0 then
  begin
    Result := 0;
    if (Msg.message = wm_devicechange) then
    begin
    ShowMessage('das');
    end;


  end
  else
  begin
    Result := CallNextHookEx(HandleHook,code,wParam,lParam);
  end;
end;
{$R *.dfm}

procedure TForm1.FormCreate(Sender: TObject);
begin
HandleHook := SetWindowsHookEx(WH_JOURNALRECORD,@Proc,HInstance,0);
end;

procedure TForm1.FormCloseQuery(Sender: TObject; var CanClose: Boolean);
begin
if HandleHook<>0 then
UnhookWindowsHookEx(HandleHook);
end;

procedure TForm1.FormDestroy(Sender: TObject);
begin
if HandleHook<>0 then
UnhookWindowsHookEx(HandleHook);
end;

end.
Получил помощь — отблагодарил.
GenniY вне форума Ответить с цитированием
Старый 18.12.2009, 00:09   #2
BOBAH13
Android Developer
Старожил Подтвердите свой е-майл
 
Аватар для BOBAH13
 
Регистрация: 19.02.2007
Сообщений: 3,708
По умолчанию

Какой смысл делать хук на такое сообщений внутри программы ? Тем более есть более рациональные решения раз используите VCL.

В добавок из MSDN
Цитата:
A window receives this message through its WindowProc function.Remarks

For devices that offer software-controllable features, such as ejection and locking, the system typically sends a DBT_DEVICEREMOVEPENDING message to let applications and device drivers end their use of the device gracefully. If the system forcibly removes a device, it may not send a DBT_DEVICEQUERYREMOVE message before doing so.
Почитайте.. и обработать как я понял можно прямо в окне. Так что пробуйте
BOBAH13 вне форума Ответить с цитированием
Старый 18.12.2009, 16:35   #3
GenniY
Форумчанин
 
Регистрация: 09.09.2009
Сообщений: 181
Счастье

BOBAH13, спасибо за ответ.
По поводу того, что вы написали я в курсе.

У меня программа должна запускаться с флешки при её вставке и закрываться при вынимании. Первая часть работает. А вторая работает с помощью
Код:
 procedure WMDeviceChange(var message: TMessage); message WM_DEVICECHANGE;
но только когда программа запущена не с USB-носителя.

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

Какие есть варианты?
Получил помощь — отблагодарил.
GenniY вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Хук и потоки Murzilka153 Общие вопросы C/C++ 0 16.10.2009 11:59
Никак не могу разобраться с WM_DEVICECHANGE Никки Win Api 3 26.01.2009 11:08
локальный хук vitalik007 Win Api 3 16.05.2008 09:08
Беда с Кардридером при помощи WM_DEVICECHANGE eriser Win Api 1 30.01.2008 17:39
хук rpy3uH Win Api 0 30.10.2006 20:47