某些机器上忽略了CB_SELECTSTRING

时间:2013-10-10 08:37:18

标签: c# c++ windows sendmessage user32

我正在使用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);

任何帮助表示赞赏!

2 个答案:

答案 0 :(得分:1)

狂野猜测:您定位的应用程序是更高权限的应用程序,而Windows正在阻止您的邮件。

尝试以管理员身份运行您的流程,看看是否会影响结果。

答案 1 :(得分:1)

根据您用于更改文件名的方法,将相应的WM_COMMAND通知发送给ComboBox的父级(CBN_SELCHANGE或CBN_EDITCHANGE)