Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Получать сообщения от чужого окна.? [D5, WinXP]


Страницы:   1 2

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


Страницы:   1 2

Наверх

Титульная страница Поиск, карта сайта Написать письмо