Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "WinAPI";
Текущий архив: 2005.01.30;
Скачать: [xml.tar.bz2];

Вниз

Отправка сообщения программе от ловушки сообщений   Найти похожие ветки 

 
Fedia ©   (2004-12-09 05:16) [0]

Доброго времени суток.
У меня на повестке дня вот какая задача.
Пишу программу Joke, задачей которой будет:
- отключение, включение панели задач;
- изменение цветовой палитры Windows;
- изменения разрешения экрана;
- открытие (закрытие) CD;
- ограничение области перемещения мышки и т.д.
- и другие мелкие радости;

Она будет резидентно сидеть в памяти и через определенные интервалы времени производить вышеперечисленные действия. Испытывать ее буду для начала на себе, а потом на коллегах, и дабы мне за нее голову не оторвали, хочу сделать ее наиболее безобидной. С этой целью хочу предусмотреть:
- запоминание всех настроек пользователя при запуске программы;
- восстановление настроек при нажатии определенных комбинаций клавиш.

У меня уже написана ловушка системных сообщений, в виде dll, которая отлавливает нажатие данной комбинации клавиш и отправляет сообщение программе Joke, единственное что не получается сделать, так это принять данное сообщение и обработать его.
Осуществляю отправку сообщения следующимобразом:
// поиск окна программы
OurWindow:=FindWindow(nil, "svchost32");
//отправка сообщения
SendMessage(OurWindow, 27, 27, 27);

Принимать пытаюсь следующим образом:

procedure TFormMain.WndProc(var Message: TMessage);
begin
 if (Message.msg=27) and (Message.LParam=27) and (Message.WParam=27) then
 ShowMessage("1"); //здесь будет происходить восстановление настроек системы
 //и прекращение безобразия

 inherited;
end;

Основная беда в том, что программа принимает сообщение только в случае, если ее окно активно, что не есть хорошо, ведь программу не должно быть видно.
Вопрос: каким образом необходимо отправлять и принимать сообщения, чтобы программа принимала их в независимости от видимости и активности своего окна.
P.S. просто у человека сегодня выходной :)


 
Leonid Troyanovsky   (2004-12-09 08:58) [1]

> Fedia ©   (09.12.04 05:16)  

> Пишу программу Joke, задачей которой будет:
> - отключение, включение панели задач;
> - изменение цветовой палитры Windows;
> - изменения разрешения экрана;
> - открытие (закрытие) CD;
> - ограничение области перемещения мышки и т.д.
> - и другие мелкие радости;

Мдя. Радостей полные .. наборы :(

> Она будет резидентно сидеть в памяти и через определенные
> интервалы времени производить вышеперечисленные действия.
> Испытывать ее буду для начала на себе, а потом на коллегах,
> и дабы мне за нее голову не оторвали, хочу сделать ее наиболее
> безобидной. С этой целью хочу предусмотреть:
> - запоминание всех настроек пользователя при запуске программы;
> - восстановление настроек при нажатии определенных комбинаций
> клавиш.

 Не, лучше сразу предусмотреть каппу, такую как у боксеров.

> SendMessage(OurWindow, 27, 27, 27);

А какого хрена 27? Выбирай уж из WM_USER+, или
RegisterWindowMessage.

> Основная беда в том, что программа принимает сообщение только
> в случае, если ее окно активно, что не есть хорошо, ведь

Не верю. Скорее всего, ты ShowMessage не видишь.

> Вопрос: каким образом необходимо отправлять и принимать
> сообщения, чтобы программа принимала их в независимости
> от видимости и активности своего окна.

Оно и так принимает.
См., например, по результату SendMessage.

--
С уважением, LVT.


 
Fedia ©   (2004-12-11 08:41) [2]

>Мдя. Радостей полные .. наборы :(
Все будет неплохо, если действовать по принципу: не навреди. Если же при этом человеку удастся поднять настроение, то совсем неплохо.

>Не, лучше сразу предусмотреть каппу, такую как у боксеров.
так часто бьют :)

>А какого хрена 27? Выбирай уж из WM_USER+, или
>RegisterWindowMessage.
Действительно, заменил 27 на WM_USER и стало лучше, теперь программа принимает сообщение, если бездействует, в не зависимости от положения и видимости окна.

>Не верю. Скорее всего, ты ShowMessage не видишь.
Это по принципу ты суслика видишь? И я не вижу, а он есть. Так что ли?

>Оно и так принимает.
Может быть и принимает, но в обработчик
procedure TFormMain.WndProc(var Message: TMessage);
сообщение не попадает.

Проблему то я решил, не нравится что только криво. Теперь я отправляю сообщение в цикле (около 20 раз), через 15 м.с. В этом случае, чаше всего, сообщение до принимающего обработчика доходит.


 
Leonid Troyanovsky ©   (2004-12-11 11:51) [3]

> Fedia ©   (11.12.04 08:41) [2]
> >Мдя. Радостей полные .. наборы :(

> Все будет неплохо, если действовать по принципу: не навреди.
> Если же при этом человеку удастся поднять настроение, то
> совсем неплохо.

Почему не выбрать для веселения менее раздражительные действия?

> >Не, лучше сразу предусмотреть каппу, такую как у боксеров.
> так часто бьют :)

Думаю, что люди со стажем хоть раз были свидетелями подобных
расправ. Вовсе не обязательно быть их участником.

> >Не верю. Скорее всего, ты ShowMessage не видишь.
> Это по принципу ты суслика видишь? И я не вижу, а он есть.

Есть, есть. Я вчера его здесь видел.

> >Оно и так принимает.
> Может быть и принимает, но в обработчик
> procedure TFormMain.WndProc(var Message: TMessage);
> сообщение не попадает.

Дело в том, что выбрал ты сообщение на редкость удачно,
это  WM_DEVICECHANGE.
Работать оно должно после RegisterDeviceNotification.
Как сам понимаешь рассылает его сама система. Причем
A window receives this message through its WindowProc function.

Т.е., если приложение скрыто, то, видимо, при ручной
посылке оно просто-таки не отсылается.

Так, что "не верю" забираю назад. Извини.
 
> В этом случае, чаше всего, сообщение до принимающего обработчика  доходит.

А зачем 20 раз? Ты отправляешь PostMessage?

--
С уважением, LVT.


 
Piter ©   (2004-12-11 11:56) [4]

Leonid Troyanovsky   (09.12.04 8:58) [1]
Не, лучше сразу предусмотреть каппу, такую как у боксеров


:)

P.S. Очередной троянописатель...


 
Игорь Шевченко ©   (2004-12-11 12:22) [5]

Fedia ©   (09.12.04 05:16)  

На сайте www.xakep.ru есть такой раздел "Западлостроение". Вам туда.



Страницы: 1 вся ветка

Форум: "WinAPI";
Текущий архив: 2005.01.30;
Скачать: [xml.tar.bz2];

Наверх




Память: 0.47 MB
Время: 0.036 c
1-1106212666
Nad89
2005-01-20 12:17
2005.01.30
SubItem в TreeView


3-1104132075
Russko
2004-12-27 10:21
2005.01.30
Кол-во записей в БАЗЕ INTERBASE


1-1105983045
Dimon 33321
2005-01-17 20:30
2005.01.30
Послать сообщение Paint форме


3-1102105323
korvin
2004-12-03 23:22
2005.01.30
Проблема с передачей параметров в хранимую процедуру


1-1105623063
vvv_spb
2005-01-13 16:31
2005.01.30
Tab в DBEdit





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
Английский Французский Немецкий Итальянский Португальский Русский Испанский