Отправить WM_NOTIFY из внедренной DLL или использованной функции __published?

Привет.
У меня есть элемент управления ListView в другом процессе.
Я не хочу нажимать на ListView.

Поскольку Windows запрещает отправлять WM_NOTIFY, я решаю внедрить dll в приложение.

Когда я пытаюсь отправить сообщение WM_NOTIFY от введенной DLL, я получаю ошибку 998.

NMITEMACTIVATE nmbh;
nmbh.hdr.code = NM_DBLCLK;
nmbh.hdr.hwndFrom = a_FirstChild;
nmbh.hdr.idFrom = GetDlgCtrlID(a_FirstChild);
nmbh.iItem = 1;
nmbh.iSubItem = 0;
nmbh.uNewState = 0;
nmbh.uOldState = 0;
nmbh.uChanged = 0;
nmbh.uKeyFlags = 0;
SendMessage(GetParent(a_FirstChild), WM_NOTIFY, (WPARAM)a_FirstChild, (LPARAM)&nmbh);

Когда я пытаюсь выполнить функцию ListViewClick по адресу, сбой приложения.

typedef void(__cdecl *pFunctionAddress)();
pFunctionAddress pBtn = (pFunctionAddress)(0x00402F12);
pBtn();

Кто-нибудь помогите.

-1

Решение

Для запуска функции события, которая подключена к элементу управления с параметром TObject * sender, вам необходимо отправить 2 аргумента: this и TObject.

Для получения параметров вам нужно экспортировать MainForm (TForm) и разыменовать указатель на адрес, после запуска прототипа по адресу используйте аргументы.

unsigned int* proc = (unsigned int*)GetProcAddress(GetModuleHandle(NULL),MAKEINTRESOURCEA(17));
void* obj = (void *)(*proc);
typedef void(__cdecl *pFunctionAddress)(void* thisobj, void* tobjectsend);
pFunctionAddress pBtn = (pFunctionAddress)(0x00402EE4);
pBtn(obj, obj);
0

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]