lyrong 发表于 2022-3-5 14:35

各位虎年好,请教一个问题,DOS命令行程序如何修改编码使得支持中文

最近写的一款程序,需要调用dos命令行EXE,但是这个DOS控制台程序有个大毛病,就是命令行字符串只支持英文和数字,不支持中文,我尝试安装虚拟机winxp、win2000、win7 x64,结果发现,输入中文字符串参数,显示出来的都是乱码。

我尝试过写API HOOK,因为发现这个命令大概是调用了RegQueryValueExW这个API,HOOK后程序出错,不管是黑月或者静态编译后的DLL,都是无法在HOOK后正确显示中文的,会出错,提示:Error converting policy: 0x5。

这里,真的没有办法了,这款小程序可以说是绝版了,但是有这点瑕疵很是郁闷,所以请教论坛的大哥们帮帮忙,给魔改下,谢谢大家!



软件地址:

https://lyrong5000.lanzouv.com/i2nBB010wfuj


{:301_993:}   麻烦大家了!

zyg1000 发表于 2022-3-5 17:11

批处理脚本改成ANSI编码就OK了。,
那里面是UTF8编码

bester 发表于 2022-3-5 17:40

注册表目录:HKEY_LOCAL_MACHINE\SOFTWARE\Policies\Microsoft\Windows\IPSec\Policy\Local\
找到ipsecPolicy开头的项,ipsecName这个名称对应的就是中文名
完全可以另外写个程序,或者挂载一个dll都行,把里面的名称改成你想要的

做apihook的话 大概率要hookpolstore.dll中的RegSetValueExW和RegCreateKeyExW 不是很推荐这么玩

as614001 发表于 2022-3-5 15:23

不如重新写一个?

lyrong 发表于 2022-3-5 19:21

小弟在此先谢过大家。

lyrong 发表于 2022-3-5 19:31

【恒】 发表于 2022-3-5 16:13
chcp 936

谢谢恒哥,我在启动cmd后先输入chcp 936然后输入
ipseccmd -w REG -p "我" -r "Block TCP/80" -f */*=*/*:80:TCP -n BLOCK -x
不知道您这边测试通过了吗

lyrong 发表于 2022-3-5 19:45

zyg1000 发表于 2022-3-5 17:11
批处理脚本改成ANSI编码就OK了。,
那里面是UTF8编码

哥,我尝试在notepad中转换为ansi格式,然后保存为.cmd文件
但是再次查看这个文件内容
发现又变成了utf8格式(win10 x64 1909 )
而且还是显示乱码
你能分析下原因吗
win10不支持保存为ansi文本吗

zxbadboy 发表于 2022-3-5 19:50

lyrong 发表于 2022-3-5 19:45
哥,我尝试在notepad中转换为ansi格式,然后保存为.cmd文件
但是再次查看这个文件内容
发现又变成了u ...

用UE试试,后准改成bat。。。我这边也是win10,没有问题的。

lyrong 发表于 2022-3-5 19:51

bester 发表于 2022-3-5 17:40
注册表目录:HKEY_LOCAL_MACHINE\SOFTWARE\Policies\Microsoft\Windows\IPSec\Policy\Local\
找到ipsecPol ...

谢谢哥
HKEY_LOCAL_MACHINE\SOFTWARE\Policies\Microsoft\Windows\IPSec\Policy\Local\ipsecPolicy{72385230-70fa-11d1-864c-14a300000000}

这个{72385230-70fa-11d1-864c-14a300000000}不是固定的

怎么编程实现将最近新创建的ipsecPolicy的ipsecname从乱码更改为中文呢?

HKEY_LOCAL_MACHINE\SOFTWARE\Policies\Microsoft\Windows\IPSec\Policy\Local\ipsecPolicy{d35dcbb5-9dbb-43be-b93e-4b370bc822b9}

这个是另外一个

我目前所想到的是

ipseccmd -w REG -p "我" -r "Block TCP/80" -f */*=*/*:80:TCP -n BLOCK -x

执行后会创建一个乱码的规则

然后怎么在注册表中定位到这个乱码注册表项呢?

表达的词不达意,希望大哥帮忙解答下!

lyrong 发表于 2022-3-5 20:10

zxbadboy 发表于 2022-3-5 19:50
用UE试试,后准改成bat。。。我这边也是win10,没有问题的。

好奇怪 我这个是win10 1909 x64 企业版
用UE保存为“cmd控制台.bat”后缀的
然后执行命令行 策略名还是乱码
页: [1] 2
查看完整版本: 各位虎年好,请教一个问题,DOS命令行程序如何修改编码使得支持中文