CB_SELECTSTRING 在某些机器上被忽略

Posted

技术标签:

【中文标题】CB_SELECTSTRING 在某些机器上被忽略【英文标题】:CB_SELECTSTRING ignored on some machines 【发布时间】:2013-10-17 22:14:29 【问题描述】:

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

任何帮助表示赞赏!

【问题讨论】:

【参考方案1】:

根据您用于更改文件名的方法,向 ComboBox 的父级(CBN_SELCHANGE 或 CBN_EDITCHANGE)发送适当的 WM_COMMAND 通知

【讨论】:

谢谢,现在都整理好了。我仍然想知道为什么它在没有通知父母的情况下在本地工作。如果有人需要有关传回 CBN_SELCHANGE 的更多信息 - 请阅读这篇文章:***.com/a/1626264/485790【参考方案2】:

猜测:您的目标应用程序是更高权限的应用程序,Windows 正在阻止您的消息。

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

【讨论】:

以上是关于CB_SELECTSTRING 在某些机器上被忽略的主要内容,如果未能解决你的问题,请参考以下文章

关键帧中的非动画属性在 iOS 上被忽略

Youtube iFrame API setPlaybackQuality 在移动设备上被忽略

<textarea> 占位符的换行符 \n 在 Safari 上被忽略

Symfony2 子域防火墙在生产服务器上被忽略

<pre> 标签在 Android 版 Zoho Mail 应用程序上被忽略

shouldOverrideUrlLoading 仅在某些网页上被调用