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

Вниз

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

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

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

Наверх




Память: 0.49 MB
Время: 0.038 c
1-1105898520
Dmitry_04
2005-01-16 21:02
2005.01.30
Как мне определить какой стиль шрифта в Label-е?


14-1105437303
ghg
2005-01-11 12:55
2005.01.30
насколько критичны ошибки в D2005?


1-1106032507
Newby
2005-01-18 10:15
2005.01.30
Разбиение текста


11-1088607618
Michael
2004-06-30 19:00
2005.01.30
TStrList в KOL


1-1106212666
Nad89
2005-01-20 12:17
2005.01.30
SubItem в TreeView