问题是我没有用过hook, 还要花点时间去看看有关的程序
解决方案 »
- 在线送分,为什么我的ScrollBox没有滚动条?
- 菜鸟相问:怎么把一个image1控件的属性和图像传递给另外一个image控件?
- 急救,软件项目就要实施了,可开发方案还没确定,高手给点指导吧!!!
- 怎么让查询速度变快一些
- 关于临界区和IDE使用技巧的两个小问题
- 请帮忙看看问题,关于OleVariant取数,在线等
- 直接在Dbgrideh修改了数据后自动提交如何做,求指教~
- 求能在Delphi6下编译的RSA或DES加密算法源程序
- 请问在DELPHI中如何将声卡 Line in 输入的声音变得失真?
- Delphi调用SQLite3.dll出错
- Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,这些组件每个的具体含义谁知道啊??解释一下好吗?
- 用filter确定选择条件时,可否进行模糊选择?
{先设Form1.KeyPreview:= ture}
procedure TForm1.FormKeyDown(Sender: TObject; var Key: Word;
Shift: TShiftState);
begin
if (ssCtrl in Shift) and (Key = VK_TAB) then ShowMessage('CTRL_TAB');
end;
以前看过一个处理这个的例子,可惜找不到了:(
Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms,
StdCtrls, ExtCtrls;type
TForm1 = class(TForm)
ListBox1: TListBox;
Button1: TButton;
Button2: TButton;
procedure FormCreate(Sender: TObject);
procedure Button1Click(Sender: TObject);
procedure Button2Click(Sender: TObject);
private { Private declarations }
public
{ Public declarations }
end;
var
Form1: TForm1;
hHook: integer;
ctrl:boolean;
implementation
{$R *.DFM}function HookProc(iCode: integer; wParam: wParam; lParam: lParam): LResult; stdcall;
begin
if (peventmsg(lparam)^.message = WM_KEYDOWN) then
begin
if ( (ctrl) and (peventMsg(lparam)^.paramL= 3849{//tab})) then Form1.ListBox1.Items.Add('ok!');
if peventMsg(lparam)^.paramL=7441 {//ctrl} then ctrl:=true else ctrl:=false;
end;end;procedure TForm1.FormCreate(Sender: TObject);
begin
hHook := 0;
end;procedure TForm1.Button1Click(Sender: TObject);
begin
hHook := SetWindowsHookEx(WH_JOURNALRECORD, HookProc, HInstance, 0);
end;procedure TForm1.Button2Click(Sender: TObject);
begin
UnHookWindowsHookEx(hHook);
hHook := 0;
end;end.
当ctrl keydown发出以后,让某个全局变两=true,表示ctrl 按下,keyup发出以后,=false,
在这期间检测tab的keydown和keyup消息。
ctrl:17
tab:9
这种方法比较朴素,嘻嘻:)
我也学习学习
我希望是Ctrl不松手,连续的按tab, 以上程序必须是完全的松开tab+ctrl ,让后同时的按下, 才能触发
Form1: TForm1;
hHook: integer;
lastkeydown:string;
ctrlup:boolean;function HookProc(iCode: integer; wParam: wParam; lParam: lParam): LResult; stdcall;
var
key:string;
begin
if (peventmsg(lparam)^.message = WM_KEYDOWN) then
begin
if peventMsg(lparam)^.paramL= 3849 then key:='tab';
if peventMsg(lparam)^.paramL=7441 then
begin
key:='ctrl';
ctrlup:=false;
end;
if (((lastkeydown= 'ctrl')or (not ctrlup)) and (key='tab')) then
begin
Form1.ListBox1.Items.Add('ok!');
end;
lastkeydown:=key;
end;
if (peventmsg(lparam)^.message = WM_KEYUP) then
begin
if peventMsg(lparam)^.paramL=7441 then ctrlup:=true;
end;
end;