我從here得到了下面的代碼,並對其進行了一些修改,我也改變了原來的一些問題。按下windows msdn對話框中的按鈕,並在Delphi中的'另存爲'對話框中更改'編輯'
定時器間隔設置爲5000.
發生以下3個事件後,「事件OnTimer」過程將開始工作。
- 1.WebBrowser1.Navigate('Any page');
- 2.wait它加載
- 3.programmatically按下載文件按鈕
現在的問題是我無法找到「編輯」(類名)處理屬於(或是'另存爲'對話框的孩子。在「編輯」手柄來「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;
我一直在試圖理解一切here但我失去了一些東西。
我可以通過移動鼠標並以編程方式按下鼠標按下任何窗口對話框按鈕,但我想弄清楚如何以更清潔的方式按下這些按鈕。
爲什麼要使用一個可視組件下載文件。像Indy一樣做。 –
@David問題是關於按下按鈕和控制對話框,而不是下載加載文件。但是,要回答你的問題,這裏有2個鏈接:[link](http://stackoverflow.com/questions/13377779/how-do-i-keep-an-embedded-browser-from-prompting-where-to-保存下載的文件),[鏈接](http://stackoverflow.com/questions/13306237/downloading-csv-files-in-delphi/13312489#13312489) –
我只是想指出你可能是什麼已經是一個更簡單的解決方案。 –