procedure TForm1.btn1Click(Sender: TObject);
var
  h:HWND;
  cmd:string;
  cpd : COPYDATASTRUCT;
begin
  h := FindWindow('ACG!',nil);
  cmd := 'snapshot';
  cpd.cbData := Length(cmd)+1;
  cpd.lpData := PChar(cmd);
  SendMessage(h,WM_COPYDATA,$12,Lparam(@cpd));
end;
这段代码我再D7下执行么问题,到XE2下执行能执行过去但是没效果,这个是什么原因。

解决方案 »

  1.   

    把PChar(cmd)替换成PAnsiChar(cmd)试试
      

  2.   

    自己解决了,XE2太讨厌了,D7升级上来代码需要修改那么多地方。
    原代码D7
    procedure TForm1.btn1Click(Sender: TObject);
    var
      h:HWND;
      cmd:string;
      cpd : COPYDATASTRUCT;
    begin
      h := FindWindow('ACG!',nil);
      cmd := 'snapshot';
      cpd.cbData := Length(cmd)+1;
      cpd.lpData := PChar(cmd);
      SendMessage(h,WM_COPYDATA,$12,Lparam(@cpd));
    end;XE2代码procedure SendCs(x: string);
    var
      h: HWND;
      cmd: string;
      cpd: COPYDATASTRUCT;
    begin
      h := FindWindow('ACG!', nil);
      cmd := x;
      cpd.cbData := Length(cmd) + 1;
      cpd.lpData := PAnsiChar(AnsiString('snapshot')) ;
      SendMessage(h, WM_COPYDATA, $12, Lparam(@cpd));
    end;
    cpd.lpData := PAnsiChar(AnsiString('snapshot')) 这行竟然要这样转才可以。