D7下可以的代码XE2下无效

myyebin 2012-08-02 10:28:14
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下执行能执行过去但是没效果,这个是什么原因。
...全文
129 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
myyebin 2012-08-02
  • 打赏
  • 举报
回复
谢谢楼上的,这个我试过也是没效果,XE2真是麻烦。
xxfly 2012-08-02
  • 打赏
  • 举报
回复
把PChar(cmd)替换成PAnsiChar(cmd)试试
myyebin 2012-08-02
  • 打赏
  • 举报
回复
自己解决了,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')) 这行竟然要这样转才可以。。。。
myyebin 2012-08-02
  • 打赏
  • 举报
回复
有大牛帮看看不。

1,183

社区成员

发帖
与我相关
我的任务
社区描述
Delphi Windows SDK/API
社区管理员
  • Windows SDK/API社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