Форум: "WinAPI";
Текущий архив: 2007.09.02;
Скачать: [xml.tar.bz2];
ВнизОбмен данными между процессами ( WM_COPYDATA) Найти похожие ветки
← →
BOGa (2007-03-10 14:38) [0]Необходимо переслать копию сообщения из функции-фильтра своему приложению.
{Функция-фильтр для ловушки WH_GETMESSAGE}
function HookProc (Code:Integer; wParam:word; lParam:longint): longint ; stdcall;
var
mes:TMsg;
CDS: TCopyDataStruct;
WRH:HWND;
begin
if Code=HC_ACTION then
begin
mes:=TMsg(pointer(lParam)^);
cds.cbData:=sizeof(TMsg);
GetMem(CDS.lpData,cds.cbData);
cds.lpData:=@mes;
WRH:=findwindow(nil,"WinRecorder");
sendmessage(WRH, WM_COPYDATA, 0, integer(@CDS));
cds.lpData:=nil;
FreeMem(cds.lpData,cds.cbData);
end;
Result := CallNextHookEx(HH, Code, wParam, lParam);
end;
{Обработчик WM_COPYDATA}
procedure TForm1.CopyData_Mes (var a:TWMCopyData);
var
mes:TMyMsg;
begin
mes.Mess:=TMsg(a.CopyDataStruct.lpData^);
write(f,mes);
// a.CopyDataStruct.lpData:=nil;
a.Result := 1;
end;
При выходе их обработчика WM_COPYDATA выдается ошибка "Invalid pointer operation". Если в обработчик вставить a.CopyDataStruct.lpData:=nil, все работает нормально, но это, как я понимаю, не корректно (или нет?).И если это сделать, то FreeMem в функции-фильтре выдает ошибку.
FreeMem(a.CopyDataStruct.lpData, a.CopyDataStruct.cdData) в обработчике, также выдаст ошибку.
Если можно, объясните механизм работы WM_COPYDATA, или дайте ссылку на эту информацию.
Заранее спасибо.
← →
Eraser © (2007-03-10 19:38) [1]> Если можно, объясните механизм работы WM_COPYDATA
в MSDN всё объеснено и даже пример есть
http://msdn2.microsoft.com/en-us/library/ms649009.aspx
вот на Делфи
http://www.swissdelphicenter.ch/torry/showcode.php?id=810
← →
Eraser © (2007-03-10 19:39) [2]> объеснено
объяснено )
Страницы: 1 вся ветка
Форум: "WinAPI";
Текущий архив: 2007.09.02;
Скачать: [xml.tar.bz2];
Память: 0.44 MB
Время: 0.046 c