后台程序如何向前台发消息?(50分)

  • 主题发起人 主题发起人 蔡成
  • 开始时间 开始时间

蔡成

Unregistered / Unconfirmed
GUEST, unregistred user!
后台程序如何向前台发消息?
我在后台程序中定时将某句柄的程序拉到前台,但如果我将后台
程序改在前台,则bringwindowtotop可将该句柄的程序
拉到前台,请问何故?我想在后台定时用keybd_event向
前台模拟键盘输入,该如何写?
 
GetWindowThreadProcessId 可以得到那个窗口的线程id
然后 AttachThreadInput 连那个线程id
就可以keybd_event了
 
Pipi:哪里有这样的例程?
为什么我用上面的方面行不通呢?
 
请你写出代码,我看看怎么行不通
 
vcdhnd:=findwindow('tfrmcontrol','JMEVCD');
// bringwindowtotop(vcdhnd);
// setactivewindow(vcdhnd);
postmessage(vcdhnd,wm_activate,0,0);
keybd_event(VkKeyScan('p'),0,0,0);

就是这样啊。
我在这个测试程序中放了一个定时器,定时向目标程序发
键盘消息,
当这个测试程序在后台时(lost focus时),它就不能
向目标程序发送键盘消息了。即目标程序不会响应了。
 
中间加一行
AttachThreadInput(GetWindowThreadProcessId(vcdhnd,nil), GetCurrentThreadId(),true);
 
我发现我说错了:
我的意思是两个后台程序A和B,其中A为常驻,如果当B失去焦点时,
后台程序A无法向B发送消息。所以我用bringwindowtotop
和wm_active等等试图使B激活,但都不行。
使用attachthreadinput也不行。
 
用setforgroundwindow可以使
B重新得到焦点
 
用setforegroundwindow只会使任务栏上的标题闪烁。
 
标题闪烁说明他已经获得焦点了
 
如何发送类型信息和指针类型消息?我想知道!
请看我的问题
<br><p align='center'><a href='http://www.gislab.ecnu.edu.cn/delphibbs/DispQ.asp?LID=344093'>在这里</a></p>
 
多人接受答案了。
 
后退
顶部