SendMessage WM_SETTEXT 修改Pdf另存为对话框中的文件名乱码

蓝帆·雨轩 2019-04-18 02:11:23
我使用SendMessage修改Pdf另存为对话框中的文件名,已经抓到EDIT的句柄,但是写入时是乱码,用WM_COPYDATA没响应,用WM_SETTEXT可以发送,但是文件名那里是乱码。可能是因为系统默认Unicode,但是另存为对话框的文件名那里需要的是ANSI。

SendMessage(_hwnd,WM_SETTEXT,IntPtr.Zero,"要发送的文件名");

"要发送的文件名"那里怎样正确发送到PDF另存为对话框。谢谢。
...全文
256 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
蓝帆·雨轩 2019-04-19
  • 打赏
  • 举报
回复
=========================================== int size = SendMessage(_ControlHwnd, WM_GETTEXTLENGTH, 0, 0); if (size > 0) { StringBuilder title = new StringBuilder(size + 1); SendMessage(_ControlHwnd, (int)WM_GETTEXT, title.Capacity, title); } size能正确取到,但是接下来SendMessage(_ControlHwnd, (int)WM_GETTEXT, title.Capacity, title);就报错:尝试读取或写入受保护的内存。这通常指示其他内存已损坏。
蓝帆·雨轩 2019-04-18
  • 打赏
  • 举报
回复
引用 2 楼 stherix的回复:
或者用Marshal.StringToHGlobalAnsi("要发送的文件名")
这个我测试了,还是乱码。
蓝帆·雨轩 2019-04-18
  • 打赏
  • 举报
回复
引用 1 楼 stherix的回复:
可以尝试用Encoding.Default.GetBytes把字符串转成byte数组 把这个的地址传过去 用操作系统默认的编码应该就不会乱码了
这个我用过了,不行。
stherix 2019-04-18
  • 打赏
  • 举报
回复
或者用Marshal.StringToHGlobalAnsi("要发送的文件名")
stherix 2019-04-18
  • 打赏
  • 举报
回复
可以尝试用Encoding.Default.GetBytes把字符串转成byte数组 把这个的地址传过去 用操作系统默认的编码应该就不会乱码了

111,120

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • AIGC Browser
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

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