用VB實現(xiàn)“一點即填”

字號:

面對這種情況,大家可能首先想到的是上網(wǎng)上找一款 填表軟件。但現(xiàn)有的軟件不是用剪貼板傳遞就是采用拖放技 術(shù),而且使用時必須運行填表軟件,使用起來并不是很方便。 因此我們決定自己編寫一個軟件,將它集成到IE的右鍵菜單 里,使用時只要在要輸入的輸入項上單擊鼠標(biāo)右鍵,然后選 擇相應(yīng)的項即會自動輸入,從而實現(xiàn)“一點即填”。
    本程序首先要在IE的右鍵菜單上添加項目,這可通過操作注冊表來實現(xiàn),然后利用一個JavaScript程序判斷所選 的是不是可輸入框,如果是,將我們事先保存的數(shù)據(jù)填上。 下面介紹具體的實現(xiàn)過程。
    一、設(shè)計界面
    進入 VB,選擇“標(biāo)準(zhǔn) EXE”新建一工程,選擇“工 程”菜單下的“部件”,在彈出的對話框中選擇“Microsoft Windows Common Controls 6.0”,然后按照下表在窗體 上添加控件,設(shè)置完成的界面如圖 1 所示: 控件類型 Name 屬性 標(biāo)簽 label1 Caption:名稱 標(biāo)簽 label2 Caption:內(nèi)容 文本框 txtname 文本框 txtcont 命令按鈕 command1 Caption:添加 命令按鈕 command2 Caption:刪除 列表框 listview1 為它加入兩個列,列標(biāo)題分別為“名稱”和“內(nèi)容”,并 且把 View 屬性修改成 3-lvwReport,把 GridLines 改成 True。
    二、程序源代碼
    首先在工程中添加一個標(biāo)準(zhǔn)模塊并輸入如下代碼,這 些代碼用于注冊表操作:
    ’聲明必要的API函數(shù)及常量
    Declare Function RegSaveKey Lib "advapi32.dll" Alias
    "RegSaveKeyA" (ByVal hKey As Long, ByVal lpFile As String, ByVal lpSecurityAttributes   As Long) As Long
    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
    Declare Function RegCloseKey Lib "advapi32.dll" (ByVal hKey
    As Long) As Long
    Declare Function RegCreateKey Lib "advapi32.dll" Alias
    "RegCreateKeyA" (ByVal hKey As Long, ByVal lpSubKey As
    String, phkResult As Long) As Long
    Declare Function RegDeleteKey Lib "advapi32.dll" Alias
    "RegDeleteKeyA" (ByVal hKey As Long, ByVal lpSubKey As
    String) As Long
    Declare Function RegDeleteValue Lib "advapi32.dll" Alias
    "RegDeleteValueA" (ByVal hKey As Long, ByVal lpValueName
    As String) As Long
    Declare Function RegOpenKey Lib "advapi32.dll" Alias
    "RegOpenKeyA" (ByVal hKey As Long, ByVal lpSubKey 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 RegOpenKeyEx Lib "advapi32.dll" Alias
    "RegOpenKeyExA" (ByVal hKey As Long, ByVal lpSubKey As String, ByVal ulOptions As   Long, ByVal samDesired As Long, phkResult As Long) As Long
    Public Const HKEY_CLASSES_ROOT = &H80000000
    Public Const HKEY_CURRENT_USER = &H80000001
    Public Const HKEY_LOCAL_MACHINE = &H80000002
    Public Const HKEY_USERS = &H80000003
    Public Const ERROR_NO_MORE_ITEMS = 259&
    Public Const HKEY_CURRENT_CONFIG = &H80000005
    Enum ValueType
    REG_NONE = 0
    REG_SZ = 1
    REG_EXPAND_SZ = 2
    REG_BINARY = 3
    REG_DWORD = 4
    REG_DWORD_BIG_ENDIAN = 5
    REG_MULTI_SZ = 7
    End Enum
    Global Const KEY_ALL_ACCESS = &H3F Dim lngtype As Long
    Dim rtn As Long, lBuffer As Long, sbuffer As String
    Dim lBufferSize As Long
    ’新建主鍵的過程進入討論組討論。
     Public Sub savekey(hKey As Long, strPath As String)
    On Error GoTo ERR_savekey
        Dim keyhand&
        r = RegCreateKey(hKey, strPath, keyhand&)
        r = RegCloseKey(keyhand&)
        Exit Sub
    ERR_savekey:
        MsgBox Err.Number & "- " & Err.Description
        Resume Next
    End Sub
    ’保存字符型鍵值
    Public Sub savestring(hKey As Long, strPath As String, strValue
    As String, strdata As String)
        On Error GoTo ERR_savestring
        Dim keyhand As Long
        Dim r As Long
        r = RegCreateKey(hKey, strPath, keyhand)
        r = RegSetValueEx(keyhand, strValue, 0, REG_SZ, ByVal strdata, Len(strdata))
        r = RegCloseKey(keyhand)
        Exit Sub
    ERR_savestring:
        MsgBox Err.Number & "- " & Err.Description
        Resume Next
    End Sub
    ’保存DWORD型鍵值
    Function SaveDword(ByVal hKey As Long, ByVal strPath As
    String, ByVal strValueName As String, ByVal lData As Long)
        Dim lResult As Long
        Dim keyhand As Long
        Dim r As Long
        r = RegCreateKey(hKey, strPath, keyhand)
        lResult = RegSetValueEx(keyhand, strValueName, 0&, REG_DWORD, lData, 4)
        r = RegCloseKey(keyhand) End Function
    ’刪除主鍵
    Public Function DeleteKey(ByVal hKey As Long, ByVal strKey
    As String)
       Dim r As Long
        r = RegDeleteKey(hKey, strKey) End Function
    ’保存默認(rèn)鍵值
    Function SetDefaultValue(ByVal hKey As Long, ByVal Subkey
    As String, ByVal Value As String) As Boolean
        Dim ret As Long, lenS As Long, S As String
        ret = RegSetValue(hKey, Subkey, REG_SZ, Value, LenB
    (StrConv(Value, vbFromUnicode)) + 1)
        SetDefaultValue = (ret = 0) End Function
    接著編寫窗體部分的代碼:
    Dim lcont As Integer
    Private Sub Command1_Click()
        Dim ret As Boolean
        ’在列表框中添加項目
        lcont = ListView1.ListItems.Count + 1
        ListView1.ListItems.Add lcont, , txtname
        ListView1.ListItems(lcont).SubItems(1) = txtcont
        ’生成以項目名稱為文件名的HTML文件
    Open App.Path & "\" & txtname & ".htm" For Output As
    #1
        Print #1, ""
        Close #1
        ’在IE右鍵菜單上添加相應(yīng)項目
        savekey HKEY_CURRENT_USER,
    "software\microsoft\internet explorer\menuext\" & txtname.Text
     ret = SetDefaultValue(HKEY_CURRENT_USER,
    "software\microsoft\internet explorer\menuext" & "\" & txtname. Text, "file://" &   App.Path & "\" & txtname & ".htm")
     SaveDword HKEY_CURRENT_USER,
    "software\microsoft\internet explorer\menuext" & "\" & txtname,
    "Contexts", 4
        savestring HKEY_CURRENT_USER,
    "software\microsoft\internet explorer\menuext" & "\" & txtname,
    "iform", txtcont
    End Sub
    ’刪除Private Sub Command2_Click()
        DeleteKey HKEY_CURRENT_USER,
    "software\microsoft\internet explorer\menuext" & "\" & ListView1. SelectedItem
        ListView1.ListItems.Remove ListView1.SelectedItem.Index
    End Sub
    Private Sub Form_Load()
        savekey HKEY_CURRENT_USER,
    "software\microsoft\internet explorer\menuext" End Sub
    三、程序運行
    輸入完成代碼后按 F5 運行,添入必要的信息后就 可使用了,圖2 便是演示結(jié) 果。趕快打開你的IE試一試 吧!