0

私はuser32ライブラリを使用して、Windows、IE、特に「名前を付けて保存」ダイアログでブラウザのクリックを自動化しています。私のソリューションは私のボックスでは正常に機能しますが、他のコンピューターでは実際には機能しません。

問題は、コンボボックスでダウンロードパスを設定しているときに、渡すファイル名が無視され、元の値が使用されることです。他のメッセージは、両方の環境で問題なく受け入れられます。これには、ボタンのクリック、ウィンドウへのハンドルの取得、ウィンドウの反復などが含まれます。

私はそれが非常に幅広い質問であることを知っていますが、何がそのような行動に影響を与える可能性があるのでしょうか? 私は自分のコードが正しいと信じているので、権限、異なる 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);

どんな助けでも大歓迎です!

4

2 に答える 2

1

ファイル名の変更に使用する方法に応じて、適切な WM_COMMAND 通知を ComboBox の親に送信します (CBN_SELCHANGE または CBN_EDITCHANGE)。

于 2013-10-11T12:55:06.800 に答える
1

大雑把な推測: ターゲットにしているアプリケーションはより高い権限を持つアプリケーションであり、Windows がメッセージをブロックしています。

プロセスを管理者として実行してみて、それが結果に影響するかどうかを確認してください。

于 2013-10-11T06:53:58.690 に答える