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的好