Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2004.03.28;
Скачать: CL | DM;

Вниз

Получать сообщения от чужого окна.?   Найти похожие ветки 

 
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 вся ветка

Текущий архив: 2004.03.28;
Скачать: CL | DM;

Наверх




Память: 0.51 MB
Время: 0.031 c
3-1077411787
HMT
2004-02-22 04:03
2004.03.28
Переход с IBTable на IBQuery...Два глупых вопроса.


11-1056886901
Ajax
2003-06-29 15:41
2004.03.28
8-ми битные BMP в KOL


1-1078382310
girich
2004-03-04 09:38
2004.03.28
Вопрос по TServiceApplication (события OnCreate и OnStart).


14-1078228066
TALLA
2004-03-02 14:47
2004.03.28
Почему из Execute при вызове DdeClientConv1.SetLink( a , b )


14-1074852823
NoOne
2004-01-23 13:13
2004.03.28
В чём здесь логика?