![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Получать сообщения от чужого окна.? [D5, WinXP]
ptr © (2004-01-08 12:25:00)Конкретный пример: у меня есть hwnd окна, мне нужно как придет событие wm_paint к нему кое-что сделать(нарисовать на нем че-нить, а то Timer плохо пашет =) ...
заранее благодарен.
Игорь Шевченко (2004-01-12 13:46:00) [1]YuRock © (12.01.04 13:19)
long SetWindowData (PWND Wnd, int gwlOffset, long Data, BOOL fAnsi)
{
switch (gwlOffset) {
...
case GWL_WNDPROC:
...
if ((GetKThread()->ApcState.Process->Win32Process !=
((PWIN32_THREAD)Wnd->PtiWindow)->Win32Process) ||
(Wnd->FNID & FNID_DESTROYING)) {
UserSetLastError (ERROR_ACCESS_DENIED);
return 0;
}
...
}
}
YuRock (2004-01-12 13:19:00) [2]> Игорь Шевченко
> BiN
Все, еще раз извиняюсь. Ну простите, пожалуйста! 9 лет ангийский учил (7 в школе и 2 в универе) - и все бестолку :)
Еще раз перед всеми извиняюсь за непроверенную информацию.
BiN (2004-01-12 13:12:00) [3]т.е. любому другому потоку в вызывающем процессе
BiN (2004-01-12 13:12:00) [4]а по-русски это означает, что окно должно принадлежать потоку, кот. в том же процессе, что и вызывающий поток
BiN (2004-01-12 13:10:00) [5]....ну и
YuRock (2004-01-12 13:08:00) [6]> BiN © (12.01.04 13:03) [15]
[17]
YuRock (2004-01-12 13:07:00) [7]> Игорь Шевченко © (12.01.04 13:03) [16]
he SetWindowLong function changes an attribute of the specified window. The function also sets a 32-bit (long) value at the specified offset into the extra window memory of a window.
LONG SetWindowLong(
HWND hWnd, // handle of window
int nIndex, // offset of value to set
LONG dwNewLong // new value
);
...
Remarks
The SetWindowLong function fails if the window specified by the hWnd parameter does not belong to the same process as the calling thread .
Игорь Шевченко (2004-01-12 13:03:00) [8]YuRock © (12.01.04 12:55)
Система ограничивает возможность установки оконной процедуры на уровне процесса. Для окон других процессов система (а именно, функция SetWindowData в Win32k.sys) возвращает ошибку ERROR_ACCESS_DENIED. Для окон других потоков установка возможна, так как адресное пространство у них единое и код оконной процедуры будет выполняться в том потоке, которому принадлежит окно.
С уважением,
BiN (2004-01-12 13:03:00) [9]YuRock © (12.01.04 12:55) [14] .. Для других потоков (тем более - процессов) так работать конечно не будет.
для других потоков в пределах одного процесса - будет ;)
YuRock (2004-01-12 12:55:00) [10]> Akvilon
> Игорь Шевченко
> BiN
Извиняюсь, недочитал вопрос... Для других потоков (тем более - процессов) так работать конечно не будет.
Kerk (2004-01-12 12:10:00) [11]Я наверно чего-то не понимаю, но чем хук не устраивает?
Игорь Шевченко (2004-01-12 12:09:00) [12]YuRock © (12.01.04 10:18)
> У меня получается...
Для окон другого процесса получается WndProc подменить через SetWindowLong ? А поделиться кодом ? :)
BiN (2004-01-12 10:19:00) [13]YuRock © (12.01.04 10:18) [10]
Игорь наверно имеет ввиду не только окна твоегопроцесса
YuRock (2004-01-12 10:18:00) [14]> Игорь Шевченко © (12.01.04 10:12) [8]
У меня получается...
BiN (2004-01-12 10:17:00) [15]Игорь Шевченко © (12.01.04 10:12)
..так же как и все ранее предложенные методы
Игорь Шевченко (2004-01-12 10:12:00) [16]YuRock © (11.01.04 20:23)
Таки любому окну не получится...
YuRock (2004-01-11 20:23:00) [17]Прогу писать не буду. С помощью SetWindowLong ставите свою оконную процедуру любому окну. В ней обрабатываете WM_PAINT.
ptr (2004-01-11 20:19:00) [18]слухьте =) ... кому не влом написать сюда прогу которая будет отлавливать wm_paint от любого приложения и рисовать линию на нем ..
... спасибо .
заренее благодарен =)
Akvilon (2004-01-11 11:12:00) [19]SetWindowLong
GetWindowLong
это только для окон своего приложения, а не совсем чужого
Kerk (2004-01-09 09:40:00) [20]
>
> ptr (08.01.04 13:42) [2]
> мда ... как то там все сложно ... нифига непонятно =) ..
http://www.delphimaster.ru/articles/hooks/index.html