首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > .NET > .NET >

delphi 网页模拟鼠标按键,该如何处理

2012-12-30 
delphi 网页模拟鼠标按键用自己程序打开IE浏览器的主页:如www.baidu.com,然后同时点击新闻和图片;如果

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  然后点击网页里面的连接
  当然也可以对其进行文本输入

热点排行