Форум: "WinAPI";
Текущий архив: 2004.03.28;
Скачать: [xml.tar.bz2];
ВнизПолучать сообщения от чужого окна.? Найти похожие ветки
← →
ptr (2004-01-08 12:25) [0]Конкретный пример: у меня есть hwnd окна, мне нужно как придет событие wm_paint к нему кое-что сделать(нарисовать на нем че-нить, а то Timer плохо пашет =) ...
заранее благодарен.
← →
Kerk © (2004-01-08 12:27) [1]SetWindowsHookEx
← →
ptr (2004-01-08 13:42) [2]мда ... как то там все сложно ... нифига непонятно =) ..
← →
Prov © (2004-01-09 08:17) [3]SetWindowLong
GetWindowLong
← →
Kerk © (2004-01-09 09:40) [4]
>
> ptr (08.01.04 13:42) [2]
> мда ... как то там все сложно ... нифига непонятно =) ..
http://www.delphimaster.ru/articles/hooks/index.html
← →
Akvilon © (2004-01-11 11:12) [5]SetWindowLong
GetWindowLong
это только для окон своего приложения, а не совсем чужого
← →
ptr (2004-01-11 20:19) [6]слухьте =) ... кому не влом написать сюда прогу которая будет отлавливать wm_paint от любого приложения и рисовать линию на нем ..
... спасибо .
заренее благодарен =)
← →
YuRock © (2004-01-11 20:23) [7]Прогу писать не буду. С помощью SetWindowLong ставите свою оконную процедуру любому окну. В ней обрабатываете WM_PAINT.
← →
Игорь Шевченко © (2004-01-12 10:12) [8]YuRock © (11.01.04 20:23)
Таки любому окну не получится...
← →
BiN © (2004-01-12 10:17) [9]Игорь Шевченко © (12.01.04 10:12)
..так же как и все ранее предложенные методы
← →
YuRock © (2004-01-12 10:18) [10]> Игорь Шевченко © (12.01.04 10:12) [8]
У меня получается...
← →
BiN © (2004-01-12 10:19) [11]YuRock © (12.01.04 10:18) [10]
Игорь наверно имеет ввиду не только окна твоего процесса
← →
Игорь Шевченко © (2004-01-12 12:09) [12]YuRock © (12.01.04 10:18)
> У меня получается...
Для окон другого процесса получается WndProc подменить через SetWindowLong ? А поделиться кодом ? :)
← →
Kerk © (2004-01-12 12:10) [13]Я наверно чего-то не понимаю, но чем хук не устраивает?
← →
YuRock © (2004-01-12 12:55) [14]> Akvilon
> Игорь Шевченко
> BiN
Извиняюсь, недочитал вопрос... Для других потоков (тем более - процессов) так работать конечно не будет.
← →
BiN © (2004-01-12 13:03) [15]YuRock © (12.01.04 12:55) [14] .. Для других потоков (тем более - процессов) так работать конечно не будет.
для других потоков в пределах одного процесса - будет ;)
← →
Игорь Шевченко © (2004-01-12 13:03) [16]YuRock © (12.01.04 12:55)
Система ограничивает возможность установки оконной процедуры на уровне процесса. Для окон других процессов система (а именно, функция SetWindowData в Win32k.sys) возвращает ошибку ERROR_ACCESS_DENIED. Для окон других потоков установка возможна, так как адресное пространство у них единое и код оконной процедуры будет выполняться в том потоке, которому принадлежит окно.
С уважением,
← →
YuRock © (2004-01-12 13:07) [17]> Игорь Шевченко © (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.
← →
YuRock © (2004-01-12 13:08) [18]> BiN © (12.01.04 13:03) [15]
[17]
← →
BiN © (2004-01-12 13:10) [19]....ну и
← →
BiN © (2004-01-12 13:12) [20]а по-русски это означает, что окно должно принадлежать потоку, кот. в том же процессе, что и вызывающий поток
← →
BiN © (2004-01-12 13:12) [21]т.е. любому другому потоку в вызывающем процессе
← →
YuRock © (2004-01-12 13:19) [22]> Игорь Шевченко
> BiN
Все, еще раз извиняюсь. Ну простите, пожалуйста! 9 лет ангийский учил (7 в школе и 2 в универе) - и все бестолку :)
Еще раз перед всеми извиняюсь за непроверенную информацию.
← →
Игорь Шевченко © (2004-01-12 13:46) [23]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;
}
...
}
}
Страницы: 1 вся ветка
Форум: "WinAPI";
Текущий архив: 2004.03.28;
Скачать: [xml.tar.bz2];
Память: 0.5 MB
Время: 0.087 c