Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > C/C++ программирование > Общие вопросы C/C++
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 12.02.2011, 20:45   #1
Zemelya
 
Регистрация: 12.02.2011
Сообщений: 3
По умолчанию Обработка сообщений приложением

Добрый день, господа программисты!
У меня диллема. Поиск удовлетворительных результатов не принес, в силу специфики, на мой взгляд, вопроса.
Начинаю осваивать MS Visual C++, до этого лет 6 писал исключительно на Delphi.
Мне нужно написать приложение, которое не нуждается в форме, но должно получать сообщения из вне.
То есть программа висит (не в смысле зависла ), просматривает приходящие сообщения и делает те или иные действия.
нужно что-то вроде этого:
Код:
	while (GetMessage(&msg, NULL, NULL, NULL))
	{
		TranslateMessage(&msg);
		DispatchMessage(&msg);
	}
только не создавая класс окна и его самого, оно ненужно.
Мне нужно (если это вообще возможно по спецификации) подменить оконную процеду с помощью функции
SetWindowLong(HWND, GWL_WNDPROC, адрес_новой_проц)
вот только, как я понимаю HWND приложения (процесса) мне не получить (он же не окно )? Или если можно то как?
Код:
#include "windows.h"

LRESULT WINAPI WndProc(HWND hwnd, UINT msg, LPARAM lParam, WPARAM wParam)
{
	switch (msg)
	{
		case WM_не_важно:
		{
			same_code;
			break;	
		}
	}
	return 0;
}

int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE, LPSTR, int)
{
	MSG msg;
	SetWindowLong((HWND)hInstance, GWL_WNDPROC, (LONG)WndProc);
	while (GetMessage(&msg, NULL, NULL, NULL))
	{
		TranslateMessage(&msg);
		DispatchMessage(&msg);
	}
	return 0;
}
как видно на моем примере, я пытался преобразовать hInstanse приложения в HWND, что подозреваю не совсем правильно, поскольку реакции приложения не последовало, я имею ввиду в WndProc не заходит.
Во-первых потому что застревает на GetMessage ожидая сообщений, которых почему-то нету, во-вторых если заменить ожидающий GetMessage на просматривающий PeekMessage то приложение зацикливается, выгребая все ресурсы камня на себя.

В делфи подобная конструкция работает, только там вместо hInstanse я передавал Application.Handle

На сколько я вообще знаю, то сообщения ведь получает сам процесс, а потом в зависимости от хэндла окна, в которое оно посылалось, процесс пересылает его одному из своих окон, ну если точнее то окно, для которого пришло сообщение само выбирает его из очереди сообщений, если согласно хэндлу оно принадлежит ему. Так ли это на самом деле?

Так вот, подытожу. Ответьте мне пожалуйста на вопрос, может ли приложение получать "оконные сообщения" не имея окон вообще (чет даж звучит странно), и если все таки такое чудо возможно, ткните носом как правильно подменить процедуру. Еще раз повторюсь, что окно создавать мне ненужно, как с окном это все провернуть на С++ я уже знаю
Zemelya вне форума Ответить с цитированием
Старый 12.02.2011, 21:49   #2
Пепел Феникса
Старожил
 
Аватар для Пепел Феникса
 
Регистрация: 28.01.2009
Сообщений: 21,000
По умолчанию

у приложения нет окон, и кто должен получать сообщения по вашему?
используйте GetMessage и после него можете в принципе разбирать структуру MSG.
это в своем.

а в чужом приложении, вам придется ДЛЛ писать вродь(не помню если честно про обработчики окон) и инжектить её(иль хуки)
Хорошо поставленный вопрос это уже половина ответа. | Каков вопрос, таков ответ.
Программа делает то что написал программист, а не то что он хотел.
Функции/утилиты ждут в параметрах то что им надо, а не то что вы хотите.
Пепел Феникса вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
VBA outlook обработка входящих сообщений Drek Помощь студентам 2 18.07.2010 04:19
обработка сообщений из файла fiascko Общие вопросы Delphi 18 30.03.2010 09:44
Обработка сообщений в приложении без окон. kalexi Win Api 2 26.06.2009 20:12
Обработка сообщений в консольных приложениях Mixasik Общие вопросы Delphi 2 06.06.2009 22:50
Обработка сообщений иконки трея The_Darkness Win Api 18 15.07.2008 16:07