Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2003.06.12;
Скачать: CL | DM;

Вниз

Пожалуйста помогите с Hook ами   Найти похожие ветки 

 
amo ©   (2003-04-13 14:02) [0]

Необходимо чтобы при определенном положении курсора мыши указанное окно сворачивалось на панель задач.
Делаю dll"ку, ставлю Hook на мышь, он вроде бы срабатывает но при этом начинаются глюки с окнами. Подскажите в чем ошибка!

library MHook;

uses
SysUtils,
windows,
messages;

{$R *.res}
var
idHook: THandle;
MHS: TMouseHookStruct;
R: TRect;
WName: PChar; //имя окна


function HookProc(nCode: Integer; WPARAM: wParam; LPARAM: lParam): lResult; stdcall;
begin

if nCode=HC_ACTION then
begin
MHS:=PMouseHookStruct(LParam)^;
If (MHS.pt.X<(R.Right-25)) Then
begin
If FindWindow(nil,WName)<>0 Then
begin
ShowWindow(FindWindow(nil,WName), SW_SHOWMINIMIZED);
end;
end;
end;

result:=CallNextHookEx(idHook,nCode,WPARAM,LPARAM);
end;

procedure SetKeyHook(wn: PChar);
begin
WName:=wn;
idHook:=SetWindowsHookEx(WH_MOUSE, @HookProc, hInstance, 0);
If idHook=0 Then
messagebox(0,"Ловушка не установлена","Error",MB_OK+MB_ICONERROR)
Else
messagebox(0,"Ловушка установлена","Ok",MB_OK);
messagebox(0,WName,"Ok",MB_OK);
GetWindowRect(GetDesktopWindow, R);

end;

procedure DelKeyHook;
begin

UnhookWindowsHookEx(idHook);
messagebox(0,"Ловушка снята!","Ok",MB_OK);
end;

exports
SetKeyHook name "SetKeyHook",
DelKeyHook name "DelKeyHook";



begin
end.


 
Songoku ©   (2003-04-13 16:02) [1]

Сварачивание срабатывает если ты подводишь курсор к левому углу онка!!!

library hook_dll1;

uses
Windows,
Messages,
edconsole;

const
MMFName: PChar = "MyMMF";


type
PGlobalDLLData = ^TGlobalDLLData;
TGlobalDLLData = packed record
SysHook: HWND;
end;

var
GlobalData: PGlobalDLLData;
MMFHandle: THandle;
R:TRect;
Text: pchar;

function SysMsgProc(code : integer; wParam : word; lParam : longint) : longint; stdcall;
var w:hWnd;
begin
if code = HC_ACTION then
begin
w:=MOUSEHOOKSTRUCT(Pointer(lParam)^).hwnd;
GetWindowRect(w,R);
R.Right:=R.Left+10;
r.Bottom:=r.Top+10;
if (GetWText(w)=Text)and(PtInRect(R,MOUSEHOOKSTRUCT(Pointer(lParam)^).pt)=True) then
ShowWindow(w, SW_SHOWMINIMIZED);

end;



Result:= CallNextHookEx(GlobalData^.SysHook, Code, wParam, lParam);
end;


function hook(switch : Boolean;S:Pchar):BOOL; export; stdcall;
begin
Text:=S;
if switch=true then
begin
GlobalData^.SysHook := SetWindowsHookEx(WH_MOUSE , @SysMsgProc, HInstance, 0);
if GlobalData^.SysHook <> 0 then Result:=True else Result:=False;
end
else Result:=UnhookWindowsHookEx(GlobalData^.SysHook);
end;

procedure OpenGlobalData();
begin
MMFHandle:= CreateFileMapping(INVALID_HANDLE_VALUE, nil, PAGE_READWRITE, 0, SizeOf(TGlobalDLLData), MMFName);
GlobalData:= MapViewOfFile(MMFHandle, FILE_MAP_ALL_ACCESS, 0, 0, SizeOf(TGlobalDLLData));
if GlobalData = nil then CloseHandle(MMFHandle);
end;

procedure CloseGlobalData();
begin
UnmapViewOfFile(GlobalData);
CloseHandle(MMFHandle);
end;

procedure DLLEntryPoint(dwReason: DWord); stdcall;
begin
case dwReason of
DLL_PROCESS_ATTACH: OpenGlobalData;
DLL_PROCESS_DETACH: CloseGlobalData;
end;
end;

exports hook;

begin
DLLProc:= @DLLEntryPoint;
DLLEntryPoint(DLL_PROCESS_ATTACH);
end.



да но есть ондо но!!!
Устоновка HOOK"a ты должен делать так!!!

....
var
S:PCHAR;
....
s:=VirtualAlloc(nil, DWORD(Length(Caption)), MEM_COMMIT, PAGE_READWRITE);
s:=Pchar(Caption);
hook(true,s);
VirtualFree(s,DWORD(Length(Caption)),MEM_COMMIT);



Страницы: 1 вся ветка

Текущий архив: 2003.06.12;
Скачать: CL | DM;

Наверх




Память: 0.47 MB
Время: 0.013 c
14-35074
Silver_
2003-05-26 14:49
2003.06.12
SQL - как узнать что таблица пуста?


8-34943
Still Swamp
2002-02-04 15:22
2003.06.12
GLScene - несколько вопросов


3-34696
pavel_guzhanov
2003-05-22 17:46
2003.06.12
Выбор по полю типа Date


9-34662
NailMan
2002-07-12 04:40
2003.06.12
Реинициализация Direct3D внутри программы


4-35127
sLMolox
2003-04-12 09:46
2003.06.12
Как изменить дату создания директории???