mfc调用bat文件问题。

liuhuiqiao88 2013-03-11 09:20:41
怎么实现mfc中一个控件用来调用bat文件的,现在就想用一个小例子,窗口中一个安扭为调用,另一个为取消。调用按钮设定了消息映射BN_CLICKED,其映射函数为Ondiao(),在里面添加的消息映射函数为ShellExecute(NULL, "open", "ansys.bat", NULL, NULL, SW_SHOW);为什么调用按钮不能调用。直接用BAT文件能调用。
...全文
793 21 打赏 收藏 转发到动态 举报
写回复
用AI写文章
21 条回复
切换为时间正序
请发表友善的回复…
发表回复
IwGhostpit 2014-06-02
  • 打赏
  • 举报
回复
以管理员身份运行
Lucas020 2013-11-14
  • 打赏
  • 举报
回复
ShellExecuteW(NULL, NULL, _T("C:\\xx.bat"),NULL, NULL, SW_SHOW); ShellExecuteW(NULL, _T("open"), _T("C:\\xx.bat"),NULL, NULL, SW_SHOW); system("C:\\xx.bat"); 我试了以上三种形式都能执行.bat文件,但是,即使有.bat文件最后有pause语句,窗口也只是一闪而过,请问有人知道为什么?
A729002330 2013-06-26
  • 打赏
  • 举报
回复
ShellExecute(NULL,_T("open"),WorkDir1,NULL,WorkDir,SW_SHOW ); 在测试的时候是可以的,发布到jsp页面中,工作路径就不起作用了,这是怎么回事??
liuhuiqiao88 2013-03-22
  • 打赏
  • 举报
回复
解决了,直接放在目录文件中就可以了
liuhuiqiao88 2013-03-22
  • 打赏
  • 举报
回复
引用 16 楼 oMuYeJingFeng1 的回复:
我怎么就可以用按钮实现呢?
回想一下其实挺简单的,我觉得可能是在win7系统上装的c++有点问题吧,当时试了好几种方法都没实现,隔了几天在用又出了个新问题,调用的ansys.bat里是输入txt文件的,但是现在能调用,但是txt文件一直是空的,出不来结果,不知道哪又出错了,麻烦问下你会吗‘
SHAOIT 2013-03-19
  • 打赏
  • 举报
回复
我怎么就可以用按钮实现呢?
liuhuiqiao88 2013-03-18
  • 打赏
  • 举报
回复
引用 14 楼 xichengyi 的回复:
在你的批处理文件中最后一行,加上pause,看下现象。我和你之前要解决的问题是一样的,只是现在弹出一个CMD框,需要我键入批处理文件名。
我的弄出来了,谢谢了,我的问题我觉得可能是WIN7装的C++有点问题吧,每次改后必须重新打开再在里面写,否则就一直有错,开始不知道一直改,每次都有错,现在重新打开后改的就没事了,哈
xichengyi 2013-03-15
  • 打赏
  • 举报
回复
在你的批处理文件中最后一行,加上pause,看下现象。我和你之前要解决的问题是一样的,只是现在弹出一个CMD框,需要我键入批处理文件名。
liuhuiqiao88 2013-03-14
  • 打赏
  • 举报
回复
引用 12 楼 xichengyi 的回复:
对于发帖人的问题,我的方法如下:将你的"ansys.bat"文件放到工程目录下,在你的OnRadio()消息响应函数里,加入ShellExecute(NULL, "open", "c:\windows\system32\cmd.exe","ansys.bat", NULL, SW_SHOW); 编译执行后,点击Radio按钮,会弹出CMD命令行,而且此时显示的路径是你的M……
我用这个函数还是不能调用啊,根本就没反应
xichengyi 2013-03-14
  • 打赏
  • 举报
回复
对于发帖人的问题,我的方法如下:将你的"ansys.bat"文件放到工程目录下,在你的OnRadio()消息响应函数里,加入ShellExecute(NULL, "open", "c:\windows\system32\cmd.exe","ansys.bat", NULL, SW_SHOW); 编译执行后,点击Radio按钮,会弹出CMD命令行,而且此时显示的路径是你的MFC工程的路径,键入ansys.bat,然后回车,即可执行你的批处理文件。 但这里有个问题是必须将ansys.bat批处理文件放到工程目录下,才能达到以上的效果,感觉有点受限。也希望大家共同探讨更好的解决方法。
xichengyi 2013-03-13
  • 打赏
  • 举报
回复
我现在要实现的功能和发帖人的类似。按照楼上各位说的方法都试过了,但是都不好使!各位大神就不能给个靠谱的方法吗?
傻X 2013-03-13
  • 打赏
  • 举报
回复
我都直接System(“执行语句”) 屡试不爽
辰岡墨竹 2013-03-13
  • 打赏
  • 举报
