![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
WH_SHELL [D5, Win95/98]
Orion2 © (2004-04-29 18:14:00)Почему отказывается работать код? Точнее он работает, но единственное, что приходит окну - HSHELL_LANGUAGE.
Это код библиотеки:
library ShellWnds;
uses
Windows, Messages, SysUtils;
{$R *.RES}
const
WM_SHELL = WM_USER + 200;
var
ShellHook: THandle;
function ShellProc(Code, WParam, LParam: integer): Longint; stdcall;
function GetShellWnd: THandle;
begin
Result:=FindWindow(nil, 'OrionShell');
end;
begin
case Code of
HSHELL_WINDOWCREATED,
HSHELL_WINDOWDESTROYED,
HSHELL_WINDOWACTIVATED,
HSHELL_LANGUAGE: SendMessage(GetShellWnd, WM_SHELL, Code, WParam);
end;
Result:=CallNextHookEx(ShellHook, Code, WParam, LParam);
end;
procedure InitHook;
begin
ShellHook:=SetWindowsHookEx(WH_SHELL, @ShellProc, GetModuleHandle('ShellWnds.dll'), 0);
end;
procedure DeinitHook;
begin
UnhookWindowsHookEx(ShellHook);
end;
exports
InitHook,
DeinitHook;
begin
end.
Это код формы:
unit Unit1;
interface
uses
Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
StdCtrls;
const
wm_shell = wm_user + 200;
type
TForm1 = class(TForm)
Memo1: TMemo;
procedure FormCreate(Sender: TObject);
procedure FormDestroy(Sender: TObject);
procedure WMShell(var msg: tmessage); message wm_shell;
private
{ Private declarations }
public
hooklib: thandle;
end;
var
Form1: TForm1;
implementation
{$R *.DFM}
procedure TForm1.FormCreate(Sender: TObject);
var
inithook: procedure;
begin
HookLib := LoadLibrary( PChar( ExtractFilePath(paramstr(0)) + 'ShellWnds.dll' ) );
@inithook := GetProcAddress( HookLib, 'InitHook' );
if @inithook <> nil then
begin
memo1.lines.add('init... ok');
inithook;
end;
end;
procedure TForm1.FormDestroy(Sender: TObject);
var
deinithook: procedure;
begin
@deinithook := GetProcAddress( HookLib, 'DeinitHook' );
if @deinithook <> nil then
begin
memo1.lines.add('deinit... ok');
deinithook;
end;
freelibrary(hooklib);
end;
procedure TForm1.WMShell(var msg: tmessage);
begin
memo1.lines.add(inttostr(msg.wparam)+' '+inttostr(msg.lparam));
msg.Result:=1;
end;
end.
Orion2 (2004-05-06 18:21:00) [1]up