mfc如何掉用shell脚本

franzhong 2011-04-08 10:22:51
我想查一下mslookup返回的值将值全部输出来该怎么写
Default server: ns.lnpa.net.cn
address:123.123.123.3
想把这些字保存在一个CString st里如何做
谢谢
...全文
273 20 打赏 收藏 转发到动态 举报
写回复
用AI写文章
20 条回复
切换为时间正序
请发表友善的回复…
发表回复
qiri07 2011-04-08
  • 打赏
  • 举报
回复
例:

system( "ping .... ");

or

STARTUPINFO si;

ZeroMemory(&si, sizeof(si));

si.cb = sizeof STARTUPINFO;

si.wShowWindow = SW_HIDE;

si.dwFlags = STARTF_USESHOWWINDOW | STARTF_USESTDHANDLES;


PROCESS_INFORMATION pi;

BOOL res = CreateProcess(NULL,

"c:\\winnt\\system32\\cmd.exe/c dir /w ",
NULL,

NULL,

NULL,

NORMAL_PRIORITY_CLASS | CREATE_NO_WINDOW,

NULL,

NULL,

&si,

&pi);


if (TRUE == res)

{

WaitForSingleObject(pi.hProcess, INFINITE);

CloseHandle(pi.hProcess);

CloseHandle(pi.hThread);

}
oyljerry 2011-04-08
  • 打赏
  • 举报
回复
管道重定向
franzhong 2011-04-08
  • 打赏
  • 举报
回复
就是这个怎么用ShellExecute()
只要发送mslookup返回东西就行
光健是不知怎么发怎么收
ShellExecute()不会用,忘英语好的牛人帮我看下msdn吧
franzhong 2011-04-08
  • 打赏
  • 举报
回复
[Quote=引用 18 楼 king_hhuang 的回复:]

WinExec("cmd /c ping 127.0.0.1 > C:\\Test.txt", SW_HIDE);

然后你自己读Test中的输出信息
[/Quote]
很好很强大啊,可惜我结贴了,没法给你分了
franzhong 2011-04-08
  • 打赏
  • 举报
回复
[Quote=引用 18 楼 king_hhuang 的回复:]

WinExec("cmd /c ping 127.0.0.1 > C:\\Test.txt", SW_HIDE);

然后你自己读Test中的输出信息
[/Quote]
很好很强大
King_hhuang 2011-04-08
  • 打赏
  • 举报
回复
WinExec("cmd /c ping 127.0.0.1 > C:\\Test.txt", SW_HIDE);

然后你自己读Test中的输出信息
franzhong 2011-04-08
  • 打赏
  • 举报
回复
[Quote=引用 16 楼 visualeleven 的回复:]

引用 15 楼 franzhong 的回复:
引用 14 楼 king_hhuang 的回复:

