bat如何调用外部程序_【每日一答】(92)你的软件运行期间,竟可以随意改它的文件名?如何实现?...

这篇博客探讨了如何在程序运行期间检测并改变其文件名,以防止他人重命名。通过使用pApp->Command()和pApp->Path()获取程序运行时的名称和路径,利用mdlFileSys模块的FMRenameFile函数或批处理文件配合SEShellRun实现文件重命名。博主提醒,直接修改运行中的exe可能在某些系统中不可行,建议考虑其他用户交互方式或标识。
摘要由CSDN通过智能技术生成

bae84feff6c8e737f1172990ae52ffdf.gif

问:

老师,最近有个想法,如何改变自己的程序名呢(就是防止别人用自己的程序后,对自己的程序重命名,如果改了,每次打开的时候检测一下,如果不对我得重新改回去。

,写来玩的)

答:挺好的想法
用 pApp->Command()

就可以获得你的程序运行时的程序名啦,pApp->Path()获得运行路径 
第4讲我们讲过

34aa5a1d0dcc69c8eefe69f4aef7a4fa.png

发现不对,用 mdlFileSys 通用模块的 FMRenameFile 函数即可重命名文件。
但是你不能重命名自己的exe,因为正在使用。你可以运行另外一个exe重命名
或者拷贝一份自己的exe,为新文件名,然后再删除旧文件名的文件
或者这样:
if (文件名不正确)
{
    拷贝一份自身,为新文件,文件名正确;
    用 SEShellRun 运行它;
    生成批处理文件,固定文件名,比如 yuyu.bat;
    批处理文件中写删除自己exe的命令行字符串
    自己退出;
}
else
{
    if (yuyu.bat文件存在)
   {
       SEShellRun 运行 yuyu.bat;
      删除 yuyu.bat
   }
   正常运行你的程序;
}

实际这样必要性不强。你还不如直接弹窗,或者你的窗口界面的某一部分写上自己的标志、自己的姓名,让用户看到
文件名,用户一般不太注意的

问:其实我查了一个不知道对不对的API是rename小写的,只要输入原来程序的运行路径和然后输入新的内容,就是包括完整路径,但是最后的程序名改为你想要的,但是我用tstring的名义写进去总说无法转化为const wechar *类型,不知道这个对不对

还是我的用法不对,重命名自己的exe我试着打开我的程序,然后手动可以重命名,用代码不可以吗

答:win7以上系统,将文件名设计为文件的属性之一,而非以文件名为ID,win7以上系统在单用户情况下,可以修改文件名。但之前系统不可以,我们之前都是上面跟你说的这样做的。
当然现在用win7以下系统的人很少(虽然不为零),你的程序要不考虑win7以下系统的支持,可以那样直接改名。
rename不是API函数,而是系统库函数,包含以下头文件,而且不要用rename,而要用_trename,见MSDN:

ecc95202545b38fc485a423ee686c4ab.png

4147c709ca9dae3b0f14c1decfb9b5c7.png

函数的参数类型是字符串指针,你传一个tstring对象行嘛
tstring对象是字符串指针嘛
就像你下次让快递给你寄东西,快递问:寄到哪?我要地址?
然后你不给人家地址,你给人家一部手机。那行嘛
虽然你地址在手机里存着,但你要找出来,直接把地址给人家,对吧?
所以应该用tstring对象的什么函数?
第4讲PPT

e397eeffc8199da1e0fa892bd742f2c9.png

而且最好用我们通用模块的函数,我们mdlFileSys 通用模块的 FMRenameFile 函数调用的是shell的API函数,这是操作系统对文件操作的本质!其他任何函数,包括任何C标准库函数,最终都是转换为对它的调用。
刚才不给你了嘛,用 mdlFileSys 通用模块的 FMRenameFile 函数,为啥不试试

048d12d02501d2c9bd9f9abc0f14bb30.gif

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值