2013-10-10 132 views
0

我正在使用user32庫來自動化某些瀏覽器在Windows上的點擊,特別是IE中的「另存爲」對話框。我的解決方案在我的盒子上工作正常,但是在其他計算機上並不真實CB_SELECTSTRING在某些機器上被忽略

問題是當我在組合框中設置下載路徑時,我傳入的文件名被忽略並使用原始值。其他消息在這兩種環境下都可以接受,這包括單擊按鈕,獲取窗口句柄,迭代窗口,您將其命名。

我知道這是一個相當廣泛的問題,但任何想法可能會影響這種行爲?我相信我的代碼是正確的,所以我正在尋找其他地方的原因,如權限,不同的user32版本,......?

以下將顯示組合框中的文本,選擇字符串將會成功,但是一旦單擊保存按鈕,將使用原始值。

User32.SendMessage(combobox, User32Constants.CB_ADDSTRING, 0, DownloadAsFileName); 
var selected = User32.SendMessage(pointerToParent, User32Constants.CB_SELECTSTRING, -1, DownloadAsFileName); 

我嘗試了不同的技術來獲取目標路徑到組合框,但是相同的結果。只在我的盒子上工作,我可以看到然後sendmessages正在返回預期的結果,但使用默認值。

User32.SendMessage(editPartOfCB, User32Constants.WM_SETTEXT, DownloadAsFileName.Length, DownloadAsFileName); 
User32.SendMessage(combobox, User32Constants.CB_SETCURSEL, 0, IntPtr.Zero); 

任何幫助表示讚賞!

回答

1

根據您使用更改文件名的方法,發送適當的WM_COMMAND通知到ComboBox(CBN_SELCHANGE或CBN_EDITCHANGE)

+0

感謝的家長,現在所有排序。我仍然想知道爲什麼它在本地工作而沒有通知父母。如果有人需要更多關於傳回CBN_SELCHANGE的信息 - 請閱讀本文:http://stackoverflow.com/a/1626264/485790 – Vojtiik

1

瘋狂猜測:您所針對的應用程序是更高權限的應用程序,Windows阻止您的消息。

嘗試以管理員身份運行您的流程並查看是否會影響結果。