求教个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执行时就没有什么问题。
这是为什么?
展开
 我来答
windblast
2012-09-03 · 知道合伙人软件行家
windblast
知道合伙人软件行家
采纳数:5633 获赞数:13623
毕业于空军第一航空学院电子专业,1991年开始接触电脑,从事多年计算机编程,具有较丰富的经验。

向TA提问 私信TA
展开全部
PostMessage直接把消息投递到目标窗口的消息队列就返回,而不管它是不是处理了这个消息,一般适用于发消息的程序需要立即返回并且不关心目标窗口的返回值的情况。

而SendMessage则相当于直接调用目标窗口的WndProc,必须等到目标窗口处理完毕这个消息,并且可以获得目标窗口的返回值。

有些消息,比如BM_GETCHECK之类的消息,不可能用PostMessage的,因为那样你就不可能获得目标的选择框是否选择的结果,还有比如WM_GETTEXT等。

从你的代码来看,建议你最好在发送按键之后的加上延时代码(sleep)。
qingningleyun
2012-09-04 · TA获得超过5854个赞
知道大有可为答主
回答量:2991
采纳率:30%
帮助的人:3052万
展开全部
再给你一种方法,模拟键盘动作:

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发送带有指针参数的消息。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
wssgnever
2012-09-05
知道答主
回答量:13
采纳率:0%
帮助的人:4.5万
展开全部
PostMessage是发送信息到线程后马上返回的,是不等线程处理结束的
而SendMessage需要等待消息处理完毕后返回的
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(1)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

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

类别

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

说明

0/200

提交
取消

辅 助

模 式