你每次控制都得去重找,下面是在QQ对话模式下控其发送按钮,代码可在 http://www.xmflyfish.com/awind/qqmsg.rar下载 var hw, hb: THandle; {想要控制的窗体和按钮的句柄} ... {找想要控制的窗体的句柄} function EnumWindowsProc(hwnd: HWND; lParam: LPARAM): Boolean; stdcall; var cName: array[0..180] of Char; wName: array[0..32] of Char; tHandle: Longword; begin GetClassName(hwnd, cName, 32); GetWindowText(hwnd, wName, 180); result := true; tHandle := GetWindowLong(hwnd, GWL_STYLE); {判断窗体是否可见} if (Pos('聊天中', StrPas(wName)) > 0) and ((WS_VISIBLE and tHandle) > 1) then begin hw := hwnd; result := false; end; end; {找按钮句柄} function GetButtonHandle(hwnd: HWND; lParam: LPARAM): Boolean; stdcall; var cName: array[0..180] of Char; wName: array[0..12] of Char; begin result := true; GetClassName(hwnd, cName, 180); if StrPas(cName) = 'Button' then begin GetWindowText(hwnd, wName, 12); if StrPas(wName) = '发送(&S)' then begin hb := hwnd; result := false; end; end; end; ... procedure TfrmSend.btnStartClick(Sender: TObject); begin EnumWindows(@EnumWindowsProc, 0); if hw <> 0 then EnumChildWindows(hw, @GetButtonHandle, 0); if hb = 0 then Exit; {找到,执行命令} SendMessage(hb, WM_LBUTTONDOWN, 0, 0); SendMessage(hb, WM_LBUTTONUP, 0, 0); end;
http://www.xmflyfish.com/awind/qqmsg.rar下载
var
hw, hb: THandle; {想要控制的窗体和按钮的句柄}
...
{找想要控制的窗体的句柄}
function EnumWindowsProc(hwnd: HWND; lParam: LPARAM): Boolean; stdcall;
var
cName: array[0..180] of Char;
wName: array[0..32] of Char;
tHandle: Longword;
begin
GetClassName(hwnd, cName, 32);
GetWindowText(hwnd, wName, 180);
result := true;
tHandle := GetWindowLong(hwnd, GWL_STYLE); {判断窗体是否可见}
if (Pos('聊天中', StrPas(wName)) > 0) and ((WS_VISIBLE and tHandle) > 1) then
begin
hw := hwnd;
result := false;
end;
end;
{找按钮句柄}
function GetButtonHandle(hwnd: HWND; lParam: LPARAM): Boolean; stdcall;
var
cName: array[0..180] of Char;
wName: array[0..12] of Char;
begin
result := true;
GetClassName(hwnd, cName, 180);
if StrPas(cName) = 'Button' then
begin
GetWindowText(hwnd, wName, 12);
if StrPas(wName) = '发送(&S)' then
begin
hb := hwnd;
result := false;
end;
end;
end;
...
procedure TfrmSend.btnStartClick(Sender: TObject);
begin
EnumWindows(@EnumWindowsProc, 0);
if hw <> 0 then EnumChildWindows(hw, @GetButtonHandle, 0);
if hb = 0 then Exit;
{找到,执行命令}
SendMessage(hb, WM_LBUTTONDOWN, 0, 0);
SendMessage(hb, WM_LBUTTONUP, 0, 0);
end;