you have to use a hook, seeGpSysHook (written for Delphi 5. It should compile with Delphi 6) http://17slon.com/gp/gp/gpsyshook.htm
to dahuzizyd(明天你就要嫁给我啦!) :Screen.Cursor主要用来决定鼠标的形状。 例如:Screen.Cursor := crHourglass; { Show hourglass cursor }谁能给我来一段代码解决这个问题,100分立即送上,谢谢!
library getkey; uses Windows, Messages, classes, stdctrls, Sysutils, dllfrm in 'dllfrm.pas' {Form2};var hNextHookProc: HHook; procSaveExit: Pointer; hwnd,hwnd2:longint; info:String;function mouseHookHandler(iCode: Integer;wParam: WPARAM;lParam: LPARAM): LRESULT; stdcall; var obj:Tobject; hwnd:longint; mp:Tpoint; begin result:=0; if icode<0 then begin result:=callnexthookex(hnexthookproc,icode,wparam,lparam); exit; end; // if wparam = WM_LBUTTONUP then begin// end; if wparam=WM_MOUSEMOVE then begin GetCursorPos(mp); if mp.x <300 then begin // sendmessage(findwindow('notepad',nil),WM_SETTEXT,0,integer(pchar(inttostr(mp.x)+','+inttostr(mp.y )))); if findwindow('TForm2','dlltest') =0 then begin with TForm2.Create(nil) do begin showmodal; end; end; end else begin if findwindow('TForm2','dlltest')<>0 then // form2.Destroy; end; end; end;function EnableHotKeyHook: BOOL; export; begin Result := False; if hNextHookProc <> 0 then Exit; hNextHookProc := SetWindowsHookEx(WH_mouse, mouseHookHandler,HInstance, 0); Result := hNextHookProc <> 0; end;function DisableHotKeyHook: BOOL; export; begin if hNextHookProc <> 0 then begin UnhookWindowshookEx(hNextHookProc); // 解除 mouse Hook hNextHookProc := 0; end; Result := hNextHookProc = 0; end;exports EnableHotKeyHook, DisableHotKeyHook;begin hNextHookProc := 0; procSaveExit := ExitProc; end.
这个问题我感兴趣,看我的:Unit Unit1;InterfaceUses Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls;Type TForm1 = Class(TForm) Button1: TButton; Procedure Button1Click(Sender: TObject); Procedure FormClose(Sender: TObject; Var Action: TCloseAction); private { Private declarations } Procedure Hook(En: Boolean = true); public { Public declarations } End;Var Form1: TForm1; hHook: LongWord; xy: TPoint; Implementation{$R *.DFM}Function HookProc(iCode: Integer; wParam: wParam; lParam: lParam): LRESULT; stdcall; Begin Result := 0; If(peventmsg(lparam)^.message = WM_LBUTTONDOWN) Or (peventmsg(lparam)^.message = WM_LBUTTONUP) Or (peventmsg(lparam)^.message = WM_LBUTTONDBLCLK) Or (peventmsg(lparam)^.message = WM_RBUTTONDOWN) Or (peventmsg(lparam)^.message = WM_RBUTTONUP) Or (peventmsg(lparam)^.message = WM_RBUTTONDBLCLK) Or (peventmsg(lparam)^.message = WM_MBUTTONDOWN) Or (peventmsg(lparam)^.message = WM_MBUTTONUP) Or (peventmsg(lparam)^.message = WM_MBUTTONDBLCLK) Then Begin GETCURSORPOS(XY); form1.Caption := IntToStr(XY.x) + ' ' + IntToStr(XY.y); End; Result := CallNextHookEx(hHook, iCode, wParam, lParam);End;Procedure TForm1.Hook(En: Boolean = true); Begin If En Then hHook := SetwindowsHookEx(WH_JOURNALRECORD, HookProc, HInstance, 0) Else UnHookWindowsHookEx(hHook); End;Procedure TForm1.Button1Click(Sender: TObject); Begin Hook; End;Procedure TForm1.FormClose(Sender: TObject; Var Action: TCloseAction); Begin Hook(false); End;End.
http://www.torry.net/mouse.htm#3173
谢谢!我看了,那是个控件,而且是for d3,整理起来好麻烦。直接给我来一段代码好吗?再次谢谢!最好不要DLL!
http://17slon.com/gp/gp/gpsyshook.htm
例如:Screen.Cursor := crHourglass; { Show hourglass cursor }谁能给我来一段代码解决这个问题,100分立即送上,谢谢!
uses
Windows,
Messages,
classes,
stdctrls,
Sysutils,
dllfrm in 'dllfrm.pas' {Form2};var
hNextHookProc: HHook;
procSaveExit: Pointer;
hwnd,hwnd2:longint;
info:String;function mouseHookHandler(iCode: Integer;wParam: WPARAM;lParam: LPARAM): LRESULT; stdcall;
var
obj:Tobject;
hwnd:longint;
mp:Tpoint;
begin
result:=0;
if icode<0 then
begin
result:=callnexthookex(hnexthookproc,icode,wparam,lparam);
exit;
end;
// if wparam = WM_LBUTTONUP then begin// end;
if wparam=WM_MOUSEMOVE then begin
GetCursorPos(mp);
if mp.x <300 then begin
// sendmessage(findwindow('notepad',nil),WM_SETTEXT,0,integer(pchar(inttostr(mp.x)+','+inttostr(mp.y ))));
if findwindow('TForm2','dlltest') =0 then begin
with TForm2.Create(nil) do
begin
showmodal;
end;
end;
end
else begin
if findwindow('TForm2','dlltest')<>0 then
// form2.Destroy;
end;
end;
end;function EnableHotKeyHook: BOOL; export;
begin
Result := False;
if hNextHookProc <> 0 then Exit;
hNextHookProc := SetWindowsHookEx(WH_mouse, mouseHookHandler,HInstance, 0);
Result := hNextHookProc <> 0;
end;function DisableHotKeyHook: BOOL; export;
begin
if hNextHookProc <> 0 then
begin
UnhookWindowshookEx(hNextHookProc); // 解除 mouse Hook
hNextHookProc := 0;
end;
Result := hNextHookProc = 0;
end;exports
EnableHotKeyHook,
DisableHotKeyHook;begin
hNextHookProc := 0;
procSaveExit := ExitProc;
end.
Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
StdCtrls;Type
TForm1 = Class(TForm)
Button1: TButton;
Procedure Button1Click(Sender: TObject);
Procedure FormClose(Sender: TObject; Var Action: TCloseAction);
private
{ Private declarations }
Procedure Hook(En: Boolean = true);
public
{ Public declarations }
End;Var
Form1: TForm1;
hHook: LongWord;
xy: TPoint;
Implementation{$R *.DFM}Function HookProc(iCode: Integer; wParam: wParam; lParam: lParam): LRESULT; stdcall;
Begin Result := 0;
If(peventmsg(lparam)^.message = WM_LBUTTONDOWN) Or
(peventmsg(lparam)^.message = WM_LBUTTONUP) Or
(peventmsg(lparam)^.message = WM_LBUTTONDBLCLK) Or
(peventmsg(lparam)^.message = WM_RBUTTONDOWN) Or
(peventmsg(lparam)^.message = WM_RBUTTONUP) Or
(peventmsg(lparam)^.message = WM_RBUTTONDBLCLK) Or
(peventmsg(lparam)^.message = WM_MBUTTONDOWN) Or
(peventmsg(lparam)^.message = WM_MBUTTONUP) Or
(peventmsg(lparam)^.message = WM_MBUTTONDBLCLK)
Then
Begin
GETCURSORPOS(XY);
form1.Caption := IntToStr(XY.x) + ' ' + IntToStr(XY.y);
End;
Result := CallNextHookEx(hHook, iCode, wParam, lParam);End;Procedure TForm1.Hook(En: Boolean = true);
Begin
If En Then
hHook := SetwindowsHookEx(WH_JOURNALRECORD, HookProc, HInstance, 0)
Else
UnHookWindowsHookEx(hHook);
End;Procedure TForm1.Button1Click(Sender: TObject);
Begin
Hook;
End;Procedure TForm1.FormClose(Sender: TObject; Var Action: TCloseAction);
Begin
Hook(false);
End;End.
zsy_good(只要坚定不移的走下去,那一定会成功)也来了一段代码,不过用了dll.
谢谢xzhifei(飞)朋友,如果csdn上的朋友都象xzhifei(飞)一样,我们的工作就轻松多了,哈哈,结帐了!!!