Что означает lPram и wParam и каждый раз контекст?Я использую PostMessage API из C # - PullRequest
2 голосов
/ 28 июля 2011

Я пересылаю сообщения некоторым фактическим элементам управления процессом из другого процесса (этот другой процесс имитировал все элементы управления этого фактического процесса после перехвата).Мне нужно перенаправить все клики на фактические элементы управления из этих смоделированных элементов управления.

По этой причине я использую PostMessage API.

Я полностью прояснил все параметры PostMessage, кроме lParam и wParam,Какие фактические значения мне нужно передать для этих PostMessage, содержащих wParam и lParams.

На данный момент я использую CheckedListBox и в его событии ItemChecked мне нужно передать проверенный элемент фактическому CheckedListBox, который содержится в реальном процессеЭлементы управления whome подключены и отрисованы в другом процессе.

Код:

    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 для достижения точного щелчка и точной передачи сообщений от одного процесса (т. Е. Имитированных элементов управления от имитируемого процесса к реальному процессу).

С уважением, Усман

1 Ответ

4 голосов
/ 28 июля 2011

Имена wParam и lParam означают «параметр слова» и «длинный параметр» и являются пережитками из Win16, когда эти параметры фактически были 2- и 4-байтовыми значениями, хотя оба они являются 4-байтовыми целыми числами.значения в Win32.Точные значения необходимы для сообщения, которое вы отправляете.Чтобы выяснить это, вам нужно просмотреть сообщения в документации по Win32 API, например:

WM_LBUTTONDOWN и WM_LBUTTONUP

Inв этом случае вам повезло, что ни один из параметров не должен быть сложной структурой, поэтому вам просто нужно создать правильное 32-битное значение с вашими координатами в них с помощью операторов & и <<.</p>

Нередко один из параметров является указателем на структуру, и в этом случае вам придется прибегнуть к использованию класса Marshal (в частности, AllocHGlobal, StructureToPtr, and FreeHGlobal) для приведения данных впригодный для использования формат.

РЕДАКТИРОВАТЬ:

Обратите внимание, что большинство общих элементов управления Windows, таких как ListBox, имеют специальные сообщения, которые сопоставляются с событиями, предоставляемыми .NET.К сожалению, в данном конкретном случае CheckedListBox не является стандартным элементом управления Windows API;Я на самом деле не проверял, но я бы предположил, что это нарисованный владельцем элемент управления ListBox.Вероятно, вы можете проверить / снять флажок с элементов в элементе управления с помощью события LB_SETITEMDATA , но если очевидные значения для lParam (1/0) на самом деле не сработают, вам придется копать с помощью Spy ++ или чего-то подобногочтобы понять это.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...