Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "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
14-1077373597
Igor_thief
2004-02-21 17:26
2004.03.28
lb_SetTabStops


14-1077778345
Иван Николаевич Понырев
2004-02-26 09:52
2004.03.28
Как бесплатно, через инет, отправить факс?


6-1073855568
Sir Alex
2004-01-12 00:12
2004.03.28
Утечка памяти и ресурсов (HTMLViewer) в W98


7-1071440391
Olegator_o
2003-12-15 01:19
2004.03.28
Как узнать о положении лотка СD-ROM


3-1077206046
Brenagwynn
2004-02-19 18:54
2004.03.28
БД приложение без БДЕ





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский