Форум: "Начинающим";
Текущий архив: 2008.09.14;
Скачать: [xml.tar.bz2];
ВнизСообщения чужим окнам. Найти похожие ветки
← →
sashap (2008-07-13 01:19) [0]Есть H: HWND окна. Нужно сообшение (Msg), значение которого больше WM_USER, отослать этому окну. SendMessage( H, WM_USER+2, 1, integer(@Buf[0])) не помогает.
После долгих поисков, я понял, что это можно сделать двумя способами: через внедрение DLL и с помощью выделения памяти в процессе (VirtualAllocEx).
Пока что второй вариант кажется более заманчивым, но он у меня не совсем получается. Вот пример:
[code]var
H: HWND;
p: Pointer;
Process: THandle;
ProcessID: DWORD;
Buf: array[0..99] of Char;
BRead: Cardinal;
begin
H:= FindWindow("Window Class", nil);
GetWindowThreadProcessId(H, @ProcessID);
Process:= OpenProcess(PROCESS_ALL_ACCESS, false, ProcessID);
p:= VirtualAllocEx(Process, nil, sizeof(Buf), MEM_RESERVE or MEM_COMMIT, PAGE_READWRITE);
SendMessage( H, WM_GETTEXT, sizeof(Buf), integer(p)); //бяка
ReadProcessMemory( Process, p, @Buf[0], sizeof(Buf), BRead );
ShowMessage(copy(Buf,0,BRead));
VirtualFreeEx(Process, p, 0, MEM_RELEASE);
CloseHandle(Process);
end;[/code]
WM_GETTEXT тут для примера. Как я понял, проблема в том, что в указатель p ничего не записывается, так как он находится в памяти другой программы, а SendMessage домает, что в родной. Можно ли как-то исправить это?
← →
Renegat (2008-07-13 01:24) [1]> SendMessage( H, WM_USER+2, 1, integer(@Buf[0])) не помогает
Да што вы говорите! А может быть дело в том что та, сторонняя, прога тупо не знает, как это сообщение нужно обрабатывать?
Иными словами, какой реакции вы хотите достичь от той проги, которой посылаете это сообщение?
← →
Германн © (2008-07-13 01:47) [2]
> sashap (13.07.08 01:19)
>
> Есть H: HWND окна. Нужно сообшение (Msg), значение которого
> больше WM_USER, отослать этому окну. SendMessage( H, WM_USER+2,
> 1, integer(@Buf[0])) не помогает.
>
> Как я понял, проблема в том, что в указатель p ничего не
> записывается, так как он находится в памяти другой программы,
> а SendMessage домает, что в родной. Можно ли как-то исправить
> это?
>
Никак. В указатель p записывается некое значение, но это значение не имеет никакого смысла в окне чужого процесса.
← →
Германн © (2008-07-13 02:01) [3]
> Никак. В указатель p записывается некое значение, но это
> значение не имеет никакого смысла в окне чужого процесса.
>
Блин.
не имеет никакого смысла в АП чужого процесса./I>
← →
Loginov Dmitry © (2008-07-13 13:03) [4]> SendMessage( H, WM_GETTEXT, sizeof(Buf), integer(p)); //бяка
Зачем в SendMessage с сообщением WM_GETTEXT потребовалось совать указатель на блок памяти, выделенный в чужом адресном пространстве?
> Как я понял, проблема в том, что в указатель p ничего не
> записывается, так как он находится в памяти другой программы,
> а SendMessage домает, что в родной. Можно ли как-то исправить
> это?
Скопируй, в чем проблема?
← →
cerber (2008-07-27 01:08) [5]попробуй вместо WM_USER+2 написать WM_APP+2
← →
evidingimmelf (2008-08-02 04:56) [6]возбуждающий минет <a href=http://www.forum.tipotakoi.ru/>скачать безплатно малолетки видео </a>
Страницы: 1 вся ветка
Форум: "Начинающим";
Текущий архив: 2008.09.14;
Скачать: [xml.tar.bz2];
Память: 0.46 MB
Время: 0.061 c