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

delphi 网页模拟鼠标按键解决方案

2012-06-11 
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接口,非常方便。
[解决办法]

Delphi(Pascal) code
//查找子窗口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 然后点击网页里面的连接
当然也可以对其进行文本输入

热点排行