Delphi 怎样用postMessage向一个窗口发送Alt+D组合键

怎样用postMessage向一个窗口发送Alt+D组合键找不到VK_ALT... 怎样用postMessage向一个窗口发送Alt+D组合键
找不到VK_ALT
展开
 我来答
JIAOYIYAN
推荐于2016-05-14 · TA获得超过104个赞
知道小有建树答主
回答量:103
采纳率:0%
帮助的人:113万
展开全部
不能简单的Postmessge发送消息!因为组合组合键生成的是一系列消息!

实现方法原理如同楼上所写,代码如下:

hwnd=FindWindow(NULL,窗口标题文本); //获得窗口句柄
if Hwnd <> Null then
begin
SetForegroundWindow(hwnd);//设置窗口为当前窗口
keybd_event(VK_ALT,MapVirtualKey(VK_ALT,0),0,0);
sleep(1000);
keybd_event('D',MapVirtualKey(’D’,0),0,0);
sleep(1000);
keybd_event('D',MapVirtualKey(’D’,0),KEYEVENTF_KEYUP,0);
keybd_event(VK_ALT,MapVirtualKey(VK_ALT,0),KEYEVENTF_KEYUP,0);
end;

代码没经测试,你试试!
wish you luck!

-------------------
在哪个单元定义记不清了!你可能是不没引用这个单元!
VK_alt定义是:$20.你试试用这个代替行不!注:没有编译!
本回答被提问者采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
yeye55
2009-09-26 · TA获得超过715个赞
知道小有建树答主
回答量:412
采纳率:0%
帮助的人:408万
展开全部
4步

1、发送Alt键按下;
2、发送D键按下;
3、发送D键放开;
4、发送Alt键放开。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
百度网友1b932d7
2009-09-26 · TA获得超过816个赞
知道小有建树答主
回答量:455
采纳率:0%
帮助的人:422万
展开全部
转自"超级猛料2003"
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

转自"超级猛料2003"
end;
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(1)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式