Форум: "WinAPI";
Текущий архив: 2003.06.12;
Скачать: [xml.tar.bz2];
ВнизПожалуйста помогите с 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 вся ветка
Форум: "WinAPI";
Текущий архив: 2003.06.12;
Скачать: [xml.tar.bz2];
Память: 0.46 MB
Время: 0.008 c