delphi 网页模拟鼠标按键
用自己程序打开IE浏览器的主页:如www.baidu.com,然后同时点击'新闻'和'图片';
如果这个浏览器是我内嵌我的程序里面还比较好操作,,但是如果是外置打开了话,要首先取得窗口向柄
function CheckTask(ExeFileName: string): Boolean;
const
PROCESS_TERMINATE=$0001;
var
ContinueLoop: BOOL;
FSnapshotHandle: THandle;
FProcessEntry32: TProcessEntry32;
begin
result := False;
FSnapshotHandle := CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS,0);
FProcessEntry32.dwSize := Sizeof(FProcessEntry32);
ContinueLoop := Process32First(FSnapshotHandle,FProcessEntry32);
while integer(ContinueLoop) <> 0 do begin
if ((UpperCase(ExtractFileName(FProcessEntry32.szExeFile)) =UpperCase(ExeFileName))
or (UpperCase(FProcessEntry32.szExeFile) =UpperCase(ExeFileName))) then
result := True;
ContinueLoop := Process32Next(FSnapshotHandle,FProcessEntry32);
end;
end;
procedure TForm1.Timer1Timer(Sender: TObject);
begin
if CheckTask(Edit1.Text)=true then
Label1.Caption:='进程正在运行中...'
else
Label1.Caption:='进程不存在,监视中...';
end;
现在IE我已经打开了,并且已经打开www.baidu.com 主页,
我以前的思路是这样,模拟鼠标位置,然后发送位置点击,但是发现,,如果当前IE不是指定前置,没有用,还有跟我们液晶,分辨率也有关系,经常会跑偏位置,所以行不通
第二是,通过获取IE的窗口句柄,然后再遍历IE的网页按钮名称,发送模拟按键,这样,就不限鼠标操作了,请问这一步要怎么操作呢
[解决办法]
使用IHTMLDOCUMENT2接口,非常方便。
[解决办法]
//查找子窗口
function EnumChildProc(
hwnd: HWND;
lParam: LPARAM
): BOOL; stdcall;
var
vBuffer: array[0..255] of Char;
begin
PInteger(lParam)^ := 0;
GetClassName(hwnd, vBuffer, SizeOf(vBuffer));
if SameText( 'ATL:Edit', vBuffer) then //'ATL:Edit'是类名,你可以用spy++查到你要操作的组件的类名
begin
PInteger(lParam)^ := hwnd;
Result := False;
end else Result := True;
end;
//发送文字,你换成发送按键消息
procedure TfrmMain.SendText(s: string);
var
I: Integer;
vHandle: THandle;
begin
vHandle := WebBrowser2.Handle;
if vHandle = 0 then Exit;
EnumChildWindows(vHandle, @EnumChildProc, Integer(@vHandle));
if vHandle = 0 then Exit;
for I := 1 to Length(S) do
SendMessage(vHandle, WM_CHAR, Ord(S[I]), 0);
end;
[解决办法]
IHTMLDOCUMENT2 然后点击网页里面的连接
当然也可以对其进行文本输入