两个运行命令的问题,如何用Notepad打开文件,立即返回不等待?

时间:2023-01-31 12:28:23
请教两个问题

SYSTEMTIME   st;
GetLocalTime(&st);
CString  fileName;
fileName.Format("%d-%d-%d-%d-%d-%d",st.wYear,st.wMonth,st.wDay,st.wHour,st.wMinute,st.wSecond); 
fileName.Append(".txt")

1、用notepad打开这个fileName,立即返回,不等待notepad结束,自己才能结束。。。

2、一个test.exe(console型),运行test fileName,也是立即返回,不等待,用system("test fileName"),DOS的小黑窗一直后台挂着。。。

6 个解决方案

#1


CreateProcess

#2


引用 1 楼 an_bachelor 的回复:
CreateProcess


必须要以多线程? 有些麻烦哟。。。


fileName怎么作为参数,执行Notepad.exe呢?

#3


sample
http://msdn.microsoft.com/en-us/library/ms682512(VS.85).aspx

#4


简单的
HINSTANCE ShellExecute(
  __in_opt  HWND hwnd,
  __in_opt  LPCTSTR lpOperation,
  __in      LPCTSTR lpFile,
  __in_opt  LPCTSTR lpParameters,
  __in_opt  LPCTSTR lpDirectory,
  __in      INT nShowCmd
);

#5


WinExec, 
ShellExecute,
CreateProcess,
都行啊, WinExec简单点, 不过MS不推荐使用了.
你要是必须使用system的话, 可以这样:
system("start pathofnotepad");

#6


ShellExecute(NULL,NULL,fileName,NULL,NULL,SW_NORMAL);
这个语句会自动根据fileName的后缀名选择合适的方式打开该文件,个人感觉还是比较好用的。

一定要求使用notepad打开的话,可以这样写:
ShellExecute(NULL,"open","notepad.exe",fileName,NULL,SW_NORMAL);
注意:因为notepad.exe在系统的默认路径下的,所以这里没有硬编码其路径。
      fileName文件必须在程序的当前工作目录下,否则必须添加上它的完整路径。

通过test.exe程序来打开fileName,同上。如果test.exe程序本身不会立即结束,那么做为Console程序,自然一直会有一个黑框在那里挂着了~~就好像notepad.exe也是一直“挂"在那里的一样。

CreateProcess也不错,具体用法就不赘述了,楼主可参考MSDN。

#1


CreateProcess

#2


引用 1 楼 an_bachelor 的回复:
CreateProcess


必须要以多线程? 有些麻烦哟。。。


fileName怎么作为参数,执行Notepad.exe呢?

#3


sample
http://msdn.microsoft.com/en-us/library/ms682512(VS.85).aspx

#4


简单的
HINSTANCE ShellExecute(
  __in_opt  HWND hwnd,
  __in_opt  LPCTSTR lpOperation,
  __in      LPCTSTR lpFile,
  __in_opt  LPCTSTR lpParameters,
  __in_opt  LPCTSTR lpDirectory,
  __in      INT nShowCmd
);

#5


WinExec, 
ShellExecute,
CreateProcess,
都行啊, WinExec简单点, 不过MS不推荐使用了.
你要是必须使用system的话, 可以这样:
system("start pathofnotepad");

#6


ShellExecute(NULL,NULL,fileName,NULL,NULL,SW_NORMAL);
这个语句会自动根据fileName的后缀名选择合适的方式打开该文件,个人感觉还是比较好用的。

一定要求使用notepad打开的话,可以这样写:
ShellExecute(NULL,"open","notepad.exe",fileName,NULL,SW_NORMAL);
注意:因为notepad.exe在系统的默认路径下的,所以这里没有硬编码其路径。
      fileName文件必须在程序的当前工作目录下,否则必须添加上它的完整路径。

通过test.exe程序来打开fileName,同上。如果test.exe程序本身不会立即结束,那么做为Console程序,自然一直会有一个黑框在那里挂着了~~就好像notepad.exe也是一直“挂"在那里的一样。

CreateProcess也不错,具体用法就不赘述了,楼主可参考MSDN。