怎样隐藏控制台程序的界面

千分散尽还复来 2010-04-04 12:46:12
各位高手:
我想用VC++控制台程序启动另一个程序打开一个文件,我想把它的界面隐藏起来,也不想让它出现在任务栏上,能实现吗?
谢谢!

另外,用下面语句
system("D:\\first.exe E:\\second.aaa");
用绝对路径没有任何问题,如果用相对路径,它只能启动与它同目录的程序,也就是说改成这样就不行了:
system(".\\thedir\\first.exe .\\thedir\\second.aaa");
怎么办?
谢谢!

...全文
533 14 打赏 收藏 转发到动态 举报
写回复
用AI写文章
14 条回复
切换为时间正序
请发表友善的回复…
发表回复
飘零雁 2011-06-13
  • 打赏
  • 举报
回复

#pragma comment( linker, "/subsystem:\"windows\" /entry:\"mainCRTStartup\"" )

#include <Windows.h>
int main()
{
/*以下启动另一exe*/
SHELLEXECUTEINFO ShExecInfo;
ShExecInfo.cbSize = sizeof(SHELLEXECUTEINFO);
ShExecInfo.fMask = NULL;
ShExecInfo.hwnd = NULL;
ShExecInfo.lpVerb = NULL;
ShExecInfo.lpFile = ("E:\\Work_Project\\ParaExe\\ParaExe\\bin\\Debug\\ParaExe.exe");
ShExecInfo.lpParameters = NULL;
ShExecInfo.lpDirectory = NULL;
ShExecInfo.nShow = SW_MAXIMIZE;
ShExecInfo.hInstApp = NULL;
ShellExecuteEx(&ShExecInfo);

/*以下检测插件安装情况*/

return 0;
}
wljince007 2010-04-05
  • 打赏
  • 举报
回复
给你一个我要自己程序中调用的代码

std::string exe_str 要执行的程序名,
std::string cmd_str 程序的参数

返回值: 0 执行正确
非0时执行异常,你可以按自己的风格加一些日志


int do_cmd(std::string exe_str, std::string cmd_str)
{
SHELLEXECUTEINFOA ShExecInfo = {0};
ShExecInfo.cbSize = sizeof(SHELLEXECUTEINFOA);
ShExecInfo.fMask = SEE_MASK_NOCLOSEPROCESS;
ShExecInfo.hwnd = NULL;
ShExecInfo.lpVerb = "open";
ShExecInfo.lpFile = exe_str.c_str();
ShExecInfo.lpParameters = cmd_str.c_str();
ShExecInfo.lpDirectory = NULL;
ShExecInfo.nShow = SW_HIDE;
ShExecInfo.hInstApp = NULL;

if( ShellExecuteExA(&ShExecInfo) != true )
{
return -1;
}
WaitForSingleObject(ShExecInfo.hProcess,INFINITE);

DWORD dwExitCode;
if( GetExitCodeProcess(ShExecInfo.hProcess, &dwExitCode) != true )
{
CloseHandle(ShExecInfo.hProcess);
return -1;
}
CloseHandle(ShExecInfo.hProcess);

if ( 0 == dwExitCode )
{ return 0; }
else
{ return = GetLastError(); }
}

希望对你有帮助,同意就给我加点分,谢谢。
lanneret1234 2010-04-05
  • 打赏
  • 举报
回复
获取它的句柄 然后隐藏
char strTitle[255];
GetConsoleTitle(strTitle, 255);
HWND hw=FindWindow("ConsoleWindowClass",strTitle);
ShowWindow(hw,SW_HIDE)
罗耗子 2010-04-05
  • 打赏
  • 举报
回复
ShellExecute(NULL,"open",程序名和路径,参数,NULL,SW_HIDE); //隐藏执行,不过进程表还能看到
  • 打赏
  • 举报
回复
论坛只允许连发三帖,这一帖对8、9、10楼一起说算了。

谢谢你们解答!

我还是笨菜鸟,你们给的方法我还没试过,试过后看看效果再说吧。
dream17953 2010-04-05
  • 打赏
  • 举报
回复
对于Windows界面相关的问题不是很懂
  • 打赏
  • 举报
