gpt4 book ai didi

c# - lPram 和 wParam 每次的含义和上下文是什么?我正在使用 C# 中的 PostMessage API

转载 作者:行者123 更新时间:2023-11-30 21:13:26 25 4
gpt4 key购买 nike

我正在将消息从其他进程转发到一些实际进程控件(这个其他进程在 Hook 后模拟了该实际进程的所有控件)。我需要将所有点击从这些模拟控件转发到实际控件。

出于这个原因,我正在使用 PostMessage API。

除了 lParam 和 wParam 之外,我对 PostMessage 的所有参数一清二楚。我需要为这些包含 wParam 和 lParams 的 PostMessage 传递什么实际值。

现在我正在使用 CheckedListBox 并在它的 ItemChecked 事件上,我需要将这个检查的项目传递给实际的 CheckedListBox 那些包含在其他进程上 Hook 和绘制的控件的实际进程。

代码:

    CheckedListBox ListBoxCh;

ListBoxCh.ItemCheck+=new ItemCheckEventHandler(TAKOCheckedListBox_ItemCheck);

public void TestCheckedListBox_ItemCheck(Object sender, ItemCheckEventArgs a_Args)
{
PostMessage(hWnd,(int)Win32.WindowMessages.WM_LBUTTONDOWN,(IntPtr)0,(IntPtr)0); ??
PostMessage(hWnd, (int)Win32.WindowMessages.WM_LBUTTONUP, (IntPtr)0, (IntPtr)0); ??
}

现在,对于每个控件(在本例中为 CheckedListBox,以及所有其余控件)的每次单击,我们需要为 wParam 和 lParam 传递什么值才能实现精确的单击和来自一个进程的精确消息传递(即具有从模拟过程到实际过程的模拟控制)。

问候乌斯曼

最佳答案

名称 wParamlParam 意思是“字参数”和“长参数”,是 Win16 的保留值,当时这些参数实际上是 2 字节和 4 字节值, 尽管它们在 Win32 中都是 4 字节整数值。所需的确切值特定于您发送的消息。您必须在 Win32 API 文档中查找消息才能弄明白,例如:

WM_LBUTTONDOWNWM_LBUTTONUP

在这种情况下,您很幸运,因为这两个参数都不必是复杂的结构,因此您只需要使用 & 和 << 运算符构造适当的 32 位值,其中包含您的坐标。

其中一个参数是指向结构的指针并不少见,在这种情况下,您将不得不求助于使用 Marshal 类(具体来说,AllocHGlobal、StructureToPtr、和 FreeHGlobal) 将数据强制转换为可用格式。

编辑:

请注意,大多数 Windows 常用控件(如 ListBox)都具有映射到 .NET 公开的事件的特殊消息。不幸的是,在这种特定情况下,CheckedListBox 不是标准的 Windows API 控件;我没有实际检查过,但我猜它是一个所有者绘制的 ListBox 控件。您可能可以使用 LB_SETITEMDATA 事件检查/取消检查控件中的项目,但除非 lParam (1/0) 的明显值确实有效,否则您必须使用 Spy++ 或类似的东西进行一些挖掘才能弄清楚。

关于c# - lPram 和 wParam 每次的含义和上下文是什么?我正在使用 C# 中的 PostMessage API,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6852252/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com