我有一个类似于this的问题,但我仍然无法解决它。
我试图编辑一个文本框的对比度和亮度内的图像查看程序从我的wpf程序。更改这两个文本框中的值将立即触发图像的更改。使用Spy++可以为这两个文本框获得精确的窗口句柄,我已经尝试过以下方法,但仍然无法从C#程序中获得所需的内容。
方法1:该方法允许我立即更改文本框的整个文本,但更改不会自动触发和反映图像查看器中图像的对比度/亮度变化。
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,我们希望的实际对比度)。
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,但却允许图像查看程序看到更改并触发对比度事件?任何帮助都将不胜感激!
发布于 2013-10-07 20:05:13
这基本上是你力所能及的。问题中的应用程序似乎只是在调用更新预览时才对WM_KEYDOWN事件作出反应。
您可以尝试使用WM_SETTEXT设置文本,然后将WM_KEYDOWN作为一种非操作(如箭头右键或其他东西)发送。这是假设所讨论的代码只是写成“等待一个WM_KEYDOWN事件,然后解析文本框的文本”。
https://stackoverflow.com/questions/19233518
复制相似问题