今天是:
设百科问答网为首页|收藏百科问答网|网站地图
百科问答网 - 帮您解决问题,分享成功经验

我用vb 编写的记事本不能直接加载文件内容


如何才能将其与某些程序关联呢?比如.txt
设置了关联又如何打开这类文件?比如双击*.txt就能用我自己的记事本程序打开这个文件
头疼啊,找了N个vb的技术网站也没查到。
高手们教教小弟我吧


答案或建议:


首先请您做个实验:
新建一个EXE,写入如下代码:
Pivatet Sub Form_load()
MsgBox Command$
End Sub
这段代码的意思是,返回您双击某一个文本文件时的完整路径名.请您自己想想,您要打开某个文件, 那您就必须得出这个文件的完整路径名.而这段代码就会返回您双击某一个文本文件时的完整路径名.
之后把这段代码编译为MyExe.exe(大小写不能错),再把这个文件放到您的系统目录下(也就是您的记事本所在目录),那么以后您双击某一个txt文件时,就会调用这个文件来代替记事本文件打开.这个程序非常危险,请您慎重考虑是否要执行.因为以后您双击TXT文件时,将不会再调用记事本来打开.
之后就来修改txt文件的默认打开方式. 以下代码不会再写注释,请原谅.
'在窗体中添加一个命令按钮,写入如下代码:
'窗体
Dim mSysPath As String

Private Sub Command1_Click()
Dim hKey As Long
Dim MyReturn As Long
Dim MyData As String
MyReturn = RegOpenKey(HKEY_CLASSES_ROOT, ".txt", hKey)
MyReturn = RegQueryStringValue(hKey, "", MyData)
MyReturn = RegOpenKey(HKEY_CLASSES_ROOT, MyData + "\shell\open\command", hKey)
MyReturn = RegSetStringValue(hKey, "", mSysPath & "\MyExe.exe %1", False)
If MyReturn Then
MsgBox "改变文件打开方式成功!", vbInformation, "韵乐飞扬"
Else
MsgBox "改变文件打开方式失败!", vbExclamation, "韵乐飞扬"
End If
MyReturn = RegOpenKey(HKEY_CLASSES_ROOT, MyData + "\DefaultIcon", hKey)
MyReturn = RegSetStringValue(hKey, "", mSysPath & "\shell32.dll, -151", False)
RegCloseKey (hKey)
End Sub

Private Sub Form_Load()
Dim Length As Integer
mSysPath = Space$(125)
Call GetSystemDirectory(mSysPath, 125)
mSysPath = StripTerminator(mSysPath)

Dim KeyId As Long
Call RegCreateKey(HKEY_CLASSES_ROOT, ".txt", KeyId)
Call RegSetValueEx(KeyId, "", 0&, REG_SZ, ByVal "txtfile", Len("txtfile") + 1)
Dim KeyId1 As Long
Call RegCreateKey(HKEY_CLASSES_ROOT, "txtfile", KeyId1)
Call RegSetValueEx(KeyId1, "", 0&, REG_SZ, ByVal "569", LenB("539") + 1)
Dim KeyId2 As Long
Call RegCreateKey(KeyId1, "DefaultIcon", KeyId2)
Call RegSetValueEx(KeyId2, "", 0&, REG_SZ, ByVal mSysPath & "\shell32.dll -5", Len(mSysPath & "\shell32.dll -5") + 1)
Dim KeyId3 As Long
Call RegCreateKey(KeyId1, "Shell", KeyId3)
Dim KeyId4 As Long
Call RegCreateKey(KeyId3, "Open", KeyId4)
Dim KeyId5 As Long
Call RegCreateKey(KeyId4, "command", KeyId5)
Call RegSetValueEx(KeyId5, "", 0&, REG_SZ, ByVal mSysPath & "\MyExe.exe %1", Len(mSysPath & "\MyExe.exe %1") + 1)
MsgBox "修改文件打开方式成功。", vbInformation, "系统提示"
End Sub
'标准模块
'****************************************

