[技术][询问]请教如何用CreateProcess启动telnet?

62 views
Skip to first unread message

wangji...@gmail.com

unread,
Jun 25, 2009, 11:27:28 PM6/25/09
to TopLanguage
void Create(DWORD a_dwindex)
{
m_Index = a_dwindex;
SECURITY_ATTRIBUTES saAttr;
saAttr.nLength = sizeof(SECURITY_ATTRIBUTES);
saAttr.bInheritHandle = TRUE;
saAttr.lpSecurityDescriptor = NULL;
if (!CreatePipe(&(g_hStdinRead[a_dwindex]), &(g_hStdinWrite
[a_dwindex]), &saAttr, 0))
{
AfxMessageBox("´´½¨¹ÜµÀʧ°Ü");
return ;
}
if (!CreatePipe(&(g_hStdoutRead[a_dwindex]), &(g_hStdoutWrite
[a_dwindex]), &saAttr, 0))
{
AfxMessageBox("´´½¨¹ÜµÀʧ°Ü");
return ;
}

if (!CreatePipe(&(g_hStderrRead[a_dwindex]), &(g_hStderrWrite
[a_dwindex]), &saAttr, 0))
{
AfxMessageBox("´´½¨¹ÜµÀʧ°Ü");
return ;
}
PROCESS_INFORMATION pi={0};
STARTUPINFO siStartInfo;

ZeroMemory( &siStartInfo, sizeof(STARTUPINFO) );
siStartInfo.cb = sizeof(STARTUPINFO);
siStartInfo.wShowWindow = SW_HIDE;//SW_SHOWDEFAULT;//
siStartInfo.dwFlags = STARTF_USESHOWWINDOW;
siStartInfo.dwFlags = STARTF_USESTDHANDLES |
STARTF_USESHOWWINDOW;
siStartInfo.hStdInput=g_hStdinRead[a_dwindex];
siStartInfo.hStdOutput = g_hStdoutWrite[a_dwindex];
siStartInfo.hStdError = g_hStderrWrite[a_dwindex];

#if 1
if (!CreateProcess("C:\\\\WINDOWS\\\\system32\\\\cmd.exe",
"Telnet.exe 127.0.0.1", NULL, NULL, TRUE,
CREATE_NEW_CONSOLE |
CREATE_NO_WINDOW, NULL, NULL, &siStartInfo, &pi))
#else

if (!CreateProcess( NULL, "cmd.exe", NULL, NULL, TRUE,
0, NULL, NULL, &siStartInfo, &pi))
#endif
{
AfxMessageBox("erroraaaaaa!");
return ;
}
m_hPROCESSid = pi.hProcess;

}

halida

unread,
Jun 25, 2009, 11:47:29 PM6/25/09
to TopLanguage
先把需求列一下,不要没头没尾的。

On Jun 26, 11:27 am, "wangjinhu...@gmail.com" <wangjinhu...@gmail.com>
wrote:

jinhu wang

unread,
Jun 26, 2009, 12:04:15 AM6/26/09
to pon...@googlegroups.com
背景:通过重定向子进程的标准的输入输出来获取对已有软件的外部控制。这里试图将telnet以隐藏方式启动,将其输入输出重定向到我们自己的程序里来,从而可以方便的扩展出更多的功能。
技术背景可以参考:http://blog.csdn.net/todototry/archive/2007/04/28/1589283.aspx及里面的回帖。

2009/6/26 halida <linjun...@gmail.com>:

Bruce Khereid

unread,
Jun 26, 2009, 12:08:54 AM6/26/09
to pon...@googlegroups.com
上来就一群字母和符号,看不懂。

2009/6/26 jinhu wang <wangji...@gmail.com>

jinhu wang

unread,
Jun 26, 2009, 12:18:31 AM6/26/09
to pon...@googlegroups.com
哈哈,看来是问懵了。
不好意思啊。


2009/6/26 Bruce Khereid <bruce....@gmail.com>:

sagasw

unread,
Jun 26, 2009, 1:05:33 AM6/26/09
to pon...@googlegroups.com
先去看看《提问的智慧》吧。

不是问蒙了,是你还不会问。

2009/6/26 jinhu wang <wangji...@gmail.com>

周龙亭

unread,
Jun 26, 2009, 1:06:50 AM6/26/09
to pon...@googlegroups.com
试试这样:
 if (!CreateProcess(NULL, "Telnet.exe 127.0.0.1", NULL, NULL, TRUE,
                                   CREATE_NEW_CONSOLE | CREATE_NO_WINDOW, NULL, NULL, &siStartInfo, &pi))
{
//......
}

2009/6/26 jinhu wang <wangji...@gmail.com>

Kenny Yuan

unread,
Jun 26, 2009, 1:12:51 AM6/26/09
to pon...@googlegroups.com
用CMD /C可以在Command Windows里启动程序

参见http://www.ss64.com/nt/cmd.html

另外,这种问题最好先上网搜一下,效率更高


--
Kenny Yuan
C++, UI, LISP, MMA, Psychology and Automobile.
BLOG: CS巴别塔(Computer Science Babel)
URL1: http://csbabel.wordpress.com/
URL2: http://blog.csdn.net/yuankaining/

jinhu wang

unread,
Jun 26, 2009, 1:40:56 AM6/26/09
to pon...@googlegroups.com
to:周龙亭
这样还是不行
to:Kenny Yuan
谢谢你的建议,我一般能搜到的问题肯定不会拿到这里耽误大家的时间。
to:sagasw
不是我不会问,是这个问题并不具备通用性。写的太详细了反而真的耽误大家时间了,你说对不?如果有人遇到过这个问题,估计一看题目的两个关键字就给出答案了,这是我的本意。你说的那本书如果有缘看到了,我会去读的,谢谢啊:)

2009/6/26 Kenny Yuan <yuank...@gmail.com>:

XiongJia Le

unread,
Jun 26, 2009, 1:44:39 AM6/26/09
to pon...@googlegroups.com
直接开 Socket 发 Telnet 协议吧...觉得还比 CreateProcess + Duplicate Pipe 可控制...

2009/6/26 jinhu wang <wangji...@gmail.com>

jinhu wang

unread,
Jun 26, 2009, 2:09:58 AM6/26/09
to pon...@googlegroups.com
嗯,以前有这个想法,telnet客户端协议有现成的吗?没有搜到过。

2009/6/26 XiongJia Le <lexio...@gmail.com>:

jinhu wang

unread,
Jun 26, 2009, 3:04:52 AM6/26/09
to pon...@googlegroups.com
打开poco库看了下 发现DialogSocket.cpp实现了Telnet协议,呵呵。


2009/6/26 jinhu wang <wangji...@gmail.com>:

mpgood55

unread,
Jun 26, 2009, 1:37:23 AM6/26/09
to pongba
貌似系统的telnet和ftp都不支持重定向。
Reply all
Reply to author
Forward
0 new messages