小编Les*_*ess的帖子

SendMessage(WM_COPYDATA)+ Record + String

我想发送一条记录,现在只有一个字符串,但我会添加更多的变量.这是我第一次使用记录,所以这可能是一个愚蠢的问题.但是,为什么这样做:

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;
Run Code Online (Sandbox Code Playgroud)

接收方:

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;
Run Code Online (Sandbox Code Playgroud)

为什么如果在记录中,我使用:

WindowTitle: String; //removed the fixed size
Run Code Online (Sandbox Code Playgroud)

在发送方面我使用:

Data.WindowTitle:= PChar(HookedMessage.lParam); //removed String()
Run Code Online (Sandbox Code Playgroud)

它根本不去?

我得到访问冲突/ app冻结...

场景是:发送端是一个使用SetWindowsHookEx挂钩的DLL,接收端加载/调用SetWindowsHookEx的简单exe ...

delphi

5
推荐指数
1
解决办法
3046
查看次数

仅挂钩 WH_GETMESSAGE 并过滤 WM_SETTEXT

使用 Microsoft Spy++,当您打开/创建新文档时,我看到 Notepad++ 收到 WM_SETTEXT 消息。我需要在 Windows 上挂钩标题更改,因此我尝试执行 WH_GETMESSAGE 挂钩,并仅过滤 WM_SETTEXT。但到目前为止我还没有成功。这是我的 DLL:

uses
  System.SysUtils,
  Windows,
  Messages,
  System.Classes;

var
  CurrentHook: HHOOK;

{$R *.res}

function GetMessageHookProc(Code: Integer; iWParam: WPARAM; iLParam: LPARAM): LRESULT; stdcall;
begin
  Result:= CallNextHookEx(CurrentHook, Code, iWParam, iLParam);
  if (Code = HC_ACTION) and (PMSG(iLParam).message = wm_settext) then
  begin
    MessageBox(0, 'WM_SETTEXT', 'WM_SETTEXT', MB_OK);

    //this code below is just a prototype to what I will try when this works:
    if IntToStr(PMSG(iLParam).lParam) = 'new - Notepad++' then
      MessageBox(0, 'Notepad++', 'Notepad++', MB_OK);

  end;
end; …
Run Code Online (Sandbox Code Playgroud)

delphi setwindowshookex

4
推荐指数
1
解决办法
1653
查看次数

标签 统计

delphi ×2

setwindowshookex ×1