Public Const REG_SZ = 1
Global Const HKEY_CLASSES_ROOT = &H80000000
Public Declare Function RegCreateKey Lib "advapi32.dll" Alias "RegCreateKeyA" (ByVal hKey As _
Long, ByVal lpSubKey As String, phkResult As Long) As Long
Declare Function RegQueryValueEx Lib "advapi32" Alias "RegQueryValueExA" (ByVal hKey As _
Long, ByVal lpszValueName As String, ByVal dwReserved As Long, lpdwType As Long, lpbData As _
Any, cbData As Long) As Long
Declare Function RegOpenKey Lib "advapi32" Alias "RegOpenKeyA" (ByVal hKey As Long, ByVal _
lpszSubKey As String, phkResult As Long) As Long
Declare Function RegSetValueEx Lib "advapi32.dll" Alias "RegSetValueExA" (ByVal hKey As _
Long, ByVal lpValueName As String, ByVal Reserved As Long, ByVal dwType As Long, lpData As _
Any, ByVal cbData As Long) As Long
Declare Function RegCloseKey Lib "advapi32" (ByVal hKey As Long) As Long
Public Declare Function GetSystemDirectory Lib "kernel32" Alias "GetSystemDirectoryA" (ByVal _
lpBuffer As String, ByVal nSize As Long) As Long

Public Function RegSetStringValue(ByVal hKey As Long, ByVal strValueName As String, _
ByVal strData As String, Optional ByVal fLog) As Boolean
Dim lResult As Long
On Error GoTo 0
lResult = RegSetValueEx(hKey, strValueName, 0&, REG_SZ, ByVal strData, _
LenB(StrConv(strData, vbFromUnicode)) + 1)
If lResult = 0 Then
RegSetStringValue = True
Else
RegSetStringValue = False
End If
End Function

Public Function StripTerminator(ByVal strString As String) As String
Dim intZeroPos As Integer
intZeroPos = InStr(strString, Chr$(0))
If intZeroPos > 0 Then
StripTerminator = Left$(strString, intZeroPos - 1)
Else
StripTerminator = strString
End If
End Function

Public Function RegQueryStringValue(ByVal hKey As Long, ByVal strValueName As String, _
strData As String) As Boolean
Dim lResult As Long
Dim lValueType As Long
Dim strBuf As String
Dim lDataBufSize As Long
RegQueryStringValue = False
On Error GoTo 0
lResult = RegQueryValueEx(hKey, strValueName, 0&, lValueType, ByVal 0&, _
lDataBufSize)
If lResult = ERROR_SUCCESS Then
If lValueType = REG_SZ Then
strBuf = String(lDataBufSize, " ")
lResult = RegQueryValueEx(hKey, strValueName, 0&, 0&, ByVal strBuf, _
lDataBufSize)
If lResult = ERROR_SUCCESS Then
RegQueryStringValue = True
strData = StripTerminator(strBuf)
End If
End If
End If
End Function


照着复制就行了.
如果一路都是成功,那么您的计算机的TXT文件默认打开方式就会被修改.
之后,请您双击一个TXT文件,如果此时没有调用MyExe.exe来打开文本文件,那是因为您没有重新启动计算机.那么此时,请您在文件打开方式列表 中,找到您自己生成的MyExe.exe文件.您就会看到,对话框里已经出现了文件的完整路径名.
之后,您就可以利用command函数来代表双击某一TXT文件的路径了.
比如说,您可以在您的记事本中写入如下代码:
open command for intput as #1 '打开 双击的TXT文件
....' 这里是读取这个文本文件的代码,您自己写,这里就不多说了. 

转 载 请 保 留:http://www.baikewenda.com/tech/dev/7/7/a122362449.htm
推荐内容

敬请注意:百科问答网内容来源于网络或民间经验收集,仅供参考。其中有关健康疾病方面的内容请务必咨询专业医生或及时到医院治疗。
关于我们 - 广告服务 - 联系我们
百科问答网 Copyright ©2005 - 2011 www.baikewenda.com,All Rights Reserved
辽ICP备10007180号