如果向QQ等其它程序发送F1按钮,让QQ打开自己的帮助(300分)

  • 主题发起人 主题发起人 liminyes
  • 开始时间 开始时间
L

liminyes

Unregistered / Unconfirmed
GUEST, unregistred user!
postmessage(h,WM_KEYUP ,VK_F1 ,0); 无效
keybd_event();
SendMessage()
也好像都没有用,不知哪位大侠知道怎么做?谢谢
 
人家也没提供这说:我能接收这个消息,怎么发送???
 
to 完颜康
什么意思?不明白
 
将qq调到前台
然后keybdEvent
 
postmessage(h,WM_KEYDOWN ,VK_F1 ,0);
 
to coolbaby
你试过没有?我昨天就试了,没有用
 
我试了一下 直接发送消息的确有问题 还是找注册表把 取得QQ目录 然后 调用帮助
 
to amakusa
呵呵,谢谢你了,我这只是打的一个比方,并不是要调用QQ的帮助,应该可以算是一个
模拟按键的问题吧,
 
但首先在QQ里 要定义了 keydown 的事件 响应哦 我估计是这样吧
 
function isQQ(Hwd: THandle; Param: Pointer): Boolean; stdcall;
var
classname,
Text: string;
hParent,
hChild:longint;
begin
SetLength (Text, 100);
GetClassname(hwd,pchar(text),100);
classname:=copy(text,1,6);
if classname<>'#32770' then
begin
Result:=True;
Exit;
end;
{ hParent:=getparent(hwd);
if hparent=0 then
begin
result:=True;
exit;
end;}
begin
//子窗口有SysCredential
hChild:=FindWindowEx(hwd,0,'Tencent_QQBar',nil);
if hChild=0 then
begin
Result:=True;
Exit;
end;
//找到
form1.hBar:=hChild;
Result:=False;
Exit;
end;
Result := True;
end;

procedure FindQQWin;
var
EWProc: EnumWindowsProc;
begin
EWProc := isQQ;
form1.hQQ:=0;
form1.hBar:=0;
EnumWindows (@EWProc, 0);
end;

procedure TForm1.Button1Click(Sender: TObject);
begin
FindQQWin;
if hBar=0 then
begin
Showmessage('QQ未运行');
Exit;
end;
hQQ:=Getparent(hBar);
SetForegroundWindow(hQQ);

keybd_event(vk_f1,0,KEYEVENTF_EXTENDEDKEY,0);
keybd_event(vk_f1,0,KEYEVENTF_KEYUP,0);

{ postmessage(hBar,WM_KEYDOWN,vk_F1,$3b0001);
postmessage(hBar,WM_KEYup,vk_F1,$c03b0001);}
end;
本来想用WM_KEYDOWN与UP的,消息发过去倒是对的,用SPY++跟踪也显示好像没什么
问题,但是QQ就是不正常响应(怪。。。。)
换了KEYBD_EVENT才行了
另:VS。NET的SPY++在我机上跑得十分不稳定,常导致机器没响应。。。还是VC6的好
 
GOOD 学习 我也试了几种方法 可都没调试成功 :(
 
to xiao_min
谢谢你了,可你就直接帖上那两句有用的不就行了:),我公平看了半天,不知有没有
办法在QQ不是当前窗体的情况下,发送给他消息,而调用F1按钮打开帮助?
 
我再试试了。。。
 
//设置窗口焦点
SetForegroundWindow(hQQ);
//发送键盘信息
keybd_event(vk_f1,0,KEYEVENTF_EXTENDEDKEY,0);
keybd_event(vk_f1,0,KEYEVENTF_KEYUP,0);
 
能不能不用理那个程序,而只是向它发送?不管是在前台还是在后台!(当然得让它接收
到并执行啊:),我的意思是说在后台执行,
 
postmessage(hBar,WM_KEYDOWN,vk_F1,$3b0001);
postmessage(hBar,WM_KEYup,vk_F1,$c03b0001);
新发现:如果用这个方法,那么发过去的不是F1,而是CTRL+P(处于焦点的情况下才能接收)
测试方法:如果你的好友中有P打头(中文的(如:胖)也行),那么手动按CTRL+P与
程序发效果是一样的。。。,就是会自动定位到那个QQ好友的头像处,CTRL+其他字母也是
一样的,这应该是QQ的快捷键了。。
 
我这边手动不成功哦 :0
 
不是吧,我这边的QQ是0305B,珊瑚虫补丁1.22
是不是QQ的新功能,还是这个显IP补丁的功能?呵呵
 

Similar threads

D
回复
0
查看
1K
DelphiTeacher的专栏
D
I
回复
0
查看
643
import
I
S
回复
0
查看
3K
SUNSTONE的Delphi笔记
S
S
回复
0
查看
2K
SUNSTONE的Delphi笔记
S
后退
顶部