首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >不能在使用sendmessage和WM_SETTEXT时触发textchanged事件,但PostMessage可以

不能在使用sendmessage和WM_SETTEXT时触发textchanged事件,但PostMessage可以
EN

Stack Overflow用户
提问于 2013-10-07 19:56:24
回答 1查看 1.8K关注 0票数 0

我有一个类似于this的问题,但我仍然无法解决它。

我试图编辑一个文本框的对比度和亮度内的图像查看程序从我的wpf程序。更改这两个文本框中的值将立即触发图像的更改。使用Spy++可以为这两个文本框获得精确的窗口句柄,我已经尝试过以下方法,但仍然无法从C#程序中获得所需的内容。

方法1:该方法允许我立即更改文本框的整个文本,但更改不会自动触发和反映图像查看器中图像的对比度/亮度变化。

代码语言:javascript
复制
IntPtr text = Marshal.StringToCoTaskMemUni(value.ToString());
SendMessage(window, WM_SETTEXT, 0, text);
Marshal.FreeCoTaskMem(text);

方法2:此方法获取文本框的RECT位置,手动设置鼠标单击该文本框,然后继续发送特定数字的键(例如。对比值100将发送3次与vk的数字1一次和数字0两次)。此方法将成功地更改文本框中的文本,并在输入每个数字时触发对比度事件。问题是,图像随数字的每个输入而变化。图像反映到key1的第一个输入(对比度为1),然后是key0 (对比度为10),最后是另一个key0 (对比度为100,我们希望的实际对比度)。

代码语言:javascript
复制
    RECT hwnd_loc = new RECT();
    GetWindowRect(w_hwnd, ref hwnd_loc);

    IntPtr lParam = (IntPtr)(((hwnd_loc.Top + 2) << 16) | (hwnd_loc.Left + 2));

    PostMessage(w_hwnd, WM_LBUTTONDOWN, 0, (int)lParam);
    PostMessage(w_hwnd, WM_LBUTTONUP, 0, (int)lParam);

    for (int i = index.Count - 1; i >= 0; i--)
    {
        PostMessage(w_hwnd, WM_KEYDOWN, key[index.ElementAt(i)], 0);
    }

那么,是否有一种方法可以PostMessage整组数字,而不是使用WM_keydown,或者如果有一种方法可以使用SendMessage,但却允许图像查看程序看到更改并触发对比度事件?任何帮助都将不胜感激!

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2013-10-07 20:05:13

这基本上是你力所能及的。问题中的应用程序似乎只是在调用更新预览时才对WM_KEYDOWN事件作出反应。

您可以尝试使用WM_SETTEXT设置文本,然后将WM_KEYDOWN作为一种非操作(如箭头右键或其他东西)发送。这是假设所讨论的代码只是写成“等待一个WM_KEYDOWN事件,然后解析文本框的文本”。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/19233518

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档