调用API函数FindExecutable和CreateProcess时需要注意的问题。

原创 2006年06月07日 16:09:00

下面是一个打开指定文件的函数,用到了API函数FindExecutable、CreateProcess和ShellExecute,需要注意的是,通过FindExecutable找到的关联文件字符串strResult在返回时,后面会有很多null(asc=0),不把这些null去掉就无法打开指定的文件,只会打开一个空的文件,所以要写一个专门去掉null的函数,不知道VB里面有没有这样的函数 :)。

Public Function GF_lSpawn(ByVal sFileName As String,  Optional ByVal bWait As Boolean = True) As Long
    Dim strResult       As String * 260
    Dim lResult         As Long
    Dim start           As STARTUPINFO
    Dim proc            As PROCESS_INFORMATION
    Dim rc              As Long
    Dim strCommandLine  As String
   
    On Error GoTo ErrProc
    
    lResult = FindExecutable(sFileName, "", strResult)
   
    If Asc(Left(strResult, 1)) = 0 Then
        MsgBox "没有可以打开" & sFileName & "文件的软件!"
        Exit Function
    End If
   
    If bWait Then
        start.cb = Len(start)
        start.lpReserved = vbNullString
        start.cbReserved2 = 0
        start.lpReserved2 = 0
        strCommandLine = My_Trim(strResult) + " " + My_Trim(sFileName)
        rc = CreateProcess(vbNullString, strCommandLine, ByVal 0, ByVal 0, False, NORMAL_PRIORITY_CLASS, ByVal 0, vbNullString, start, proc)
        
        rc = WaitForSingleObject(proc.hThread, INFINITE)
        
        rc = CloseHandle(Proc.hThread)
    Else
        ShellExecute 0, "open", strFileName, "", "", SW_SHOWNORMAL
    End If
   
    GF_lSpawn = rc
   
    Exit Function
   
ErrProc:
   
    GF_lSpawn = 0
    MsgBox "打开文件出错,错误信息:" + Err.Description
   
End Function

Public Function My_Trim(ByVal strSrc As String) As String
    Dim i           As Integer
    Dim str         As String
    Dim strDesc     As String
   
    str = ""
    strDesc = ""
   
    For i = 1 To Len(strSrc)
        str = Mid(strSrc, i, 1)
        If Asc(str) <> 0 Then
            strDesc = strDesc + str
        End If
    Next i
   
    My_Trim = strDesc
   
End Function

版权声明:本文为博主原创文章,未经博主允许不得转载。

相关文章推荐

有三个API函数可以运行可执行文件WinExec、ShellExecute和CreateProcess。

1.CreateProcess因为使用复杂,比较少用。2.WinExec主要运行EXE文件。如:WinExec('Notepad.exe Readme.txt', SW_SHOW);3.ShellEx...

WIN32API函数CreateProcess创建一个新的进程和它的主线程,新进程运行指定的可执行文件

#include //CString的头文件 #include //屏蔽窗口 #pragma comment(linker,"/subsystem:windows /ENTRY:mainCRTStar...

关于CreateProcess 函数的两种版本问题

以下为收集资料仅供方便查看之用: vs05里面 项目默认定义了 UNICODE 和 _UNICODE宏 在项目属性 -> C/C++ -> 预处理器 -> 预处理器定义里可以看到有从项目默认继承...

vc中调用其他应用程序的方法(函数) winexec,shellexecute ,createprocess

如果是win32程序,需要加上#include "windows.h"。 三个SDK函数: WinExec,ShellExecute ,CreateProcess可以实现调用其他程序的要求,其中以W...
  • ypist
  • ypist
  • 2012-04-10 11:48
  • 637

vc中调用其他应用程序的方法(函数) winexec,shellexecute ,createprocess

三个SDK函数: WinExec,ShellExecute ,CreateProcess可以实现调用其他程序的要求,其中以WinExec最为简单,ShellExecute比WinExec灵活一些,Cr...

做移动应用使用地图API时需要注意的问题

最近在做一个基于地点提醒的移动应用,当初考虑大家都心知肚明的原因,谨慎的选择了百度地图,现在想想其实完全没有必要,好的应用本来就不分国界的,最后可能还是得换回Google地图。毕竟Google地图在技...

关于java调用了windows的api函数的问题解答

java调用了windows的api函数还可以移植吗?当然不可以,windwos的API只能用于windwos,在linux或其它系统下,它是不能被运行的?   追问:不是说java是跨平台语言吗?...

Windows中CreateProcess函数用法(转)

1.函数说明: WIN32API函数CreateProcess用来创建一个新的进程和它的主线程,这个新进程运行指定的可执行文件。 2.函数原型: BOOL CreateProcess (  ...

CreateProcess函数详解及示例

WIN32API函数CreateProcess用来创建一个新的进程和它的主线程,这个新进程运行指定的可执行文件。 函数原型: BOOL CreateProcess ( LPCTSTR lpAp...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:深度学习:神经网络中的前向传播和反向传播算法推导
举报原因:
原因补充:

(最多只允许输入30个字)