Вниз
Скачать: 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 вся ветка

Скачать: CL | DM;



Память: 0.5 MB
Время: 0.023 c
4-1074451535
DillerXX
2004-01-18 21:45
2004.03.28
Как вставить текст из буфера обмена?


14-1077640095
}|{yk
2004-02-24 19:28
2004.03.28
Чем лучше?


1-1078391709
sergej
2004-03-04 12:15
2004.03.28
Fast report


3-1077175446
Rumba
2004-02-19 10:24
2004.03.28
Как задать внешний файл?


8-1069501491
Pa5ha
2003-11-22 14:44
2004.03.28
QTINTF.DLL - с чем его едят?




   Наверх