WinApi. Окно не молучает/не отправляет 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)
{
//HMODULE dll = LoadLibrary(L"window.dll");
//int i = 0;
//while(++i<1000000)
//{
// i++;
// --i;
//}
//cin >> i;
//ShowWnd = (MY_FUNC)GetProcAddress(/*GetModuleHandleA("window.dll")*/dll, "ShowWnd");
//ShowWnd();
//return;
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 <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)
{
//HMODULE dll = LoadLibrary(L"window.dll");
//int i = 0;
//while(++i<1000000)
//{
// i++;
// --i;
//}
//cin >> i;
//ShowWnd = (MY_FUNC)GetProcAddress(/*GetModuleHandleA("window.dll")*/dll, "ShowWnd");
//ShowWnd();
//return;
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";
}
}
#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";
}
}
PostMessage пробовал?
Попробую.
МСДН. Там четко описано, что обязательно должно быть окно-отправитель данных и указатель на структуру с данными. Вот как Ваша программа будет работать правильно:
У клиента в lParam - указатель на COPYDATASTRUCT от посылающей программы.
И правильно не работает. Почитайте внимательно описание сообщения WM_COPYDATA на сайте
Код:
using namespace std;
HWND Handle = FindWindow(L"WebexWindowClass", L"WebexPlugin");
wchar_t* w = new wchar_t[30];
bool b = IsWindow(Handle);
GetWindowText(Handle, w, 20);
//Создаем фиктивное окно, которое буде считаться отсыльщиком сообщения (оно невидимо)
HWND hStatic=CreateWindow(L"STATIC",NULL,0,0,0,5,5,GetDesktopWindow(),NULL,GetModuleHandle(NULL),NULL);
//Структура для посылки сообщения
COPYDATASTRUCT cds={0};
int a;
while(true)
{
cin >> a;
//Заполняем структуру
cds.dwData=a; //Отсылаем тока то, что ввел пользователь
cds.cbData=0;
cds.lpData=NULL;
SendMessage(Handle, WM_COPYDATA, (WPARAM)hStatic, (LPARAM)&cds);
cout << "next send";
}
HWND Handle = FindWindow(L"WebexWindowClass", L"WebexPlugin");
wchar_t* w = new wchar_t[30];
bool b = IsWindow(Handle);
GetWindowText(Handle, w, 20);
//Создаем фиктивное окно, которое буде считаться отсыльщиком сообщения (оно невидимо)
HWND hStatic=CreateWindow(L"STATIC",NULL,0,0,0,5,5,GetDesktopWindow(),NULL,GetModuleHandle(NULL),NULL);
//Структура для посылки сообщения
COPYDATASTRUCT cds={0};
int a;
while(true)
{
cin >> a;
//Заполняем структуру
cds.dwData=a; //Отсылаем тока то, что ввел пользователь
cds.cbData=0;
cds.lpData=NULL;
SendMessage(Handle, WM_COPYDATA, (WPARAM)hStatic, (LPARAM)&cds);
cout << "next send";
}