导航:
论坛 -> DELPHI技术
斑竹:liumazi,sephil
作者:
dalas (dalas)
★☆☆☆☆
-
普通会员
2021/9/24 20:10:20
标题:
用 WM_COPYDATA 消息发字符串
浏览:1330
加入我的收藏
楼主:
用 SendMessageTimeout 发 WM_COPYDATA 消息发字符串,会被截断部份, 用 SendMessage 就不会被截断。是什么原因? 用 WTSSendMessage 给别的用户发字符串,也会被截断。
----------------------------------------------
-
作者:
2021/9/24 20:49:09
1楼:
大概率是你没有用对,这些都是非常成熟的东西了. https://docs.microsoft.com/en-us/windows/win32/dataxchg/using-data-copy
----------------------------------------------
UniKeeper V10.40 -- 您最贴心的个人数据管理助手
作者:
dalas (dalas)
★☆☆☆☆
-
普通会员
2021/9/24 21:34:56
2楼:
这是测 试代码,试试?
----------------------------------------------
-
作者:
dalas (dalas)
★☆☆☆☆
-
普通会员
2021/9/24 21:38:49
3楼:
字符串被截断一半
此帖子包含附件: 大小: 4.2K
----------------------------------------------
-
作者:
2021/9/24 23:14:45
4楼:
SendMessage 可以无视长度=cbData SendMessageTimeout 长度必须对=cbData 简单点得测· 试就是 Button2Click 改 CopyData.cbData := 10{Length(pText)}; //至于为何得出是5不是10 我也纳闷 不知蓝色圈中得5是不是。。。得出得5呢。。 但是byte占位10啊? 调试了下代码运行得复制的这行没运行下面的汇编?? function _PWCharLen(P: PWideChar): Integer; begin Result := 0; if P <> nil then while P[Result] <> #0 do Inc(Result);//inc +1的意思??不是加2吗?。。 end; 然后看下上面的代码 function _PCharLen(P: _PAnsiChr): Integer; begin Result := 0; if P <> nil then while P[Result] <> #0 do Inc(Result);//??也是inc +1 ???????? end;
此帖子包含附件: 大小: 2,248B
----------------------------------------------
[alias] co = clone --recurse-submodules up = submodule update --init --recursiveupd = pullinfo = statusrest = reset --hard懒鬼提速https://www.cctry.com/ >http://qalculate.github.io/downloads.htmlhttps://www.cctry.com/
作者:
2021/9/24 23:30:27
5楼:
cbData Type: DWORD The size, in bytes, of the data pointed to by the lpData member. cbData 是以byte为单位的, Length(str)返回的是字符数, 用 SysUtils.ByteLength(str)来返回字节为单位的长度 CopyData.cbData :=SysUtils.ByteLength(pText)+2;
----------------------------------------------
UniKeeper V10.40 -- 您最贴心的个人数据管理助手
作者:
2021/9/24 23:38:34
5楼:
CopyData.cbData :=Length(pText)*sizeof(widechar); CopyData.lpData :=PChar(pText); 这样就好了。 既然复制了长度数据 不#0 也没关系吧?。。 不会出现垃圾数据 接上 1后面吧?表示怀疑。
----------------------------------------------
[alias] co = clone --recurse-submodules up = submodule update --init --recursiveupd = pullinfo = statusrest = reset --hard懒鬼提速https://www.cctry.com/ >http://qalculate.github.io/downloads.htmlhttps://www.cctry.com/
作者:
dalas (dalas)
★☆☆☆☆
-
普通会员
2021/9/25 9:51:19
7楼:
试了下两位的办法: ByteLength(str)来返回字节为单位的长度 CopyData.cbData :=Length(pText)*sizeof(widechar); 都可以,中英文混和也正常,太赞了!!
----------------------------------------------
-
作者:
2021/9/25 10:34:33
8楼:
根据hardnut 的说法 建议加 #0 也就是用 CopyData.cbData :=SysUtils.ByteLength(pText)+2;(此处+2=#0) 不加有可能会拿到edit1后面还有辣鸡数据的风险
----------------------------------------------
[alias] co = clone --recurse-submodules up = submodule update --init --recursiveupd = pullinfo = statusrest = reset --hard懒鬼提速https://www.cctry.com/ >http://qalculate.github.io/downloads.htmlhttps://www.cctry.com/