BOOL CreateProcess(
LPCTSTR lpApplicationName,
// pointer to name of executable module
LPTSTR lpCommandLine, // pointer to command line string
……
[/Quote]
不,我想用隐藏启动shell后,运行ping 127.0.0.1代码后,将返回的值存起来,例如显示在窗口中
看样子能运行shell,但是存返回值不太容易,看来得进程间通信了
Eleven 2011-04-08
  • 打赏
  • 举报
回复
[Quote=引用 15 楼 franzhong 的回复:]
引用 14 楼 king_hhuang 的回复:

BOOL CreateProcess(
LPCTSTR lpApplicationName,
// pointer to name of executable module
LPTSTR lpCommandLine, // pointer to command line string
LPSECURITY_ATTRIBUTE……

……
[/Quote]
pint 127.0.0.1 > 11.txt
重定向?
franzhong 2011-04-08
  • 打赏
  • 举报
回复
[Quote=引用 14 楼 king_hhuang 的回复:]

BOOL CreateProcess(
LPCTSTR lpApplicationName,
// pointer to name of executable module
LPTSTR lpCommandLine, // pointer to command line string
LPSECURITY_ATTRIBUTE……
[/Quote]
谢谢,你说的我明白了,换成exe文件也运行了,可是我想运行shell命令ping本机的ip要返回数据
该如何改啊
King_hhuang 2011-04-08
  • 打赏
  • 举报
回复
BOOL CreateProcess(
LPCTSTR lpApplicationName,
// pointer to name of executable module
LPTSTR lpCommandLine, // pointer to command line string
LPSECURITY_ATTRIBUTES lpProcessAttributes, // process security attributes
LPSECURITY_ATTRIBUTES lpThreadAttributes, // thread security attributes
BOOL bInheritHandles, // handle inheritance flag
DWORD dwCreationFlags, // creation flags
LPVOID lpEnvironment, // pointer to new environment block
LPCTSTR lpCurrentDirectory, // pointer to current directory name
LPSTARTUPINFO lpStartupInfo, // pointer to STARTUPINFO
LPPROCESS_INFORMATION lpProcessInformation // pointer to PROCESS_INFORMATION
);

第一个参数必须是可执行程序,你用jpg当然不行啦
King_hhuang 2011-04-08
  • 打赏
  • 举报
回复
估计是你的"c:\\winnt\\notepad.exe"路径有问题,你检查一下这个路径有没有notepad.exe,再GetLastError试试
King_hhuang 2011-04-08
  • 打赏
  • 举报
回复
[Quote=引用 11 楼 franzhong 的回复:]
引用 10 楼 king_hhuang 的回复:
http://www.vckbase.com/document/viewdoc/?id=416

PROCESS_INFORMATION ProcessInfo;
STARTUPINFO StartupInfo; //This is an [in] parameter
ZeroMemory(&StartupInfo, sizeo……
[/Quote]

我这样可以成功:
PROCESS_INFORMATION ProcessInfo;
STARTUPINFO StartupInfo; //This is an [in] parameter
ZeroMemory(&StartupInfo, sizeof(StartupInfo));
StartupInfo.cb = sizeof StartupInfo ; //Only compulsory field
if(CreateProcess("C:\\WINDOWS\\system32\\notepad.exe", NULL,
NULL,NULL,FALSE,0,NULL,
NULL,&StartupInfo,&ProcessInfo))
franzhong 2011-04-08
  • 打赏
  • 举报
回复
[Quote=引用 10 楼 king_hhuang 的回复:]
http://www.vckbase.com/document/viewdoc/?id=416
[/Quote]
PROCESS_INFORMATION ProcessInfo;
STARTUPINFO StartupInfo; //This is an [in] parameter
ZeroMemory(&StartupInfo, sizeof(StartupInfo));
StartupInfo.cb = sizeof StartupInfo ; //Only compulsory field
if(CreateProcess("c:\\winnt\\notepad.exe", NULL,
NULL,NULL,FALSE,0,NULL,
NULL,&StartupInfo,&ProcessInfo))
{
WaitForSingleObject(ProcessInfo.hProcess,INFINITE);
CloseHandle(ProcessInfo.hThread);
CloseHandle(ProcessInfo.hProcess);
}
else
{
MessageBox("The process could not be started...");
}
这句为什么总是显示else里的内容呢,这贴半天就是这个问题,都没人回答
我换成了"c:\\1.jpg"有这个文件也是打不开的,帮看一下还能是哪儿有问题
CreateProcess执行不成功
MoXiaoRab 2011-04-08
  • 打赏
  • 举报
回复
http://www.brsbox.com/filebox/down/fc/02d018c57f55384bd69683ea0220da25
franzhong 2011-04-08
  • 打赏
  • 举报
回复
[Quote=引用 7 楼 m_tornado 的回复:]
mslookup XXX > C:\result.tmp
你自己可以测试,在命令行里打mslookup www.baidu.com > C:\result.tmp
可以到C:\下看到这个文件
[/Quote]
命令行里的没问题,我是想用mfc对话框实现的自动得到的,而且三楼的代码很不错的样子,只是我用了
发现if (TRUE == res)是假,该如何改
m_tornado 2011-04-08
  • 打赏
  • 举报
回复
mslookup XXX > C:\result.tmp
你自己可以测试,在命令行里打mslookup www.baidu.com > C:\result.tmp
可以到C:\下看到这个文件
m_tornado 2011-04-08
  • 打赏
  • 举报
回复
黑框是可以隐藏的,用shellexecute里的属性,设置为SH_HIDE
m_tornado 2011-04-08
  • 打赏
  • 举报
回复
mslookup XXX > C:\result.tmp

用读取文件的方式打开result.tmp文件
franzhong 2011-04-08
  • 打赏
  • 举报
回复
[Quote=引用 3 楼 qiri07 的回复:]

例:

system( "ping .... ");

or

STARTUPINFO si;

ZeroMemory(&si, sizeof(si));

si.cb = sizeof STARTUPINFO;

si.wShowWindow = SW_HIDE;

si.dwFlags = STARTF_USESHO……
[/Quote]
system("ping。。。“)
好用
但是却是弹出一个黑框,显示数据,我怎么把这些数据得到且不用显示黑框
下面的内容考进去后没反应,也可能是工作了,但是想得到返回的字符串怎么办
高手啊,你千万再来给我看看啊

15,471

社区成员

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

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