Form1.frm
上传用户:qiandli
上传日期:2021-02-22
资源大小:103k
文件大小:8k
源码类别:

输入法编程

开发平台:

Visual Basic

  1. VERSION 5.00
  2. Begin VB.Form Form1 
  3.    Caption         =   "利用输入法向进程注入DLL"
  4.    ClientHeight    =   5220
  5.    ClientLeft      =   60
  6.    ClientTop       =   450
  7.    ClientWidth     =   6840
  8.    LinkTopic       =   "Form1"
  9.    ScaleHeight     =   5220
  10.    ScaleWidth      =   6840
  11.    StartUpPosition =   3  '窗口缺省
  12.    Begin VB.TextBox Text6 
  13.       Height          =   270
  14.       Left            =   5520
  15.       TabIndex        =   17
  16.       Text            =   "0"
  17.       Top             =   2680
  18.       Width           =   375
  19.    End
  20.    Begin VB.CommandButton Command4 
  21.       Caption         =   "卸载已安装的服务输入法"
  22.       Height          =   375
  23.       Left            =   2880
  24.       TabIndex        =   15
  25.       Top             =   4680
  26.       Width           =   2295
  27.    End
  28.    Begin VB.TextBox Text5 
  29.       Height          =   270
  30.       Left            =   4680
  31.       TabIndex        =   13
  32.       Text            =   "0"
  33.       Top             =   2400
  34.       Width           =   375
  35.    End
  36.    Begin VB.CommandButton Command3 
  37.       Caption         =   "停止继续注入"
  38.       Height          =   375
  39.       Left            =   240
  40.       TabIndex        =   11
  41.       Top             =   4680
  42.       Width           =   1935
  43.    End
  44.    Begin VB.TextBox Text4 
  45.       Height          =   270
  46.       Left            =   6000
  47.       TabIndex        =   10
  48.       Text            =   "0"
  49.       Top             =   2160
  50.       Width           =   495
  51.    End
  52.    Begin VB.TextBox Text3 
  53.       Height          =   270
  54.       Left            =   6000
  55.       TabIndex        =   8
  56.       Text            =   "0"
  57.       Top             =   1680
  58.       Width           =   495
  59.    End
  60.    Begin VB.TextBox Text2 
  61.       Height          =   270
  62.       Left            =   6000
  63.       TabIndex        =   6
  64.       Text            =   "0"
  65.       Top             =   1275
  66.       Width           =   495
  67.    End
  68.    Begin VB.TextBox Text1 
  69.       Height          =   270
  70.       Left            =   1800
  71.       TabIndex        =   3
  72.       Text            =   "hxwdllwx.dll"
  73.       Top             =   840
  74.       Width           =   4695
  75.    End
  76.    Begin VB.CommandButton Command1 
  77.       Caption         =   "第一步:指定要注入的DLL及其回调函数参数"
  78.       Height          =   495
  79.       Left            =   240
  80.       TabIndex        =   1
  81.       Top             =   240
  82.       Width           =   3975
  83.    End
  84.    Begin VB.CommandButton Command2 
  85.       Caption         =   "第二步:安装服务输入法并注入指定DLL"
  86.       Height          =   495
  87.       Left            =   240
  88.       TabIndex        =   0
  89.       Top             =   3480
  90.       Width           =   4095
  91.    End
  92.    Begin VB.Label Label8 
  93.       Caption         =   "当切换到目标输入法时自动切换到下一个输入法(0-否,1-是):"
  94.       Height          =   255
  95.       Left            =   240
  96.       TabIndex        =   16
  97.       Top             =   2760
  98.       Width           =   5295
  99.    End
  100.    Begin VB.Label Label7 
  101.       Caption         =   "后续操作(可选):"
  102.       Height          =   255
  103.       Left            =   240
  104.       TabIndex        =   14
  105.       Top             =   4320
  106.       Width           =   3495
  107.    End
  108.    Begin VB.Label Label6 
  109.       Caption         =   "输入法退出时是否同时卸载注入的DLL(0-是,1-否):"
  110.       Height          =   255
  111.       Left            =   240
  112.       TabIndex        =   12
  113.       Top             =   2450
  114.       Width           =   4455
  115.    End
  116.    Begin VB.Label Label5 
  117.       Caption         =   "参数3:"
  118.       ForeColor       =   &H00FF0000&
  119.       Height          =   255
  120.       Left            =   5280
  121.       TabIndex        =   9
  122.       Top             =   2205
  123.       Width           =   735
  124.    End
  125.    Begin VB.Label Label4 
  126.       Caption         =   "参数2:"
  127.       ForeColor       =   &H00FF0000&
  128.       Height          =   255
  129.       Left            =   5280
  130.       TabIndex        =   7
  131.       Top             =   1725
  132.       Width           =   735
  133.    End
  134.    Begin VB.Label Label3 
  135.       Caption         =   "参数1:"
  136.       ForeColor       =   &H00FF0000&
  137.       Height          =   255
  138.       Left            =   5280
  139.       TabIndex        =   5
  140.       Top             =   1320
  141.       Width           =   735
  142.    End
  143.    Begin VB.Label Label2 
  144.       Caption         =   $"Form1.frx":0000
  145.       Height          =   975
  146.       Left            =   240
  147.       TabIndex        =   4
  148.       Top             =   1200
  149.       Width           =   4935
  150.    End
  151.    Begin VB.Label Label1 
  152.       Caption         =   "DLL名称及路径:"
  153.       Height          =   255
  154.       Left            =   240
  155.       TabIndex        =   2
  156.       Top             =   840
  157.       Width           =   1455
  158.    End
  159. End
  160. Attribute VB_Name = "Form1"
  161. Attribute VB_GlobalNameSpace = False
  162. Attribute VB_Creatable = False
  163. Attribute VB_PredeclaredId = True
  164. Attribute VB_Exposed = False
  165. Private Sub Command1_Click()
  166. If Text1.Text = "" Then
  167.     MsgBox "请输入DLL文件名!"
  168.     Text1.SetFocus
  169.     Exit Sub
  170. End If
  171. MsgBox "配置完毕!"
  172. End Sub
  173. Private Sub Command2_Click()
  174. On Error Resume Next
  175. Dim retV As Long
  176. retV = MSetUpIME(GImeFileName)   '安装指定的输入法
  177. If retV = 0 Then
  178.     retV = MImeFindByName(GImeFileName)   '如果安装失败,查询该输入法是否已经安装
  179. End If
  180. If retV <> 0 Then ImeHKL = retV   '保存输入法句柄到全局变量
  181. If retV <> 0 Then
  182.     '如果安装成功,则将此输入法设置为默认输入法,让程序一打开就加载
  183.     ImeHKLString = MGetIMEHwndString(retV)   '取得输入法的句柄字符串
  184.     If ImeHKLString <> "" Then MSetIMEIntoFirst ImeHKLString    '如果安装成功,则将指定输入法移动到输入法列表的第一项
  185.     MSetIMEIsDefInput retV   '将指定输入法设置为系统默认输入法,应用程序一打开就加载
  186. End If
  187. If Dir(GSystemPath & GImeFileName & ".ime") <> "" Then
  188. ' 如果输入法被安装到系统目录,则尝试将其初始化
  189.     IMESetPubString Text1.Text, Val(Text5.Text), Val(Text6.Text), Val(Text2.Text), Val(Text3.Text), Val(Text4.Text)
  190. End If
  191. Dim hIme As Long
  192. If retV <> 0 Then
  193.     '如果安装成功,则在所有已经运行的程序中激活此输入法。这样可实现向所有窗口同时注入目标DLL
  194.     MActiveIMEForWindows retV, 1   '第一个参数为输入法句柄。第二个参数为激活强度,0-只尝试在顶级窗口中激活,1-在所有窗口中激活
  195. Else
  196.     hIme = MImeFindByName(GImeFileName)
  197.     If hIme <> 0 Then MActiveIMEForWindows hIme, 1
  198. End If
  199. If retV = 0 Then
  200.     MsgBox "抱歉,输入法安装失败。您可能没有管理员权限,或者该输入法服务已经安装。", vbCritical
  201. Else
  202.     MsgBox "输入法宿主已成功安装,指定DLL已开始尝试注入所有窗口程序。" & vbCrLf & "输入法句柄是:" & retV, vbExclamation
  203. End If
  204. End Sub
  205. Private Sub Command3_Click()
  206. On Error Resume Next
  207. If Dir(GSystemPath & "imedllhost09.ime") <> "" Then
  208. ' 清空输入法配置,停止继续注入
  209.     IMEClearPubString
  210. End If
  211. End Sub
  212. Private Sub Command4_Click()
  213. Dim retV As Long
  214. MQuitIMEIsDefInput GSysDefIme    '首先还原系统默认的键盘布局
  215. MActiveIMEForWindows GSysDefIme, 0  '将所有顶级窗口重设为默认输入法
  216. If ImeHKL <> 0 Then
  217.     retV = MUnLoadIMEByHKL(ImeHKL)
  218.     If retV = 0 Then
  219.         MsgBox "服务输入法卸载失败。可能该输入法正在使用且被锁定。", vbCritical
  220.     Else
  221.         MsgBox "服务输入法已成功卸载。", vbExclamation
  222.     End If
  223. Else
  224.     retV = MsgBox("服务输入法可能不是本次运行时安装的。是否要遍历系统所有的输入法并尝试卸载名称为“Windows标准输入法扩展服务”的输入法?", vbExclamation Or vbYesNo Or vbDefaultButton1)
  225.     If retV = vbYes Then
  226.         retV = MUnLoadIMEByName(GImeFileName)   '尝试通过文件名卸载输入法
  227.         If retV = 0 Then
  228.             MsgBox "服务输入法卸载失败。可能该输入法正在使用且被锁定,或该输入法不存在", vbCritical
  229.         Else
  230.             MsgBox "服务输入法已成功卸载。", vbExclamation
  231.         End If
  232.     End If
  233. End If
  234. If ImeHKLString <> "" Then
  235.     MDeleteRegIme ImeHKLString
  236. End If
  237. End Sub
  238. Private Sub Form_Load()
  239. ' ---------获得系统路径和当前路径------
  240. GSystemPath = Environ("windir")
  241. If Right(GSystemPath, 1) <> "" Then GSystemPath = GSystemPath & ""
  242. GSystemPath = GSystemPath & "system32"
  243. If Dir(GSystemPath) = "" Then GSystemPath = Environ("windir") & "system"
  244. GPathStr = App.Path
  245. If Right(GPathStr, 1) <> "" Then GPathStr = GPathStr & ""
  246. ' -----------------------------------
  247. SystemParametersInfo SPI_GETDEFAULTINPUTLANG, 0, GSysDefIme, 0 '得到系统默认的输入法的句柄,用于退出时还原
  248. ' -----------------------------------
  249. GImeFileName = "imedllhost09"    '设置输入法文件名,不含扩展名
  250. Text1.Text = GPathStr & "hxwdllwx.dll"
  251. End Sub