回复
引用 4 楼 liuhuiqiao88 的回复:
不是很大明白, ShellExecute调用cmd.exe,bat文件作为参数来执行,ShellExecute(NULL, "explore", "c:\windows\system32\cmd.exe","ansys.bat", NULL, SW_SHOW);这样改也不能调用 ShellExecute函数原型及参数含义如下: ShellExecute( HWND ……
不对,命令动词不对,explore是指在资源管理器中显示,而不是执行。不写"explore",用NULL就行了。
傻X 2013-03-13
  • 打赏
  • 举报
回复
一整个文件也可以使用System的。 直接执行文件也可以的。
「已注销」 2013-03-13
  • 打赏
  • 举报
回复
天啊,一两条语句还行。 可是一整个文件就好搞了。
引用 8 楼 tiger9991 的回复:
我都直接System(“执行语句”) 屡试不爽
「已注销」 2013-03-12
  • 打赏
  • 举报
回复
bat是可以直接打开的,以前也这样干过。 应该是路径问题。 就是你的程序没有找到该bat文件。
引用 1 楼 healer_kx 的回复:
你确认几个事情。 1,文件路径,你可以先用绝对路径试一试。 2. 确认你的参数是不是都OK。 3. bat不是个可执行文件,是要用cmd.exe执行它把?
liuhuiqiao88 2013-03-12
  • 打赏
  • 举报
回复
能不能举个简单的例子,我刚学这的东西,懂得不多
liuhuiqiao88 2013-03-12
  • 打赏
  • 举报
回复
不是很大明白, ShellExecute调用cmd.exe,bat文件作为参数来执行,ShellExecute(NULL, "explore", "c:\windows\system32\cmd.exe","ansys.bat", NULL, SW_SHOW);这样改也不能调用 ShellExecute函数原型及参数含义如下: ShellExecute( HWND hwnd, //父窗口句柄 LPCSTR lpOperation, //操作类型 LPCSTR lpFile, //要进行操作的文件或路径 LPCSTR lpParameters, //当lpOperation为“explore”时指定要传递的参数,通常设为NULL LPCSTR lpDirectory, //指定默认目录,通常设为NULL INT nShowCmd //文件打开的方式,以通常方式还是最大化或最小化显示 ) 我那样对应写的ShellExecute不对吗
西山小月 2013-03-11
  • 打赏
  • 举报
回复
同意楼上。。。。
oyljerry 2013-03-11
  • 打赏
  • 举报
回复
ShellExecute调用cmd.exe,bat文件作为参数来执行
加载更多回复(1)
CFile //创建/打开文件 CFile file; file.Open(_T("test.txt"),CFile::modeCreate|CFile::modeNoTruncate|CFile::modeReadWrite); 文件打开模式可组合使用,用“|”隔开,常用的有以下几种: CFile::modeCreate:以新建方式打开,如果文件不存在,新建;如果文件已存在,把该文件长度置零,即清除文件原有内容。 CFile::modeNoTruncate:以追加方式打开,如果文件存在,打开并且不将文件长度置零,如果文件不存在,会抛出异常。一般与CFile::modeCreate一起使用,则文件不存在时,新建一个文件;存在就进行追加操作。 CFile::modeReadWrite:以读写方式打开文件。 CFile::modeRead:只读。 CFile::modeWrite:只写。 //写入数据 CString strValue = "Hello World!"; file.Write(strValue,strValue.GetLength()); //追加数据 file.SeekToEnd(); //将指针移至文件末尾进行追加 file.Write(strValue,strValue.GetLength()); //关闭文件 file.Close(); CStdioFile CStdioFile是CFile的派生类,对文件进行流式操作,对于文本文件的读写很有用处,可按行读取写入。 //写入数据 CString strValue = "Hello World!"; file.WriteString(strValue); //读取数据 CString strRead; file.ReadString(strRead); 当文件存在多行数据需要逐行读取时,可用函数BOOL CStdioFile::ReadString(CString& rString),当遇到"\n "时读取截断,如果文件未读完,返回true,否则返回false。 //逐行读取文件内容,存入strRead while(file.ReadString(strRead)) { ...; } 各种关于文件的操作在程序设计中是十分常见,如果能对其各种操作都了如指掌,就可以根据实际情况找到最佳的解决方案,从而在较短的时间内编写出高效的代码,因而熟练的掌握文件操作是十分重要的。本文将对Visual C++中有关文件操作进行全面的介绍,并对在文件操作中经常遇到的一些疑难问题进行详细的分析。   1.文件的查找   当对一个文件操作时,如果不知道该文件是否存在,就要首先进行查找。MFC中有一个专门用来进行文件查找的类CFileFind,使用它可以方便快捷地进行文件的查找。下面这段代码演示了这个类的最基本使用方法。   CString strFileTitle;   CFileFind finder;   BOOL bWorking = finder.FindFile("C:\\windows\\sysbkup\\*.cab");   while(bWorking)   {   bWorking=finder.FindNextFile();   strFileTitle=finder.GetFileTitle();   }   2.文件的打开/保存对话框   让用户选择文件进行打开和存储操作时,就要用到文件打开/保存对话框。MFC的类CFileDialog用于实现这种功能。使用CFileDialog声明一个对象时,第一个BOOL型参数用于指定文件的打开或保存,当为TRUE时将构造一个文件打开对话框,为FALSE时构造一个文件保存对话框。   在构造CFileDialog对象时,如果在参数中指定了OFN_ALLOWMULTISELECT风格,则在此对话框中可以进行多选操作。此时要重点注意为此CFileDialog对象的m_ofn.lpstrFile分配一块内存,用于存储多选操作所返回的所有文件路径名,如果不进行分配或分配的内存过小就会导致操作失败。下面这段程序演示了文件打开对话框的使用方法。   CFileDialog mFileDlg(TRUE,NULL,NULL,   OFN_HIDEREADONLY|OFN_OVERWRITEPROMPT|OFN_ALLOWMULTISELECT,   "All Files (*.*)|*.*||",AfxGetMainWnd());   CString str(" ",10000);   mFileDlg.m_ofn.lpstrFile=str.GetBuffer(10000);   str
代码静态分析工具PC-LINT安装配置 PC-Lint是C/C++软件代码静态分析工具,你可以把它看作是一种更加严格的编译器。它不仅可以检查出一般的语法错误,还可以检查出那些虽然符合语法要求但不易发现的潜在错误。 C语言的灵活性带来了代码效率的提升,但相应带来了代码编写的随意性,另外C编译器不进行强制类型检查,也带来了代码编写的隐患。PCLint识别并报告C语言中的编程陷阱和格式缺陷的发生。它进行程序的全局分析,能识别没有被适当检验的数组下标,报告未被初始化的变量,警告使用空指针,冗余的代码,等等。软件除错是软件项目开发成本和延误的主要因素。PClint能够帮你在程序动态测试之前发现编码错误。这样消除错误的成本更低。 使用PC-Lint在代码走读和单元测试之前进行检查,可以提前发现程序隐藏错误,提高代码质量,节省测试时间。并提供编码规则检查,规范软件人员的编码行为。 由于PC-LINT对于一般程序员来说可能比较陌生,有好多人安装了也不知道怎样配置和使用。 下面我就根据自己的安装和配置心得对PC-Lint的安装、配置及使用进行下详细说明.本人主要介绍了将PC-Lint集成到VC++6.0和SourceInsight的方法和步骤。 (一)Windows下C/C++开发工具中,VC6使用较为普遍,因此这里先讲下VC6.0环境中集成pclint的步骤. 首先, 当然要下载软件,正版软件要200多$呢,买不起!所以只好网上找免费的拉。从http://www.61ic.com/down/othe/pclint.rar处可以下载到一个8.0版本的pclint. 1.将pclint.rar解压至c:\, 这样lint文件就位与c:\pclint(安装目录)下了。 2.将c:\pclint\lnt 下的3个文件lib-w32.lnt,env-vc6.lnt,co-msc60.lnt拷贝至c:\pclint下, 再在安装目录下创建std.lnt和options.lnt两个文件,其中std.lnt的内容如下 // contents of std.lnt c:\pclint\co-msc60.lnt c:\pclint\lib-w32.lnt c:\pclint\options.lnt -si4 -sp4 -i"D:\Program Files;D:\Program Files\Microsoft Visual Studio\VC98\Include" //end 其中-i后面的路径名为VC的安装路径和VC Include 文件路径,根据自己的修改便可。 options.lnt 内容可为空,为定制内容,以后需要时再添加。 准备工作做完了,下一步就是要将pclint集成到VC6中去,先配置lint使之能对单个C或C++文件进行检查。 1.打开VC6,tools--->customize-->tools 新建一个名为pclint的项,在下面填入 command: C:\pclint\lint-nt.exe arguments: -u c:\pclint\std.lnt c:\pclint\env-vc6.lnt "$(FilePath)" Use Output Window 打上勾 close 完成。 这个在你VC窗口tools菜单下应该多了一个pclint选项,可以用它来运行lint程序,对你的c/c++代码进行静态检查了。 现在就可以用个小程序测试一下pclint了 //test1.cpp #include class X { int *p; public: X() { p = new int[20]; } void init() { memset( p, 20, 'a' ); } ~X() { delete p; } }; 编译这个文件,看下你的编译器给你多少警告,再运行下lint, 可以自己对比一下。 我的机器上,VC产生0 errors 0 warnings, 而lint程序产生了如下8条警告信息,有些还是很有用处的提示,这里就不一一分析了. test.cpp(12): error 783: (Info -- Line does not end with new-line) test.cpp(7): error 1732: (Info -- new in constructor for class 'X' which has no assignment operator) test.cpp(7): error 1733: (Info -- new in constructor for class 'X' which has no copy constru

15,979

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC 界面
社区管理员
  • 界面
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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