我用DELPHI想在彈出檔案下載視窗后直接模擬點擊保存按鈕,但不成功,只能把焦點停在保存按鈕上,之后的動作不執行,請各位高手幫忙指點,代碼如下:
procedure TForm1.Button1Click(Sender: TObject);
var
H,hc: HWND;
i:integer;
begin
h := findwindow(nil, '檔案下載');
if H > 0 then
begin
// FindWindowEx(h,0, 'Button', '保存(&S)')
hc := FindWindowEx(h,0, 'Button', '保存(&S)');
if hc> 0 then
begin
// windows.SetForegroundWindow(h);
SendMessage(hc, WM_LBUTTONDOWN, 0, 0);
// Sleep(20);
SendMessage(hc, WM_LBUTTONUP, 0, 0);
// Sleep(20);
// SendMessage(hc, BM_CLICK, 0, 0);
// Sleep(20);
PostMessage(hc, BM_CLICK, 0, 0);
// PostMessage(hc, WM_KEYDOWN, VK_RETURN, 0); SendMessage(hc, WM_LBUTTONDOWN, 0, 0);
// SendMessage(hc, VK_RETURN, 0, 0);
// keybd_event(VK_RETURN, 0, KEYEVENTF_KEYUP, 0);
//PostMessage(hc,VK_RETURN,13,0);
{ SendMessage(hc, WM_LBUTTONDOWN ,MK_LBUTTON, MAKELPARAM (100, 200));
SendMessage(WM_COMMAND, ID_FILE_SAVE_AS, 0);
keybd_event(VK_MENU, 0, 0, 0);
keybd_event(VK_RETURN, 0, 0, 0);
keybd_event(VK_RETURN, 0, KEYEVENTF_KEYUP, 0);
keybd_event(VK_MENU, 0, KEYEVENTF_KEYUP, 0);
SendMessage(hc, WM_LBUTTONUP, MK_LBUTTON, MAKELPARAM(100,200));
}
end
end;
end;
uj5u.com熱心網友回復:
把下載視窗設成當前視窗也不行uj5u.com熱心網友回復:
是IE的下載框?如果是那很有可能于COM有關uj5u.com熱心網友回復:
這是代碼運行機制不同步造成的,特別是寫檔案(下載)時特出。建議使用執行緒。uj5u.com熱心網友回復:
是的,

運行我的程式只能把焦點停在保存按鈕上,就是不執行下面的模擬鍵盤按鍵,請多多指教!
uj5u.com熱心網友回復:
請教一下應如何使用執行緒來執行?
uj5u.com熱心網友回復:
看起來高手都歸隱了,自己頂一下uj5u.com熱心網友回復:
看看子視窗的句柄找對了沒有,用spy++照一下然后對比一下視窗句柄 hcuj5u.com熱心網友回復:
模擬回車事件:keybd_event(VK_RETURN, MapVirtualKey(VK_RETURN, 0),0,0);
keybd_event(VK_RETURN, MapVirtualKey(VK_RETURN, 0),KEYEVENTF_KEYUP,0);
uj5u.com熱心網友回復:
這些都試過了就是不行,不知道是不是我呼叫的主程式一定要先隱藏起來才行還是什么問題,因為這些在我的另一個程式控制PDF閱讀器都能正常運行,但就控制不了“下載保存”這種彈出式視窗
uj5u.com熱心網友回復:
試試模擬快捷鍵uj5u.com熱心網友回復:
謝謝!我也模擬了CTRL+S也不執行,不知為啥?只是能定位到按鈕“保存”上,但不執行任何按鍵
uj5u.com熱心網友回復:
怎么是Ctrl+S呢,是Alt+S啊
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/113146.html
