先把其他程序文件.exe手改为.dat,
然后写一个VB程序,
按钮调用"当前文件夹"内“.exe改完扩展名的文件.dat”,
但是调用执行出的是改.dat之前的.exe文件。
本人表达能力不好,不知道各位大侠清楚了没。
具体该怎么做?
麻烦了。

解决方案 »

  1.   

    将*.Exe文件改名为*.Bat,使用Shell函数调用*.Bat文件,实际执行的仍是EXE文件。Dim RetVal
    RetVal = Shell("C:\WINDOWS\ABC.Bat", 1)
      

  2.   

    是.dat不是.bat阿,,还是不论什么都是一样的? .ini .ull等等都是这个代码?还有就是 ("C:\WINDOWS\ABC.Bat", 1)是调用当前文件夹内的吗?
      

  3.   

    文件肯定是没变的
    只是改了一下扩展名而已你想要.exe修改后的.dat执行出来是什么结果?
      

  4.   

    楼主,WINDOWS窗口下能运行的除在WINDOWS下的可执行文件外,
    *.BAT文件是可执行文件。
    你要的*.DAT文件是无法执行的。
      

  5.   

    那改成.ini也是可以的,我不是固定就要.dat 是想在程序内把任何扩展文件执行
      

  6.   

    1.先把*.dat改为*.exe,如下命令:
    Name app.path & "\a.dat" As app.path & "\a.exe"2.执行改名后的a.exe
    shell app.path & "\a.exe",vbhide   'vbhide就是隐藏执行3.执行完以后改回a.dat:
    Name app.path & "\a.exe" As app.path & "\a.dat"
      

  7.   

    具体如何编辑按钮呢?
    有没有更简便的思路了?
    我记得我朋友的那个程序是
    在当前文件夹下把.dat改回.exe可以独立运行。
    改回.dat的话也可以用自己写的那个按钮调用运行。
      

  8.   

    Private Type SHFILEOPSTRUCT
            hwnd As Long
            wFunc As Long
            pFrom As String
            pTo As String
            fFlags As Integer
            fAnyOperationsAborted As Long
            hNameMappings As Long
            lpszProgressTitle As String '  only used if FOF_SIMPLEPROGRESS
    End Type
    Private Const FO_COPY = &H2
    Private Const FO_DELETE = &H3
    Private Const FO_MOVE = &H1
    Private Const FO_RENAME = &H4Private Const FOF_ALLOWUNDO = &H40
    Private Const FOF_CONFIRMMOUSE = &H2
    Private Const FOF_FILESONLY = &H80                  '  on *.*, do only files
    Private Const FOF_MULTIDESTFILES = &H1
    Private Const FOF_NOCONFIRMATION = &H10             '  Don't prompt the user.
    Private Const FOF_NOCONFIRMMKDIR = &H200            '  don't confirm making any needed dirs
    Private Const FOF_RENAMEONCOLLISION = &H8
    Private Const FOF_SILENT = &H4                      '  don't create progress/report
    Private Const FOF_SIMPLEPROGRESS = &H100            '  means don't show names of files
    Private Const FOF_WANTMAPPINGHANDLE = &H20          '  Fill in SHFILEOPSTRUCT.hNameMappings
    Private Const FOF_NOERRORUI = &H400Private Declare Function SHFileOperation Lib "shell32.dll" Alias "SHFileOperationA" (lpFileOp As SHFILEOPSTRUCT) As Long
    Private Declare Function ShellExecute Lib "shell32.dll" Alias "ShellExecuteA" (ByVal hwnd As Long, ByVal lpOperation As String, ByVal lpFile As String, ByVal lpParameters As String, ByVal lpDirectory As String, ByVal nShowCmd As Long) As LongConst SW_SHOW = 5
    Private Sub Command1_Click()
        Call subReName("d:\abc.dat", "d:\abc.exe", 0, Me)
        '下面注释的是VB方法,我使用的是Win API函数,你可以2选1
        'Call Shell("d:\abc.exe", vbNormalFocus)
        Call ShellExecute(0, "", "d:\abc.exe", "", "", 0)
    End Sub
    '重新命名
    Public Sub subReName(ByVal strSource As String, _
                            ByVal strDesc As String, _
                            Optional ByVal bflag As Boolean = False, _
                            Optional pForm As Form)
        Dim SHFileOp As SHFILEOPSTRUCT
        
        SHFileOp.wFunc = FO_MOVE
        SHFileOp.pFrom = strSource + Chr(0)
        SHFileOp.pTo = strDesc + Chr(0)
        SHFileOp.lpszProgressTitle = App.Title + Chr(0)
        If IsMissing(pForm) = False Then SHFileOp.hwnd = pForm.hwnd
            
        SHFileOp.fFlags = 0 '不设任何标志
        
        If bflag Then '不显示任何窗口
            SHFileOp.fFlags = SHFileOp.fFlags + FOF_SILENT ' + FOF_ALLOWUNDO + FOF_NOCONFIRMATION
        End If
        
        Call SHFileOperation(SHFileOp)
    End Sub'希望是你想要的
      

  9.   

    直接 shell "xxx.dat" 即可
      

  10.   

    楼上的是对的,我试了一下,直接shell "xxx.dat"是可行的.
      

  11.   

     直接   shell   "xxx.dat "   即可歷害,這都想的出來。