有谁知道createprocess怎么用?例如我要打开"D:\AOEII\age2_x1.exe"怎么写?看了好多文章,愣是没看懂,所以来此求教,谢谢各位了

解决方案 »

  1.   

    MSDN去查一下,要学会查资料!
      

  2.   


    //http://www.m5home.com/bbs/dispbbs.asp?boardID=10&ID=265&page=1找到里面的"API三把枪",不少API有中文说明,有些直接有例子.
      

  3.   

    Private Type PROCESS_INFORMATION
        hProcess As Long
        hThread As Long
        dwProcessId As Long
        dwThreadId As Long
    End TypePrivate Type STARTUPINFO
        cb As Long
        lpReserved As String
        lpDesktop As String
        lpTitle As String
        dwX As Long
        dwY As Long
        dwXSize As Long
        dwYSize As Long
        dwXCountChars As Long
        dwYCountChars As Long
        dwFillAttribute As Long
        dwFlags As Long
        wShowWindow As Integer
        cbReserved2 As Integer
        lpReserved2 As Byte
        hStdInput As Long
        hStdOutput As Long
        hStdError As Long
    End TypePrivate Declare Function CreateProcess Lib "kernel32" Alias "CreateProcessA" (ByVal lpApplicationName As String, ByVal lpCommandLine As String, lpProcessAttributes As Any, lpThreadAttributes As Any, ByVal bInheritHandles As Long, ByVal dwCreationFlags As Long, lpEnvironment As Any, ByVal lpCurrentDriectory As String, lpStartupInfo As STARTUPINFO, lpProcessInformation As PROCESS_INFORMATION) As LongPrivate Sub cmdRun_Click()
        Dim lp As PROCESS_INFORMATION
        Dim si As STARTUPINFO
        si.cb = Len(si)
        CreateProcess vbNullString, "D:\AOEII\age2_x1.exe", ByVal 0&, ByVal 0&, 0, &H80, ByVal 0&, vbNullString, si, lp
    End Sub
      

  4.   

    最好附带说明!谢谢了
    上面的那些代码好用吗?我怎么不好用?
    顺便问一下,打开“帝国时代”这类游戏为什么用shell语句打不开,一点击游戏就会出错,是不是用别的语句呀?
      

  5.   

    在窗口上放一个command控件,命名为:cmdRun
    你是通常是怎么打开“帝国时代”的?是否是快捷方式?如是,看看运行参数
      

  6.   

    哦,看了,就是D:\AOEII\age2_x1.exe后面什么没有,怎么办?
      

  7.   

    不行,按你的代码与用shell没什么区别,还是同样的问题,阿勇,你加我qq我告诉你错误,这插不了图,75704500
      

  8.   

    createprocess和shell的结果会有区别?
      

  9.   

    这个代码是API的示例'添加 Command1  CommonDialog1Const INFINITE = &HFFFF
    Const STARTF_USESHOWWINDOW = &H1
    Private Enum enSW
        SW_HIDE = 0
        SW_NORMAL = 1
        SW_MAXIMIZE = 3
        SW_MINIMIZE = 6
    End Enum
    Private Type PROCESS_INFORMATION
       hProcess As Long
       hThread As Long
       dwProcessId As Long
       dwThreadId As Long
    End Type
    Private Type STARTUPINFO
       cb As Long
       lpReserved As String
       lpDesktop As String
       lpTitle As String
       dwX As Long
       dwY As Long
       dwXSize As Long
       dwYSize As Long
       dwXCountChars As Long
       dwYCountChars As Long
       dwFillAttribute As Long
       dwFlags As Long
       wShowWindow As Integer
       cbReserved2 As Integer
       lpReserved2 As Byte
       hStdInput As Long
       hStdOutput As Long
       hStdError As Long
    End Type
    Private Type SECURITY_ATTRIBUTES
       nLength As Long
       lpSecurityDescriptor As Long
       bInheritHandle As Long
    End Type
    Private Enum enPriority_Class
       NORMAL_PRIORITY_CLASS = &H20
       IDLE_PRIORITY_CLASS = &H40
       HIGH_PRIORITY_CLASS = &H80
    End Enum
    Private Declare Function CreateProcess Lib "kernel32" Alias "CreateProcessA" (ByVal lpApplicationName As String, ByVal lpCommandLine As String, lpProcessAttributes As SECURITY_ATTRIBUTES, lpThreadAttributes As SECURITY_ATTRIBUTES, ByVal bInheritHandles As Long, ByVal dwCreationFlags As Long, lpEnvironment As Any, ByVal lpCurrentDriectory As String, lpStartupInfo As STARTUPINFO, lpProcessInformation As PROCESS_INFORMATION) As Long
    Private Declare Function WaitForSingleObject Lib "kernel32" (ByVal hHandle As Long, ByVal dwMilliseconds As Long) As LongPrivate Sub Command1_Click()
       On Error GoTo errhandler
       CommonDialog1.DialogTitle = "请选择一个文件"
       CommonDialog1.CancelError = True
       CommonDialog1.Filter = "可执行文件(*.exe)|*.exe"
       CommonDialog1.ShowOpen
       SuperShell CommonDialog1.FileName, Left$(CommonDialog1.FileName, Len(CommonDialog1.FileName) - Len(CommonDialog1.FileTitle)), 0, SW_NORMAL, HIGH_PRIORITY_CLASS
    errhandler:
       If Err > 0 Then Exit Sub
    End SubPrivate Function SuperShell(ByVal App As String, ByVal WorkDir As String, dwMilliseconds As Long, ByVal start_size As enSW, ByVal Priority_Class As enPriority_Class) As Boolean
       Dim pclass As Long
       Dim sinfo As STARTUPINFO
       Dim pinfo As PROCESS_INFORMATION
       Dim sec1 As SECURITY_ATTRIBUTES
       Dim sec2 As SECURITY_ATTRIBUTES
       sec1.nLength = Len(sec1)
       sec2.nLength = Len(sec2)
       sinfo.cb = Len(sinfo)
       sinfo.dwFlags = STARTF_USESHOWWINDOW
       sinfo.wShowWindow = start_size
       pclass = Priority_Class
       If CreateProcess(vbNullString, App, sec1, sec2, False, pclass, 0&, WorkDir, sinfo, pinfo) Then
          WaitForSingleObject pinfo.hProcess, dwMilliseconds
          SuperShell = True
       Else
          SuperShell = False
       End If
    End Function
      

  10.   


    //呵呵~~如果你是程序员,在这里这样问问题一定受到BS而且,在CSDN被人BS是很正常的,你能顶住这些,然后在CSDN混上个几个月个把年的,一定能学有所成~~:)扯远了~~嘿嘿.关于你的问题,主要原因在于初始目录的问题吧.楼上的Left$(CommonDialog1.FileName, Len(CommonDialog1.FileName) - Len(CommonDialog1.FileTitle))这一句就是取这个目录的.按这样调用就应该会OK~~顶住呀,嘿嘿~~
      

  11.   

    楼上的代码,我有些看不懂?能不能举个例子,假如文件时age2_x1.exe,地址是d:代码应该怎样写?还有15楼的代码为什么我运行没有反应?
      

  12.   

    把Command1改为下面代码Private Sub Command1_Click()
       Dim aa$, jj%
       aa = "d:\age2_x1.exe"
       jj = InStrRev(aa, "\")
       SuperShell aa, Left(aa, Len(Mid(aa, 1, jj))), 0, SW_NORMAL, HIGH_PRIORITY_CLASS
    End Sub
      

  13.   

    哈哈,当然还要啊, 我是说把 Private Sub Command1_Click() 这事件的代码改掉,其它不动.
      

  14.   

    http://writeblog.csdn.net/Default.aspx进去后选择 相册 建立一个相本集 便可以上传你硬盘中的图片啦
      

  15.   

    问题解决了,原因是sam liu这位把我的地址给打错了
      

  16.   

    回 26F "问题解决了,原因是sam liu这位把我的地址给打错了" ???18F 我打的地址是复制粘贴你 17F 自己写的地址, 呵呵....我才懒得敲字呢.更何况文件的路径只有你最清楚, 不会到现在才发现吧 ?全屏?? 那要看你这个exe是否是全屏的,是的话,你再加上 Me.Windowstate=2
      

  17.   

    还有,我用一个bat文件调用一个小游戏,bat文件编码是这样的“合金弹头1.2.3.4.5.x mslug5nd”,然后再从vb中调用这个bat文件,为什么我的这个小游戏不显示,只是bat文件闪了一下,就什么也没有了,代码就是sam liu给的代码,怎么回事?
      

  18.   

    在你的vb中直接调用   合金弹头1.2.3.4.5.x mslug5nd
      

  19.   

    不行,用shell直接调用D:\合金弹头\合金弹头.bat他就不显示了,与没点一样,单独调用合金弹头1.2.3.4.5.x也是不行,我想应该是在那串代码后面加点什么,让程序启动。希望sam liu帮忙解决一下
      

  20.   

    你的 .bat 怎么写的? 贴出来卡看吧
      

  21.   

    调用bat文件也可以用这段代码吗?