我已经把你加位好友,交个朋友吧。 对了,请问,怎么实现对文件的关联呀。
我的qq: 19968444  
e mail: [email protected]

解决方案 »

  1.   

    sssa2000以下是csdn里前人的回答!
    问题:
    VB(主要是要原理及API函数),如何注册某种扩展名的文件,使其图标,打开方式,右键菜单与某个DLL或EXE关联起来。
    右键菜单与DLL关联时,可以直接调用DLL中的函数(有参数)吗?我不是很懂,希望你们能懂我说的意思(类似于*.ZIP)!解答(1):下面的代码实现了注册文件扩展名、图标、打开方式,'声明以下常数和API函数
    Private Const REG_SZ = 1                         ' Unicode nul terminated string
    Private Const HKEY_CLASSES_ROOT = &H80000000
    Private Declare Function RegSetValue Lib "advapi32.dll" Alias "RegSetValueA" (ByVal hKey As Long, ByVal lpSubKey As String, ByVal dwType As Long, ByVal lpData As String, ByVal cbData As Long) As Long
    'cbData为字符串lpData的长度,一个汉字为两个字节
    '使用示例,注册一种扩展名123的文件,缺省打开方式为用记事本
    Private Sub Command1_Click()
    '注册文件类型.123为file123
    RegSetValue HKEY_CLASSES_ROOT, ".123", REG_SZ, "file123", 7
    '设置文件类型file123的图标与记事本的图标相同
    RegSetValue HKEY_CLASSES_ROOT, "file123\DefaultIcon", REG_SZ, "c:\windows\notepad.exe,0", 24
    '设置file123的缺省打开方式为read
    RegSetValue HKEY_CLASSES_ROOT, "file123\Shell", REG_SZ, "read", 4
    '设置file123的右键菜单read显示的菜单项名称为"阅读.123文件"
    RegSetValue HKEY_CLASSES_ROOT, "file123\Shell\read", REG_SZ, "阅读.123文件", 12
    '设置文件类型file123的缺省打开方式为用记事本打开
    RegSetValue HKEY_CLASSES_ROOT, "file123\Shell\read\Command", REG_SZ, "c:\windows\notepad.exe ""%1""", 22
    End Sub解答(2)
    rundll32命令的格式是这样的:rundll32 <dllname>,<entryName> <parameter line>给你写一下rundll32怎么工作的吧(示意代码):1,hModule = LoadLibrary("dllname")
    2, procEntry = GetProcAddress(hModule,"<entryName>");
    3, if(!procEntry) return;
    4,RUNDLL32PROC(procEntry)(hwnd,hInstance,paramLine,cmdShow);
    5,return关键这个RUNDLL32PROC的函数类型,定义如下:void CALLBACK EntryPoint(HWND hwnd, HINSTANCE hinst, LPSTR lpszCmdLine, int nCmdShow);  // for 32bit dll你按照这个原型声明函数并输出符号就可以被rundll32执行了。其中lpszCmdLine就是入口函数名称空格后面的字串。要注意CALLBACK声明表明函数的调用规则是stdcall。void说明不用返回值。hwnd,hinst何nCmdShow跟WinMain入口参数的含义相同。OK,have a try! Happy programming!
      

  2.   

    ltpao(啊炮) 回复于2001-8-21 21:47:00 得21分  还有两种方法
    1、Dir("项目~1.doc"),返回的是长文件名
    2、用API函数
    Private Const MAX_PATH = 260
    Private Const INVALID_HANDLE_VALUE = -1Private Type FileTime
        dwLowDateTime          As Long
        dwHighDateTime          As Long
    End TypePrivate Type WIN32_FIND_DATA
            dwFileAttributes As Long
            ftCreationTime As FileTime
            ftLastAccessTime As FileTime
            ftLastWriteTime As FileTime
            nFileSizeHigh As Long
            nFileSizeLow As Long
            dwReserved0 As Long
            dwReserved1 As Long
            cFileName As String * MAX_PATH
            cAlternate As String * 14
    End TypePrivate Declare Function FindFirstFile Lib "kernel32" Alias "FindFirstFileA" ( _
        ByVal lpFileName As String, _
        lpFindFileData As WIN32_FIND_DATA) As Long
    Private Declare Function FindClose Lib "kernel32" ( _
        ByVal hFindFile As Long) As Long
    Private Function StripStringTail(psStr As Variant) As String
        On Error Resume Next
        Dim i As Long
        
        If Trim(psStr & "") = "" Then Exit Function
        i = InStr(1, psStr, Chr(0), vbTextCompare)
        If i > 0 Then
            StripStringTail = Left(psStr, i - 1)
        Else
            StripStringTail = psStr
        End If
    End FunctionPrivate Function GetLongFileName(ByVal sFile As String) As String
        Dim llSearchHandle As Long
        Dim lFindDataStruct As WIN32_FIND_DATA
        llSearchHandle = FindFirstFile(sFile, lFindDataStruct)
        If llSearchHandle <> INVALID_HANDLE_VALUE Then
            GetLongFileName = StripStringTail(lFindDataStruct.cFileName)
            Call FindClose(llSearchHandle)
        End If
    End FunctionPrivate Sub Form_Load()
        Debug.Print GetLongFileName("f:\xceedb~1.exe")
    End Sub
     
      

  3.   

    你是不是打不开这个文件?
    我最近也遇到了这个问题,你把Command()函数返回的字符串的前后两个引号去掉就可以了
    例如:
       你想打开C:\W.Jm
       但是Command函数返回的是“C\W.Jm”多了两个引号,用程序去掉,就OK
       Command这个函数应该返回的是长文件名阿??
       把引号去掉后你再用GetLongFileName这个函数试试吧,不会有问题的。