我想模拟键盘输入,当我按了button1,就相当与按了tab键,当我按了button2,就相当与按了a键,怎么办啊?
解决方案 »
- 讨论下遍历字符替换怎么可以高效?
- 寻求一个方案
- 难办的问题!
- 怎么判断电脑里是否已经安装了打印机?
- 請問HKStreamCol.dcu是什麼文件?
- 我在dxDBGrid中設置了某一列......
- 远程连接数据库问题
- Delphi AccessViolation at address 00000000
- 请教大虾:单位刚装了ISDN,准备通过一台服务器让我们这个局域网共享上网(用PROXY作代理工具),现在共享上网作到了,但是蚂蚁和QQ都用不成了,该怎么设置???
- 不用SQL如何从数据库中取分数为前10名的记录?
- 我在网上租个支持ASP&JSP的空间,谁知道哪个比较好!推荐有分!UP 也有分!多谢!!!
- 一个有难度的问题,高手请进
http://zswang.51.net/function/zsfunc03.htm(*//
标题:模拟系统按键
说明:支持组合键;不支持部分系统热键(如:Ctrl+Shift+Del...)
设计:Zswang
日期:2002-01-24
支持:[email protected]
//*)///////Begin Source
procedure SendKey(const mKey: Word; mShiftState: TShiftState;
mCount: Integer = 1); { 模拟系统按键;mCount指定按键次数 }
const
cExtended: set of Byte = [VK_UP, VK_DOWN, VK_LEFT, VK_RIGHT, VK_HOME,
VK_END, VK_PRIOR, VK_NEXT, VK_INSERT, VK_DELETE]; procedure pKeyboardEvent(mKey, mScanCode: Byte; mFlags: Longint);
var
vKeyboardMsg: TMsg;
begin
keybd_event(mKey, mScanCode, mFlags, 0);
while PeekMessage(vKeyboardMsg, 0, WM_KEYFIRST, WM_KEYLAST, PM_REMOVE) do
begin
TranslateMessage(vKeyboardMsg);
DispatchMessage(vKeyboardMsg);
end;
end; { pKeyboardEvent } procedure pSendKeyDown(mKey: Word; mGenUpMsg: Boolean);
var
vScanCode: Byte;
vNumState: Boolean;
vKeyBoardState: TKeyboardState;
begin
if (mKey = VK_NUMLOCK) then begin
vNumState := ByteBool(GetKeyState(VK_NUMLOCK) and 1);
GetKeyBoardState(vKeyBoardState);
if vNumState then
vKeyBoardState[VK_NUMLOCK] := (vKeyBoardState[VK_NUMLOCK] and not 1)
else vKeyBoardState[VK_NUMLOCK] := (vKeyBoardState[VK_NUMLOCK] or 1);
SetKeyBoardState(vKeyBoardState);
Exit;
end; vScanCode := Lo(MapVirtualKey(mKey, 0));
if (mKey in cExtended) then begin
pKeyboardEvent(mKey, vScanCode, KEYEVENTF_EXTENDEDKEY);
if mGenUpMsg then
pKeyboardEvent(mKey, vScanCode,
KEYEVENTF_EXTENDEDKEY or KEYEVENTF_KEYUP)
end else begin
pKeyboardEvent(mKey, vScanCode, 0);
if mGenUpMsg then pKeyboardEvent(mKey, vScanCode, KEYEVENTF_KEYUP);
end;
end; { pSendKeyDown } procedure pSendKeyUp(mKey: Word);
var
vScanCode: Byte;
begin
vScanCode := Lo(MapVirtualKey(mKey, 0));
if mKey in cExtended then
pKeyboardEvent(mKey, vScanCode, KEYEVENTF_EXTENDEDKEY and KEYEVENTF_KEYUP)
else pKeyboardEvent(mKey, vScanCode, KEYEVENTF_KEYUP);
end; { pSendKeyUp }var
I: Integer;
begin
for I := 1 to mCount do begin
if ssShift in mShiftState then pSendKeyDown(VK_SHIFT, False);
if ssCtrl in mShiftState then pSendKeyDown(VK_CONTROL, False);
if ssAlt in mShiftState then pSendKeyDown(VK_MENU, False);
pSendKeyDown(mKey, True);
if ssShift in mShiftState then pSendKeyUp(VK_SHIFT);
if ssCtrl in mShiftState then pSendKeyUp(VK_CONTROL);
if ssAlt in mShiftState then pSendKeyUp(VK_MENU);
end;
end; { SendKey }
///////End Source///////Begin Demo
procedure TForm1.Button1Click(Sender: TObject);
begin
SendKey(VK_F4, [ssAlt]);
end;
///////End Demo嘻嘻嘻 贴来贴去,分来分去,编来编去,想来想去,敲来敲去... ... 嘻嘻嘻嘻