如果隻用了DELPHI自帶的一般控件,那麼不需要其他動态連接配接庫,不選中project菜單的option下面builder with runtime packages,系統會将所有需要的BPL檔案包含到編譯後的EXE裡面去
//檢查檔案是否打開
if FileExists(FileName) then
if (FileOpen(FileName, fmShareExclusive) < 0) then
ShowMessage('檔案已打開');
//建立全局的滑鼠鈎子
unit Unit1;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls;
type
TForm1 = class(TForm)
Button1: TButton;
Button2: TButton;
procedure Button1Click(Sender: TObject);
procedure FormClose(Sender: TObject; var Action: TCloseAction);
procedure Button2Click(Sender: TObject);
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
if(peventmsg(lparam)^.message = WM_LBUTTONDOWN) Or
(peventmsg(lparam)^.message = WM_LBUTTONUP) Or
(peventmsg(lparam)^.message = WM_LBUTTONDBLCLK) Or
(peventmsg(lparam)^.message = WM_MOUSEMOVE) 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.Button1Click(Sender: TObject);
begin
Hook;
end;
procedure TForm1.Hook(En: Boolean);
begin
if En then
hHook := SetwindowsHookEx(WH_JOURNALRECORD, HookProc, HInstance, 0)
else
UnHookWindowsHookEx(hHook);
end;
procedure TForm1.FormClose(Sender: TObject; var Action: TCloseAction);
begin
Hook(false);
end;
procedure TForm1.Button2Click(Sender: TObject);
begin
Hook(false);
end;
end.