回复
[Quote=引用 7 楼 forestdb 的回复:]
各位高手:
我想用VC++控制台程序启动另一个程序打开一个文件,我想把它的界面隐藏起来,也不想让它出现在任务栏上,能实现吗?
谢谢!

问题能再清楚点么?是控制台程序隐藏还是被启动的程序隐藏,被启动的程序是怎样的程序?

另外,用下面语句
system("D:\\first.exe E:\\second.aaa");
用绝对路径没有任何问题,如果用相对路径,它只能启动与它同目录的程……

在可执行文件的当前目录下有thedir文件夹么?thedir下有first.exe和second.aaa么?能描述下可执行文件,thedir,first.ext,second.aaa的树形关系么?
像这样:
.
| exe.exe
|
\---thedir
first.exe
second.aaa
或者在你的当前目录下执行下tree命令,会有什么样的结果?
[/Quote]

谢谢!
不好意思,我没把问题说清;
要隐藏的是控制台程序,要启动的程序是一个不需安装的播放器文件(first.exe),要用它打开一个媒体文(second.aaa)件,它们都在“thedir”目录里面,我想在这个目录外用一个控制台程序启动first.exe打开second.aaa,就这样。

另外,我的另一台机器上安装有VC++6和Delphi 7,Delphi 7是先安装的,我好久都没用了,我昨天晚上用Delphi 7做了一下,启动成功了;但在我只装有VS2005的机器上又不行了,全屏皆黑。我记得在启动Delphi 7的时候跳出个对话框,大意是系统的Debug被修改了,是否要恢复到用Delphi 7。我点了“是”。我想可能跟这个有点关系;我在论坛上还看到,说VC中牵涉到与路径相关的函数时,它往往会改变默认路径,还不知道是什么意思。
唉,也许是最初学Delphi的缘故,学VC++这么长时间了,我总觉得还没入门。

再次感谢指教。
ForestDB 2010-04-05
  • 打赏
  • 举报
回复
各位高手:
我想用VC++控制台程序启动另一个程序打开一个文件,我想把它的界面隐藏起来,也不想让它出现在任务栏上,能实现吗?
谢谢!

问题能再清楚点么?是控制台程序隐藏还是被启动的程序隐藏,被启动的程序是怎样的程序?

另外,用下面语句
system("D:\\first.exe E:\\second.aaa");
用绝对路径没有任何问题,如果用相对路径,它只能启动与它同目录的程序,也就是说改成这样就不行了:
system(".\\thedir\\first.exe .\\thedir\\second.aaa");
怎么办?
谢谢!

在可执行文件的当前目录下有thedir文件夹么?thedir下有first.exe和second.aaa么?能描述下可执行文件,thedir,first.ext,second.aaa的树形关系么?
像这样:
.
| exe.exe
|
\---thedir
first.exe
second.aaa
或者在你的当前目录下执行下tree命令,会有什么样的结果?
hzy694358 2010-04-04
  • 打赏
  • 举报
回复
ShowWindow(SW_HIDE)
控制台能用否??
  • 打赏
  • 举报
回复
[Quote=引用 3 楼 localxiao 的回复:]
http://hi.baidu.com/songguanjun/blog/item/eb3ae1cd0ef00a590eb34526.html
[/Quote]

反复试过了,怎么不起作用呢?
mstlq 2010-04-04
  • 打赏
  • 举报
回复
不想出现控制台,那就请直接建立win32(no控制台)工程……

路径?
请在msdn里面查“GetModuleFileName”
  • 打赏
  • 举报
回复
谢谢.

[Quote=引用 2 楼 kktemp234 的回复:]
相对路径可以用,但要确定这个程序运行的路径
[/Quote]
怎样确定路径?能详细点吗?
localxiao 2010-04-04
  • 打赏
  • 举报
回复
http://hi.baidu.com/songguanjun/blog/item/eb3ae1cd0ef00a590eb34526.html
最帅马老师 2010-04-04
  • 打赏
  • 举报
回复
楼主的思路无法实现,除非与要调用的程序有接口可以通信。

相对路径可以用,但要确定这个程序运行的路径

64,647

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

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