WM_COPYDATA
От: Milman  
Дата: 11.04.02 04:47
Оценка:
Задача послать сообщение с данными

//Посылка сообщения

LRESULT CALLBACK KeyboardProc(int code,WPARAM wParam,LPARAM lParam)
{
DWORD IsDown;
// обрабатываем только когда клавиша нажата (типа WM_KEYDOWN)
IsDown = !(lParam >> 31);
if (IsDown && code == HC_ACTION)
{
char *pNameApp=GetCommandLine();
COPYDATASTRUCT *_COPYDATASTRUCT = new COPYDATASTRUCT;
_COPYDATASTRUCT->dwData=0;
_COPYDATASTRUCT->cbData=0;
_COPYDATASTRUCT->lpData=GetCommandLine(),
Wnd = FindWindow (CN_SERV, WN_SERV);
SendMessage (Wnd,WM_COPYDATA,0,(LPARAM)(PCOPYDATASTRUCT)_COPYDATASTRUCT);
delete _COPYDATASTRUCT;
}

//Прием сообщения

LRESULT CALLBACK MainWndProc(HWND hwnd,UINT msg,WPARAM wParam,LPARAM lParam)
{
switch (msg)
{
case WM_COPYDATA:
COPYDATASTRUCT *_COPYDATASTRUCT;
_COPYDATASTRUCT=(PCOPYDATASTRUCT)lParam;
char NameApp[80];
strcpy(NameApp,(char*)(_COPYDATASTRUCT->lpData));

//
MessageBox (NULL,NameApp, GetCommandLine(), 0);


NameApp пустой !!!

Подскажите, плз, где прямить руки
Re: WM_COPYDATA
От: Alex Fedotov США  
Дата: 11.04.02 04:52
Оценка:
Здравствуйте Milman, Вы писали:

M>Задача послать сообщение с данными


M>NameApp пустой !!!


M>Подскажите, плз, где прямить руки


Вот здесь:

_COPYDATASTRUCT->cbData=0;


При отправке сообщения в это поле надо занести размер данных в байтах. В твоем случае это будет

_COPYDATASTRUCT->cbData = (lstrlen(GetCommandLine()) + 1) * sizeof(TCHAR);
-- Alex Fedotov
Re[2]: WM_COPYDATA
От: Milman  
Дата: 11.04.02 08:02
Оценка:
AF>Вот здесь:

AF>
_COPYDATASTRUCT->>cbData=0; 
AF>


AF>При отправке сообщения в это поле надо занести размер данных в байтах. В твоем случае это будет


AF>
_COPYDATASTRUCT->>cbData = (lstrlen(GetCommandLine()) + 1) * sizeof(TCHAR);
AF>


Спасибо буду проверять. Неужели всего ода ошибка. Наверное ище есть.
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.