系统中已定义了一个热键如:CTRL+F,如何模拟按下此键?
桌面上已有几个窗体,如何取每一个窗体的Windows Caption属性?
分可再加
桌面上已有几个窗体,如何取每一个窗体的Windows Caption属性?
分可再加
解决方案 »
- 关于Delphi2009 的 clientdataSet 的 bug
- delphi 数据集。。。。。。。。。。
- 又一个简单问题,要分的进来噢,解决马上结贴
- 各位大俠,在delphi中有沒有類似vb print 打印窗體函數或方法,在線等待
- TdxDBGrid能实现多表头的功能吗
- 怎么删除TMEMO某行中指定得单词啊?
- Delphi编译的程序为什么在98里无法运行?
- GOOGLE搜狐等搜索引擎如何象天网一样搜索FTP?
- 如何创建一个没有窗体的小程序,在这个程序中创建一个timer,并且设置好timer的属性和事件?
- AdvStringGrid如何制作多标头的形式?
- 请您给个建议
- 关于adoquery和adotable的问题,高手请进。来者有份!!!
//Ctrl+C:
keybd_event(VK_CONTROL, MapVirtualKey(VK_CONTROL, 0), 0, 0);
keybd_event(Ord('C'), MapVirtualKey(Ord('C'), 0), 0, 0);
keybd_event(Ord('C'), MapVirtualKey(Ord('C'), 0), KEYEVENTF_KEYUP, 0);
keybd_event(VK_CONTROL, MapVirtualKey(VK_CONTROL, 0), KEYEVENTF_KEYUP, 0) //Ctrl+V:
keybd_event(VK_CONTROL, MapVirtualKey(VK_CONTROL, 0), 0, 0);
keybd_event(Ord('V'), MapVirtualKey(Ord('V'), 0), 0, 0);
keybd_event(Ord('V'), MapVirtualKey(Ord('V'), 0), KEYEVENTF_KEYUP, 0);
keybd_event(VK_CONTROL, MapVirtualKey(VK_CONTROL, 0), KEYEVENTF_KEYUP, 0)
**************************
按下一个键最好用SendMessage,用sndkey32.pas无疑会增加程序尺寸。
组合键(超过两个以上)用sndkey32.pas就显出优势来了。另一种解决方法,下例模拟按下Alt+Down,可参见Delphi SDK的帮助:
keybd_event( VK_MENU, MapVirtualKey( VK_MENU, 0 ), 0 , 0 ); // Alt down
keybd_event( VK_DOWN, MapVirtualKey( VK_DOWN, 0 ), 0 , 0 ); // down arrow key down
keybd_event( VK_DOWN, MapVirtualKey( VK_DOWN, 0 ), KEYEVENTF_KEYUP , 0 ); // down arrow key up
keybd_event( VK_MENU, MapVirtualKey( VK_MENU, 0 ), KEYEVENTF_KEYUP , 0 ); // Alt key up
KeyState: TKeyboardState;
OldCtrl: byte;
begin
GetKeyboardState(KeyState);
OldCtrl := KeyState[VK_Ctrl];
KeyState[VK_Ctrl]:=$80;
SetKeyboardState(KeyState);
SendMessage (Memo1.Handle, WM_KEYDOWN, ord('F'), 0);
SendMessage (Memo1.Handle, WM_KEYUP, ord('F''), 0);
KeyState[VK_Ctrl]:=OldCtrl;
SetKeyboardState(KeyState);
end;
var
hCurrentWindow: HWnd;
szText: array[0..254] of char;
begin
hCurrentWindow := GetWindow(Handle, GW_HWNDFIRST);
while hCurrentWindow <> 0 do
begin
if GetWindowText(hCurrentWindow, @szText, 255) > 0 then
Memo1.Lines.Add(StrPas(@szText));
hCurrentWindow := GetWindow(hCurrentWindow, GW_HWNDNEXT);
end;
end;
procedure TForm1.FormKeyDown(Sender: TObject; var Key: Word;
Shift: TShiftState);
begin
if ((ssCtrl in Shift) and ((key = ord('i')) or (key = ord('I')) )) then
end;
就可以了。
如果你要监视所有的键盘敲击消息,那么你需要用WINDOWS钩子来获取
然后用var j:integer;
j:=getkeystate($14); //返回Caps Lock键的状态
if ((j and 1)=1 ) then //判断CapsLock是否按下
2:那最后一个参数是起什么作用?