ここから次のコードを取得して少し変更し、元の質問も少し変更しました。
タイマー間隔は 5000 に設定されています。
次の 3 つのイベントが発生した後、'Events OnTimer' 手順が開始されます。
- 1.WebBrowser1.Navigate('任意の Web ページ');
- 2.ロードされるのを待ちます
- 3. プログラムでファイルのダウンロード ボタンを押す
問題は、[名前を付けて保存] ダイアログ ボックスに属する (またはその子である) [編集](クラス名) ハンドルが見つからないことです。「編集」のハンドルは、以下のコードでは「0」になりますが、マウス ポインターと次のコードを使用すると:
HND:= WindowFromPoint(PNT);
Label1.Caption:= IntToStr(HND);
ハンドルは結果を返します。ハンドルを取得したら、次を使用できます。
SetWindowText(EditHandle, 'test text');
「編集」(クラス名)のテキストを変更します。
procedure TForm1.Timer1Timer(Sender: TObject);
Var
WHandle : HWND ;
ParentHandle : DWORD ;
P : Array[0..256] Of Char ;
ProcessIdActif : DWORD ;
begin
ProcessIdActif := 0 ;
GetWindowThreadProcessId (handle,@ProcessIdActif);
WHandle := FindWindow( Nil, Nil);
While (WHandle <> 0) Do
begin
P[0] := #0;
GetWindowText(WHandle, P, 255);
if P[0] <> #0 then
begin
GetWindowThreadProcessId (WHandle,@ParentHandle);
if ProcessIdActif = ParentHandle then
begin
if CompareText(p,'File Download') = 0 then
begin
ButtonHandle := FindWindowEx(WHandle, 0, 'Button', '&Save');
if (ButtonHandle > 0) then
PostMessage(ButtonHandle, BM_CLICK, 0, 0);
end
else if CompareText(p,'Save As') = 0 then
begin
EditHandle := FindWindowEx(WHandle, 0, 'Edit',NIL);
if (EditHandle > 0) then
SetWindowText(EditHandle, 'test text');
end;
end;
end;
WHandle := GetWindow(WHandle, GW_HWNDNEXT);
end;
end;
ここですべてを理解しようとしていますが、何かが欠けています。
マウスを動かしてプログラムでマウスを押すことで、ウィンドウのダイアログボタンを押すことができますが、これらのボタンをよりきれいな方法で押す方法を見つけたいと思います。