具体写法加分100

解决方案 »

  1.   

    在鼠标点击事件中调用shell来启动程序就好了
      

  2.   


    shell (path_get & "/" & filename) '就是这个样子一行,path_get是你得到的路径,filename是文件名,好久不用vb了,自己稍稍修剪一下了。添加到你需要的事件里面。
      

  3.   

    虚拟鼠标点击和Shell有什么关系?
      

  4.   

    myjian  能有什么提议?
      

  5.   

    caofusheng  你给的代码 只是在具体的某个坐标的点击 没有 给出具体路径的点击 谢谢
      

  6.   

    这么说吧 我的VB写的 里面多层调用,可是问题是  写出来后的EXE 双击EXE可以运行 但是用其他的EXE调用就不能运行 是不是兼容性的问题  如果是在解决不了兼容性的问题  有什么办法能让他 通过其他的EXE调用 能执行我这个EXE 谢谢
      

  7.   

    我怀疑是 我调用的资源文件有问题  但是手动双击就可以执行  用其他EXE调用就不行了  为什么啊  
      

  8.   

    再补充下 有的EXE可以调用  有的EXE就不能调用 他
      

  9.   

    如果是EXE调用exe的话shell 应该没有问题的。
      

  10.   

    哥们 你能给我 发个私信么  加Q 或者MSN聊下 具体说下问题行么
      

  11.   

    严重赞同caofusheng的说法,如果是EXE调用exe的话shell最佳。
      

  12.   

    或者我有一种想法,我还是想用虚拟鼠标来执行EXE,由于坐标的问题 所以我有一些怪异的想法。
    希望大家能多提出想法和宝贵意见 谢谢
    以1024X768 分辨率的屏幕为例  第一步 运行EXE后由于资源文件无法运行 但是其他的文件可以执行 所以把桌面的分成N个坐标点 每个ICO 在一个坐标中 
    第二步: 复制这个EXE 在桌面 系统会自动把这个EXE放在桌面最后一个位置 
    第三步:由于之前已经划分出每个ICO的坐标 以桌面上的ICO最后一个位置的 坐标虚拟双击运行 
     不知道 大家怎么想的 谢谢
      

  13.   

    可是问题是     写出来后的EXE   双击EXE可以运行   但是用其他的EXE调用就不能运行 
    //
    有的EXE可以调用     有的EXE就不能调用
    //可能是你的问题了.按你的描述,我能想到的原因是------------初始化路径(也就是快捷方式属性窗口里的那个"起始位置").拿CreateProcess这个API来举例.它的原型如下: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
    );
    lpCurrentDirectory这个参数,就是指定了程序启动时的初始路径.如果你的程序里使用了相对路径,而这个相对路径却没有使用App.Path来指定的话,就会有这情况.为此我写了一个小小的测试程序,如下:'这个框里的代码所需要的条件:
    '新建一个EXE工程;
    '在默认的窗体上添加两个按钮,名称不变,为Command1与Command2;
    '然后把这里所有的代码复制到窗体的代码窗口里面去,并生成一个EXE备用.我是生成了名为"TestInitDir.exe"的文件.
    Option ExplicitPrivate Sub Command1_Click()
        '不使用定位
        If Dir("1.txt") <> "" Then
            MsgBox "TRUE"           '找到文件,就弹出TRUE
        Else
            MsgBox "FALSE"          '没找到,就弹出FALSE
        End If
    End SubPrivate Sub Command2_Click()
        '使用自定位
        If Dir(AddStrToStr(App.Path, "\") & "1.txt") <> "" Then
            MsgBox "TRUE"           '找到文件,就弹出TRUE
        Else
            MsgBox "FALSE"          '没找到,就弹出FALSE
        End If
    End SubPrivate Function AddStrToStr(ByVal Str1 As String, ByVal Str2 As String) As String
        '自动添加字符串到目标字符串结尾
        If LCase(Right(Str1, Len(Str2))) = LCase(Str2) Then
            AddStrToStr = Str1
        Else
            AddStrToStr = Str1 & Str2
        End If
    End Function以上是一个工作程序,是模拟你的EXE用的.下面这个是模拟其它的EXE调用你的EXE的情况.'这个框里的代码所需要的条件:
    '新建一个EXE工程;
    '在默认的窗体上添加两个按钮,名称不变,为Command1与Command2;
    '然后把这里所有的代码复制到窗体的代码窗口里面去.可以不生成EXE而直接在IDE里调用.
    Option ExplicitConst 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 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
        '增强的Shell
        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)
        With sinfo
            .cb = Len(sinfo)
            .dwFlags = STARTF_USESHOWWINDOW
            .wShowWindow = start_size
        End With
        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 FunctionPrivate Sub Command1_Click()
        '模拟"指定了错误的初始目录"的情况
        SuperShell "d:\temp\testinitdir.exe", vbNullString, -1, SW_NORMAL, NORMAL_PRIORITY_CLASS
    End SubPrivate Sub Command2_Click()
        '模拟"指定了正确的初始目录"的情况
        SuperShell "d:\temp\testinitdir.exe", "d:\temp\", -1, SW_NORMAL, NORMAL_PRIORITY_CLASS
    End Sub以上工作完成后,按如下过程来测试:首先在第一个EXE也就是TestInitDir.exe所在的目录下放一个1.txt,这个文件是模拟你EXE所使用的一些文件;手工双击这个EXE,看看两个按钮点下去所得到的结果是不是都是TRUE?如果是,那就继续:现在关了那个EXE,使用第二个工程来启动它.当然,第二个工程的那几个路径你得改成你机器上TestInitDir.exe实际的路径~~好.使用第一个按钮来启动TestInitDir.exe时,出现什么了?你点点TestInitDir.exe的第一个按钮?再点点第二个按钮?关了这个TestInitDir.exe,返回~~~然后用第二个按钮来启动TestInitDir.exe再试下?明白了没?如果你的程序真的是这个原因造成的,那么解决就非常简单-------在需要使用一个相对的资源时,使用App.Path来进行自定位就OK了.本来没必要写这么多,但是本着"学习WHY而不是学习HOW"的想法,把原因也写了一下.....于是才啰嗦了这么大一堆:)希望这些能帮到你.当然也希望你的问题就是这个原因~~嘿嘿不然就是牛头不对马嘴啦.....