WinExec(pChar('net use \\192.168.1.1 ""/user:"guest"'),SW_SHOW);
之后就跳出一个dos窗口,怎么发一个回车给这个窗口?

解决方案 »

  1.   

    用shellexecute吧,这个比较好用
      

  2.   

    aiirii(ari),说说啦。zhangnan623(狐和鹅) shellexecute也是一样要发回车。
      

  3.   

    to FCPPMM(MM):
     不是我不想說, 我曾想實現可在程序與Console交互, 但沒完成, 第一次比較簡單, 後來就無法通訊!!!
      

  4.   

    没懂,为什么要回车?如果是不想让那个DOS窗口出现的话,把SW_SHOW改成SW_HIDE
    行不行,我没试。我以前用的是net send 命令AnsiString s="net send ";
     s=s+Trim(ComboBox1->Text)+" ";
     s=s+Memo1->Text;
     WinExec(s.c_str(),SW_HIDE);
      

  5.   

    hushaoshu2(西门吹雪) ,为什么搞笑呢?一点都不搞笑.哼......ekin(活着),你比较可爱.aiirii(ari) ,你可是有两个星的喔怎么可以不懂,开玩笑啦,每个人都有自己掌握得好的地方.不过谢谢你啦.imrgsa() ,你还小不懂啦,你自己试一下上面那个语句就知道我为什么会这么问,而且非SW_Show不可.
      

  6.   

    我也不会,不过帮你转个帖子。这不是一件简单的事情。按照标准的Windows做法,应该利用设备驱动开发包DDK设计虚拟设备驱动VxD,由VxD来控制DOS程序的输入。不过VxD开发被公认是Windows开发中最困难的内容之一。 
        若想避免复杂的VxD编程,只能从DOS程序的输入缓冲区下手,因为一般的DOS程序都是直接或间接地读取键盘缓冲区。最常见的办法是利用DOS窗口的Paste功能,即选择DOS窗口的系统菜单,然后选择Edit,再选择Paste。这样,Windows将系统剪贴板上的内容输入DOS程序的键盘缓冲区。我们以VB程序为例说明这一过程。 
         Shell "f:\tc\sample.exe", 1 
         Clipboard.SetText "f:\tc\data" + Chr(13) 
         AppActivate "sample.exe" 
         SendKeys "% ep", True ‘ 激活Paste功能 
         AppActivate "Project1 - Microsoft Visual Basic [run]" 
        这里的SendKeys是模拟键盘输入,Delphi和C++可以使用Journal Playback钩子函数实现。这个VB程序调用sample.exe,然后利用粘贴功能输入路径和回车,DOS程序开始工作。我曾经利用这一程序来调用一个DOS下的计算程序,输入路径后,DOS程序将计算结果存盘,然后Windows程序再进行进一步地处理。但是这一过程,最好是让DOS程序显示,但不需用户干预。如果把DOS程序最小化,Sendkeys不容易成功。如果一定要最小化显示,也可以编写一个DOS程序,让该程序向键盘缓冲区写入键码,然后由这个DOS程序调用你想控制的DOS程序,这样可能运行得更稳定一些。但填充键盘缓冲区的这种方法对DOS程序有要求: 
        一、DOS程序不能清除键盘缓冲区。有些DOS程序在一次输入完成之后,进行下一次输入之前会自动清除键盘缓冲区,以避免误操作,但这会使我们的程序进行不下去。 
        二、DOS程序没有按任意键终止程序运行的功能。有些DOS程序,如HD-COPY在复制磁盘的过程中一旦用户按任何一个键就终止运行。 
        三、DOS程序不能使用Ctrl、Atl等组合键。 
        四、DOS程序的操作步骤不能太多。因为键盘缓冲区的大小是有限的。 
        总的来说,在Windows程序中控制DOS程序程序并非不可能,但这很大程度上要看DOS程序的工作方式。不过,以我的经验,只要可能最好把DOS程序改写为Windows程序,这才是最好的办法。
      

  7.   

    CreateProcess之后使用Pipe技术就可以了技术网上有的,问题我就基本解决了,至于技术,不便公开
      

  8.   

    关键API如下CreateProcess建立Console进程
    CreatePipe创建Pipe连接Console
    DuplicateHandle复制IO的Handle
    MsgWaitForMultipleObjects等待进程结束
    WriteFile向Pipe写数据,就是向Console输入了
    ReadFile读Pipe数据,就是对Console的输出做起来也不算太复杂的,Tips都给了,剩下的问题就不大了,主要是VC的版本多,MSDN肯定有的
      

  9.   

    ly_liuyang(Liu Yang),能不能偷偷发一段程序给我呢,我一定保密。等我有100分我再给你加分,好不好?[email protected]
      

  10.   

    如何知道net use成功呢????我在XP和2000下测试,dos窗口一闪而过。
      

  11.   

    WinExec(pChar('net use \\192.168.1.1 ""/user:"guest"' + #10),SW_SHOW);这样就不跳出DOS窗口了
      

  12.   

    sundayboysII(空),你去试试能不能登陆192.168.1.1这台机器就知道了。lucyruth(自由人),是啊,不跳出了,你真懂事,几岁了?干脆不写程序的话也不跳出阿,那更省事啊。不跟你开玩笑了,你那个语句一点作用都没有,相当于什么都没执行。
      

  13.   

    你到底是想在控制台上运行一个'net use \\192.168.1.1 ""/user:"guest",然后在发送一个回车呢,还是不想让这个dos窗口闪现呢?
      

  14.   

    flyforlove(为情飞),当然不是闪烁啦.
    在控制台上运行'net use \\192.168.1.1 ""/user:"guest"'之后,就会跳出一个dos窗口,我要手工去按一下回车,那个窗口才不见而且上面那个语句才会执行.所以必须想发一个回车给那个dos窗口.
    上面很多人都看得懂,只是他们不愿意公开技术或者还不知道怎么解决.如果我不显示那个dos窗口的话,也就不用发回车了,但是那个语句就不会起作用,你明白了吗?
    你也许要动手试试,才知道怎么回事.这个问题很多人也碰过的,没碰过的人是理解不了的.
    谢谢你的热心帮忙.lucyruth(自由人) ,你很聪明吧,连问题都没搞明白."这么一个简单的功能完全可以换另外一个语句来实现"亏你说得出来,不懂别装懂.你要真有本事,你就把问题理解清楚吧,理解清楚了你再告诉大家你这个语句怎么写.
      

  15.   

    我是有点笨,但素质还没有你那么差吧,我认为只要是人都不会说出你刚才说的话
    lucyruth(自由人),是啊,不跳出了,你真懂事,几岁了?
      

  16.   

    to  FCPPMM(MM) : 如果你只是要簡單登錄到別的PC, 可考慮用其它Api實現!!
      

  17.   

    to  FCPPMM(MM),还自称是MM,是人妖吧,在这里招摇撞骗
      

  18.   

    lucyruth(自由人),一点幽默感都没有,走开吧,到此为止.
      

  19.   

    aiirii(ari),谢谢啊,不过不只是要登陆啊,还有很多其他的操作,恐怕api很难啊.
      

  20.   

    你的操作系统是???我在2000和xp下测试没有你说的情况,也就是说dos窗口一闪而过的。
      

  21.   

    sundayboysII(空),我是xp阿,要连接到别的机器才有的,而且那个用户名guest是没有密码的.如果是一闪而过就是语句没有起作用的.谢谢你.
      

  22.   

    to FCPPMM(MM) 
    我不知道你想要得到一个什么样的结果。
    首先,我对这句执行语句的理解是连同一个另外一台机子。
    其次,我在我的机子上试过了,dos窗口一闪而过,就可以连同另外一台机子。
    最后,这样的结果,可以用api函数实现。
    希望你把你要实现的所有情况说一下,看是不是像你说得那样,只能用这条语句来实现。
    或者还有其他方法。
    这样就避免了大家还要猜想你到底想要做什么。
      

  23.   

    ly_liuyang(Liu Yang)已经把答案说得够明白了的.
    CreateProcess的使用,管道与输入重定向(你的问题看来不用重定向输出)
    这些资料网上都有的.