Привет.
У меня есть элемент управления 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();
Кто-нибудь помогите.
Для запуска функции события, которая подключена к элементу управления с параметром 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);
Других решений пока нет …