Je veux envoyer un enregistrement, pour l'instant il ne contient qu'une chaîne, mais j'ajouterai plus de variables. C'est la première fois que je travaille avec des disques, alors c'est peut-être une question idiote. Mais, pourquoi cela fonctionne:SendMessage (WM_COPYDATA) + Enregistrement + Chaîne
type
TDataPipe = record
WindowTitle: String[255];
end;
var
Data: TDataPipe;
copyDataStruct : TCopyDataStruct;
begin
Data.WindowTitle:= String(PChar(HookedMessage.lParam));
copyDataStruct.dwData := 0;
copyDataStruct.cbData := SizeOf(Data);
copyDataStruct.lpData := @Data;
SendMessage(FindWindow('TForm1', nil), WM_COPYDATA, Integer(hInstance), Integer(@copyDataStruct));
end;
côté réception:
type
TDataPipe = record
WindowTitle: String[255];
end;
procedure TForm1.WMCopyData(var Msg: TWMCopyData);
var
sampleRecord : TDataPipe;
begin
sampleRecord.WindowTitle:= TDataPipe(Msg.CopyDataStruct.lpData^).WindowTitle;
Memo1.Lines.Add(sampleRecord.WindowTitle);
end;
Pourquoi si au dossier, j'utilise:
WindowTitle: String; //removed the fixed size
et sur le côté d'envoyer je l'utilise:
Data.WindowTitle:= PChar(HookedMessage.lParam); //removed String()
il ne va tout simplement pas?
Je reçois des violations d'accès/gel app ...
Le scénario est le suivant: côté émetteur est une DLL accroché à l'aide SetWindowsHookEx, côté réception d'un simple exe qui a chargé/appelé SetWindowsHookEx ...
Bonne réponse! Merci encore, toujours avec des réponses complètes et informatives. – LessStress