求教个delphi7后台模拟回车的问题 5
xunima:=VKB_param(13,1);//获取键虚拟码。PostMessage(hwd,WM_KEYDOWN,13,xunima);xunima:=VKB_pa...
xunima:=VKB_param(13,1);//获取键虚拟码。
PostMessage(hwd,WM_KEYDOWN,13,xunima);
xunima:=VKB_param(13,0);
PostMessage(hwd,WM_KEYUP,13,xunima);
程序一执行到PostMessage时就会死掉,很可能是在无限发送回车。
如果我把PostMessage改成SendMessage。
xunima:=VKB_param(13,1);
SendMessage(hwd,WM_KEYDOWN,13,xunima);
xunima:=VKB_param(13,0);
SendMessage(hwd,WM_KEYUP,13,xunima);
改成SendMessage执行时就没有什么问题。
这是为什么? 展开
PostMessage(hwd,WM_KEYDOWN,13,xunima);
xunima:=VKB_param(13,0);
PostMessage(hwd,WM_KEYUP,13,xunima);
程序一执行到PostMessage时就会死掉,很可能是在无限发送回车。
如果我把PostMessage改成SendMessage。
xunima:=VKB_param(13,1);
SendMessage(hwd,WM_KEYDOWN,13,xunima);
xunima:=VKB_param(13,0);
SendMessage(hwd,WM_KEYUP,13,xunima);
改成SendMessage执行时就没有什么问题。
这是为什么? 展开
2012-09-03 · 知道合伙人软件行家
关注
展开全部
PostMessage直接把消息投递到目标窗口的消息队列就返回,而不管它是不是处理了这个消息,一般适用于发消息的程序需要立即返回并且不关心目标窗口的返回值的情况。
而SendMessage则相当于直接调用目标窗口的WndProc,必须等到目标窗口处理完毕这个消息,并且可以获得目标窗口的返回值。
有些消息,比如BM_GETCHECK之类的消息,不可能用PostMessage的,因为那样你就不可能获得目标的选择框是否选择的结果,还有比如WM_GETTEXT等。
从你的代码来看,建议你最好在发送按键之后的加上延时代码(sleep)。
而SendMessage则相当于直接调用目标窗口的WndProc,必须等到目标窗口处理完毕这个消息,并且可以获得目标窗口的返回值。
有些消息,比如BM_GETCHECK之类的消息,不可能用PostMessage的,因为那样你就不可能获得目标的选择框是否选择的结果,还有比如WM_GETTEXT等。
从你的代码来看,建议你最好在发送按键之后的加上延时代码(sleep)。
展开全部
再给你一种方法,模拟键盘动作:
procedure VKClick(vk: Integer);
const
VK_ENTER = 13;
begin
KeyBD_Event(VK_ENTER, MapVirtualKey(vk, 0), 0, 0);
Sleep(10);
KeyBD_Event(VK_ENTER, MapVirtualKey(vk, 0), KeyEventF_KeyUp, 0);
Sleep(10);
end;
procedure VKClick(vk: Integer);
const
VK_ENTER = 13;
begin
KeyBD_Event(VK_ENTER, MapVirtualKey(vk, 0), 0, 0);
Sleep(10);
KeyBD_Event(VK_ENTER, MapVirtualKey(vk, 0), KeyEventF_KeyUp, 0);
Sleep(10);
end;
追问
我之所以用post和send,是因为我要后台操作,你这个我知道,但这不能后台操作。我奇怪的就是为什么我用send能后台操作,用post就不行?用样的代码,我用VB时,就没有问题。为什么用delphi7就不行了?而且delphi7还不需要声明post函数,这说明不是我声明错误。用send可以操作,说明后面的参数也应该是对的吧。但为什么post就不行哪?
追答
如果发送的消息码在WM_USER之下(非自定义消息)且消息参数中带有指针,那么PostMessage,SendNotifyMessage,SendMessageCallback这些异步消息发送函数将会调用失败。 最好不要用PostMessage发送带有指针参数的消息。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
PostMessage是发送信息到线程后马上返回的,是不等线程处理结束的
而SendMessage需要等待消息处理完毕后返回的
而SendMessage需要等待消息处理完毕后返回的
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询