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

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

Вернуться   Форум программистов > Низкоуровневое программирование > Win Api
Регистрация

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 24.07.2012, 22:29   #1
Ryabinin313
Пользователь
 
Регистрация: 25.09.2010
Сообщений: 24
Вопрос Окно не молучает/не отправляет windows сообщения

Здравствуйте! У меня есть две простейшие программы.
Первая: Простое winapi окно.

Код:
#include <Windows.h>
#include <iostream>
using namespace std;

HINSTANCE hInstance;
HWND hwnd;

LRESULT CALLBACK WindowFunc(HWND, UINT,WPARAM,LPARAM);
LRESULT CALLBACK WndProc(HWND hwnd,UINT msg,WPARAM wParam,LPARAM lParam);

int WINAPI WinMain(HINSTANCE hThisInst, HINSTANCE hPrevInst, LPSTR lpszArgs, int nWinMode)
{
	WNDCLASS wnd;

	memset(&wnd,0,sizeof(WNDCLASS));

	wnd.style = CS_OWNDC|CS_HREDRAW|CS_VREDRAW|CS_DBLCLKS|CS_GLOBALCLASS;
    wnd.lpfnWndProc = (WNDPROC)WndProc;
	wnd.hInstance = hThisInst;
	wnd.hbrBackground = (HBRUSH)(COLOR_BTNFACE+1);
	wnd.lpszClassName = L"WebexWindowClass";
	wnd.lpszMenuName = NULL;
	wnd.hCursor = LoadCursor(NULL,IDC_ARROW);
	wnd.hIcon = NULL;

    BOOL res = RegisterClass(&wnd);
	hInstance = hThisInst;

	hwnd = CreateWindowEx(WS_EX_TOPMOST,L"WebexWindowClass",L"WebexPlugin",WS_CLIPSIBLINGS|WS_CLIPCHILDREN|WS_CAPTION|WS_SYSMENU,225,175,350,250,NULL,NULL,hInstance,NULL);
	ShowWindow(hwnd,SW_SHOW);

	MSG msg;
	while(GetMessage(&msg, NULL,0,0))
	{
		TranslateMessage(&msg);
        DispatchMessage(&msg);
	}

	return 1;
}

LRESULT CALLBACK WndProc(HWND hwnd,UINT msg,WPARAM wParam,LPARAM lParam)
{
	int a = 0;
	switch (msg)
	{
	case WM_COPYDATA:
		a = 1;
		break;
	default:
		return DefWindowProc(hwnd,msg,wParam,lParam);
	}
	
	return 0; 
}
Вторая: находит описанное выше окно и шлет ему сообщение(не важно какое)

Код:
#include <Windows.h>
#include <iostream>
#include <tchar.h>

using namespace std;

void main()
{
	HWND Handle = FindWindow(L"WebexWindowClass", L"WebexPlugin");
	wchar_t* w = new wchar_t[30];
	bool b = IsWindow(Handle);
	GetWindowText(Handle, w, 20);

	int a;
	while(true) 
	{
		cin >> a;
		SendMessage(Handle, WM_COPYDATA, 4, 7);
		cout << "next send";
	}
}
Вот я не могу понять, почему сообщения не приходят? Я неправильно создал окно или неправильно шлю сообщения? Вторая программа находит нужное окно правильно(Хендлы совпадают). Что я не так делаю? Знаний в winapi не много, так что буду благодарен подробным ответам.
Ryabinin313 вне форума Ответить с цитированием
Старый 24.07.2012, 22:34   #2
Пепел Феникса
Старожил
 
Аватар для Пепел Феникса
 
Регистрация: 28.01.2009
Сообщений: 21,000
По умолчанию

а чего это вы с системным сообщением шлете какие попало параметры?
вот и не работает, ибо не срабатывает мапинг сообщения.
Хорошо поставленный вопрос это уже половина ответа. | Каков вопрос, таков ответ.
Программа делает то что написал программист, а не то что он хотел.
Функции/утилиты ждут в параметрах то что им надо, а не то что вы хотите.
Пепел Феникса вне форума Ответить с цитированием
Старый 24.07.2012, 23:13   #3
Ryabinin313
Пользователь
 
Регистрация: 25.09.2010
Сообщений: 24
По умолчанию

Только из-за этого? в остальном критических ошибок нет?
Ryabinin313 вне форума Ответить с цитированием
Старый 25.07.2012, 00:08   #4
Пепел Феникса
Старожил
 
Аватар для Пепел Феникса
 
Регистрация: 28.01.2009
Сообщений: 21,000
По умолчанию

этого достаточно, система в ядре проверяет же параметры.
поидее GetLastError и должен об этом говорить.
Хорошо поставленный вопрос это уже половина ответа. | Каков вопрос, таков ответ.
Программа делает то что написал программист, а не то что он хотел.
Функции/утилиты ждут в параметрах то что им надо, а не то что вы хотите.
Пепел Феникса вне форума Ответить с цитированием
Старый 25.07.2012, 10:10   #5
Ryabinin313
Пользователь
 
Регистрация: 25.09.2010
Сообщений: 24
По умолчанию

GetLastError() в обоих программах, во всевозможных местах возвращает 0.

Может у кого-то есть наброски подобных работающих программ для сравнения?
Ryabinin313 вне форума Ответить с цитированием
Старый 25.07.2012, 16:45   #6
waleri
Старожил
 
Регистрация: 13.07.2012
Сообщений: 6,493
По умолчанию

Вместо WM_COPYDATA попробуйте WM_USER, либо внимательно прочитайте документацию по WM_COPYDATA
waleri вне форума Ответить с цитированием
Старый 25.07.2012, 22:38   #7
Tahoma
DI HALT RET
Форумчанин
 
Аватар для Tahoma
 
Регистрация: 30.12.2010
Сообщений: 117
По умолчанию

Цитата:
Сообщение от waleri Посмотреть сообщение
Вместо WM_COPYDATA попробуйте WM_USER, либо внимательно прочитайте документацию по WM_COPYDATA
Полностью согласен.
WM_USER используйте. Тем более, что передаете интовые параметры (4,7), а WM_COPYDATA использует хэндл и структуру.
Tahoma вне форума Ответить с цитированием
Ответ


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

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Окно сообщения из DLL Oleg Romanchuk Общие вопросы Delphi 4 28.12.2011 15:07
Неактивное окно не реагирует на сообщения хука. askarchic Общие вопросы Delphi 4 07.02.2011 00:33
Не отправляет сообщения Mihanches Работа с сетью в Delphi 0 18.10.2010 17:18
idTCPClient не отправляет сообщения TwiX Работа с сетью в Delphi 2 09.03.2010 23:56
Delphi. Сообщения Windows Alex1991 Помощь студентам 2 23.02.2010 15:45