Plugin.cls
上传用户:davilee3
上传日期:2015-04-22
资源大小:986k
文件大小:10k
源码类别:

浏览器

开发平台:

Visual Basic

  1. VERSION 1.0 CLASS
  2. BEGIN
  3.   MultiUse = -1  'True
  4.   Persistable = 0  'NotPersistable
  5.   DataBindingBehavior = 0  'vbNone
  6.   DataSourceBehavior  = 0  'vbNone
  7.   MTSTransactionMode  = 0  'NotAnMTSObject
  8. END
  9. Attribute VB_Name = "cPluginData"
  10. Attribute VB_GlobalNameSpace = False
  11. Attribute VB_Creatable = True
  12. Attribute VB_PredeclaredId = False
  13. Attribute VB_Exposed = False
  14. '---------------------------------------------------------------------------------------
  15. ' Module    : cPluginData
  16. ' DateTime  : 2005-3-15 17:30
  17. ' Author    : Lingll
  18. ' Purpose   : 插件,command型插件
  19. '---------------------------------------------------------------------------------------
  20. Option Explicit
  21. '插件数据--脚本插件
  22. Private Type PluginData_Script
  23.     'Title As String
  24.     Language As String
  25.     Script As String
  26.     LoadedScript As Boolean '是否加载了脚本
  27.     'FileName As String
  28.     '程序启动时是否加载脚本,0:启动时不加载,1:启动时加载
  29.     LoadAtExec As Long
  30.     '执行类型,可以有三个值,0:在顶层页面中执行,1:在页面中的每一个frame都执行,2:仅在鼠标所在的frame中执行
  31.     RunType As Long
  32. End Type
  33. '插件数据--exe插件
  34. Private Type PluginData_Exe
  35.     'Title As String
  36.     'FileName As String
  37.     Param As String
  38. End Type
  39. '插件数据--com插件
  40. Private Type PluginData_Com
  41.     'Title As String
  42.     'FileName As String
  43.     ObjectName As String
  44.     ClassID As String
  45. End Type
  46. '插件数据--dll插件
  47. Private Type PluginData_Dll
  48.     'Title As String
  49.     'FileName As String
  50.     message As Long
  51.     Reserve As Long
  52. End Type
  53. '插件数据--sendkey插件
  54. Private Type PluginData_Sendkey
  55.     Keydata As String
  56. End Type
  57. Private Declare Function RunDll Lib "rundllvb.dll" _
  58.     (ByVal lpDll As String, ByVal lpWeb As Object, ByVal MSG&, ByVal wParam&, ByVal lParam&) As Long
  59. Private Declare Function RegCom Lib "rundllvb.dll" _
  60.     (ByVal lpDll As String, ByVal isreg&) As Long
  61. Public Title As String      '名称,对应于菜单或按钮显示的文字
  62. Public FileName As String   '要执行的文件名,exe | ini
  63. Public Param As String
  64. Public VisInMenu As Long    '是否在"插件菜单"中显示
  65. Public IconFile As String
  66. Private DirectExe As Long          '是否直接的exe文件
  67. Private ModuleType As String    'script,exe,com,dll,sendkey
  68. Private PluginType As String    'command,sideband,toolband,
  69.                                 '也就是执行与存在方式,对应的是命令,侧边栏,工具栏
  70. Private o_FileName As String       'ini中指向的真实文件名
  71. Private o_Title As String       'ini文件中的Title
  72. Private mData_Script As PluginData_Script
  73. Private mData_Exe As PluginData_Exe
  74. Private mData_Com As PluginData_Com
  75. Private mData_Dll As PluginData_Dll
  76. Private mData_Sendkey As PluginData_Sendkey
  77. Private Const m_MTStr_Script As String = "script"
  78. Private Const m_MTStr_Exe As String = "exe"
  79. Private Const m_MTStr_Com As String = "com"
  80. Private Const m_MTStr_Dll As String = "dll"
  81. Private Const m_MTStr_Sendkey As String = "sendkey"
  82. 'Private mPluginData As PluginData
  83. Public Sub Run()
  84. On Error Resume Next
  85. Dim tPath$, tParam$
  86. Debug.Print "run"
  87. Select Case LCase$(ModuleType)
  88.     Case m_MTStr_Script
  89.         If loadedBrowserCount > 0 Then
  90.             If Not mData_Script.LoadedScript Then
  91.                 Call LoadScriptFile2
  92.             End If
  93.             webbState(gActiveWebIndex).webForm.RunScript mData_Script.Script, mData_Script.Language, mData_Script.RunType
  94.         End If
  95.     Case m_MTStr_Exe
  96.         tParam = TranslateParam(mData_Exe.Param)
  97.         tPath = TranslatePath2(o_FileName)
  98.         
  99.         ShellExecute 0&, "open", tPath, _
  100.         tParam, tPath, SW_SHOW
  101.     Case m_MTStr_Com
  102.         Call Run_Com
  103.     Case m_MTStr_Dll
  104.         If loadedBrowserCount > 0 Then
  105.             Call RunDll(TranslatePath2(o_FileName), webbState(gActiveWebIndex).webForm.webMe, mData_Dll.message, 0, 0)
  106.         Else
  107.             Call RunDll(TranslatePath2(o_FileName), Nothing, mData_Dll.message, 0, 0)
  108.         End If
  109.     Case m_MTStr_Sendkey
  110.         SendKeys mData_Sendkey.Keydata
  111. End Select
  112. End Sub
  113. Private Sub Run_Com()
  114. Dim tObj As LEPluginLib.ILEpluginCmd
  115. Dim tDll As cCrDllObj
  116. On Error Resume Next
  117. Set tDll = New cCrDllObj
  118. tDll.IniClsId mData_Com.ClassID
  119. Set tObj = tDll.CreateMyDllObject(TranslatePath2(o_FileName))
  120. If tObj Is Nothing Then
  121.     Call MsgBox("some error", vbOKOnly Or vbExclamation)
  122. Else
  123.     If loadedBrowserCount > 0 Then
  124.         tObj.SetSite webbState(gActiveWebIndex).webForm.webMe, gOutInfo
  125.         tObj.RunCommand
  126.     Else
  127.         tObj.SetSite Nothing, gOutInfo
  128.         tObj.RunCommand
  129.     End If
  130.     Set tObj = Nothing
  131. End If
  132. 'On Error Resume Next
  133. 'Dim tObj As Object
  134. 'Err.Clear
  135. 'Set tObj = CreateObject(mData_Com.ObjectName)
  136. 'If Err.Number = 429 Then
  137. '    Call RegCom(TranslatePath2(o_FileName), 1)
  138. '    Set tObj = CreateObject(mData_Com.ObjectName)
  139. 'End If
  140. 'If tObj Is Nothing Then
  141. '    Call MsgBox("some error", vbOKOnly Or vbExclamation)
  142. 'Else
  143. '    If loadedBrowserCount > 0 Then
  144. '        tObj.Run webbState(gActiveWebIndex).webForm.webMe, gMainForm
  145. '    Else
  146. '        tObj.Run Nothing, gMainForm
  147. '    End If
  148. 'End If
  149. End Sub
  150. Private Function TranslatePath(vPath$) As String
  151. Dim tPath$
  152. Dim tSysDir$
  153.     tPath = vPath
  154.     tPath = Replace(tPath, "%app%", App.path, , , vbTextCompare)
  155.     tPath = Replace(tPath, "%windir%", Environ("windir"), , , vbTextCompare)
  156.     
  157.     If InStr(1, tPath, "%system%", vbTextCompare) > 0 Then
  158.         If IsWinNT() Then
  159.             tSysDir = Environ("windir") & "system32"
  160.         Else
  161.             tSysDir = Environ("windir") & "system"
  162.         End If
  163.         tPath = Replace(tPath, "%system%", tSysDir, , , vbTextCompare)
  164.     End If
  165.     
  166.     TranslatePath = tPath
  167.     
  168. End Function
  169. '用于有 . 的情况
  170. Private Function TranslatePath2(vPath$) As String
  171. TranslatePath2 = TranslatePath(Replace(vPath, ".", GetFileFolder(FileName) & ""))
  172. End Function
  173. Private Function TranslateParam(vParam$) As String
  174. Dim tParam$
  175.     tParam = vParam
  176.     If loadedBrowserCount > 0 Then
  177.         tParam = Replace(tParam, "%url%", webbState(gActiveWebIndex).webForm.GetWebUrl, , , vbTextCompare)
  178.         tParam = Replace(tParam, "%WebWinHwnd%", webbState(gActiveWebIndex).webForm.hWnd, , , vbTextCompare)
  179.     Else
  180.         tParam = Replace(tParam, "%url%", "", , , vbTextCompare)
  181.         tParam = Replace(tParam, "%WebWinHwnd%", "", , , vbTextCompare)
  182.     End If
  183. TranslateParam = tParam
  184. End Function
  185. Public Sub Reload()
  186. If FileExist(TranslatePath(FileName)) Then
  187.     If LCase$(GetExtendName(FileName)) = "ini" Then
  188.         Call ReadData
  189.     Else
  190.         IconFile = vbNullString
  191.         DirectExe = 1
  192.         ModuleType = m_MTStr_Exe
  193.         o_FileName = FileName
  194.         o_Title = vbNullString
  195.         mData_Exe.Param = Param
  196.     End If
  197. End If
  198. End Sub
  199. '---------------------------------------------------------------------------------------
  200. ' Procedure : ReadData
  201. ' DateTime  : 2005-5-28 18:47
  202. ' Author    : Lingll
  203. ' Purpose   : 读取插件详细数据
  204. '---------------------------------------------------------------------------------------
  205. Private Sub ReadData()
  206. Dim tIni As cINIFile
  207. Set tIni = New cINIFile
  208. tIni.IniFile = TranslatePath(FileName)
  209. If Trim(tIni.ReadKey("General", "Flag")) = LEPluginFlag Then
  210.     If LCase(Trim(tIni.ReadKey("General", "PluginType"))) = PluginTypeTag_Command Then
  211.         o_FileName = tIni.ReadKey("General", "FileName")
  212.         o_Title = tIni.ReadKey("General", "Title")
  213.         ModuleType = LCase$(Trim$(tIni.ReadKey("General", "ModuleType")))
  214.         IconFile = tIni.ReadKey("General", "IconFile")
  215.         
  216.         Select Case ModuleType
  217.             Case "script"
  218.                 Call LoadScript(tIni)
  219.             Case "exe"
  220.                 mData_Exe.Param = tIni.ReadKey(m_MTStr_Exe, "Param")
  221.             Case "com"
  222.                 mData_Com.ClassID = tIni.ReadKey(m_MTStr_Com, "ClassID")
  223.                 mData_Com.ObjectName = tIni.ReadKey(m_MTStr_Com, "ObjectName")
  224.             Case "dll"
  225.                 mData_Dll.message = tIni.ReadInt(m_MTStr_Dll, "Message", 0)
  226.             Case "sendkey"
  227.                 mData_Sendkey.Keydata = tIni.ReadSection(m_MTStr_Sendkey)
  228.         End Select
  229.     End If
  230. End If
  231. End Sub
  232. '读取脚本文件
  233. Private Sub LoadScript(vIni As cINIFile)
  234. Dim tFN&
  235. With vIni
  236.     mData_Script.Language = .ReadKey(m_MTStr_Script, "Language", "javascript")
  237.     mData_Script.LoadedScript = False
  238.     mData_Script.RunType = Val(.ReadKey(m_MTStr_Script, "RunType", "0"))
  239.     'mData_Script.LoadAtExec = Val(.ReadKey(Script, "LoadAtExec", "0"))
  240.     mData_Script.LoadAtExec = .ReadInt(m_MTStr_Script, "LoadAtExec", 0)
  241. End With
  242. If mData_Script.LoadAtExec <> 0 Then
  243.     tFN = FreeFile
  244.     Open TranslatePath2(o_FileName) For Binary As tFN
  245.         mData_Script.Script = StrConv(InputB(LOF(tFN), tFN), vbUnicode)
  246.     Close tFN
  247.     mData_Script.LoadedScript = True
  248. End If
  249. End Sub
  250. '运行时才加载脚本文件的sub
  251. Private Sub LoadScriptFile2()
  252. On Error GoTo due
  253. Dim tFN&, tPos&
  254. Dim tstr$
  255. tFN = FreeFile
  256. Open TranslatePath2(o_FileName) For Binary As tFN
  257.     mData_Script.Script = StrConv(InputB(LOF(tFN), tFN), vbUnicode)
  258. Close tFN
  259. mData_Script.LoadedScript = True
  260. Exit Sub
  261. due:
  262.     Reset
  263.     mData_Script.LoadedScript = False
  264.     mData_Script.Script = ""
  265.     ErrorLog.AddLog "cPluginData.loadscriptfile2" & vbTab & Err.Description
  266. End Sub
  267. Public Function GetModuleTypeIndex() As Long
  268. Select Case LCase$(ModuleType)
  269.     Case m_MTStr_Script
  270.         GetModuleTypeIndex = 0
  271.     Case m_MTStr_Exe
  272.         GetModuleTypeIndex = 1
  273.     Case m_MTStr_Com
  274.         GetModuleTypeIndex = 2
  275.     Case m_MTStr_Dll
  276.         GetModuleTypeIndex = 3
  277.     Case m_MTStr_Sendkey
  278.         GetModuleTypeIndex = 4
  279.     Case Else
  280.         GetModuleTypeIndex = 0
  281. End Select
  282. End Function
  283. Public Function Get_O_FileName() As String
  284. Get_O_FileName = TranslatePath2(o_FileName)
  285. End Function
  286. Public Function GetRealFileFolder() As String
  287. GetRealFileFolder = GetFileFolder(TranslatePath2(FileName))
  288. End Function