在.dll中的hook函数怎样返回一个值。(30分)

  • 主题发起人 主题发起人 lodgue
  • 开始时间 开始时间
L

lodgue

Unregistered / Unconfirmed
GUEST, unregistred user!
例如:
function KeyboardHookHandler(iCode: Integer;
wParam: WPARAM;
lParam: LPARAM): LRESULT;
stdcall;
export;
const
_KeyPressMask = $80000000;
begin
Result := 0;
If iCode < 0 then
begin
Result := CallNextHookEx(hNextHookProc, iCode, wParam, lParam);
Exit;
end;
if ((lParam and _KeyPressMask) = 0) and
(GetKeyState(vk_Control) < 0) and (wParam = Ord('B')) then
begin
Result := 1;
<font color="blue">SetDownHotKey(True);</font>//是我自己定义的
一个在注册表中设置标记的函数。然后,在程序中找是否为设定的标志。但是觉得挺麻烦。不知能不能直接返回一个值。
end;
end;
 
相你程序PostMessage,或SendMessage.
http://www.gislab.ecnu.edu.cn/delphibbs/DispQ.asp?LID=198085
http://www.gislab.ecnu.edu.cn/delphibbs/DispQ.asp?LID=202446
 
沈前卫:
能否再详细谈谈,怎样Post/Send?分虽不多,积德有功呀!
连上198085/202446我被糊涂了?!
 
const WM_MYMESSAGE=WM_USER+1000;


if CommonData.CallBackHandle<>0 then
postmessage(CommonData.CallBackHandle,WM_MYMESSAGE,0,0);

CommonData.CallBackHandle要这样生成:
procedure MapCommonData;
var FirstCall: Boolean;
begin
HMapFile:=OpenFileMapping(FILE_MAP_WRITE, False, 'sjhdfasdfasdfasd');
FirstCall:=(HMapFile = 0);
if FirstCall then
HMapFile:=CreateFileMapping($FFFFFFFF,nil,PAGE_READWRITE,0,SizeOf(TCommonData),'sjhdfasdfasdfasd');
CommonData:= MapViewOfFile(HMapFile, FILE_MAP_WRITE, 0, 0, 0);
if FirstCall then
FillChar(CommonData^, SizeOf(TCommonData), 0);
end;

//设置接受消息的窗口。
function EnableHook(hld:hwnd): BOOL;
export;
begin
Result := False;
CommonData.CallBackHandle:=hld;
if hNextHookProc <> 0 then
Exit;
hNextHookProc := SetWindowsHookEx(WH_MOUSE, MousePosHookHandler,Hinstance, 0);
Result :=hNextHookProc <> 0 ;
end;
 
沈前卫:
你看我笨的。
你能否Email一个例子,收到给分。
 
这里不是都有示例么,自己稍微改改就行啊。
http://www.gislab.ecnu.edu.cn/delphibbs/DispQ.asp?LID=198085
http://www.gislab.ecnu.edu.cn/delphibbs/DispQ.asp?LID=202446
 
接受答案了.
 
后退
顶部