VB关闭其他进程的输入法
2016-12-19 17:15
393 查看
http://files.cnblogs.com/files/liuzhaoyzz/%E5%85%B3%E9%97%AD%E5%85%B6%E4%BB%96%E8%BF%9B%E7%A8%8B%E8%BE%93%E5%85%A5%E6%B3%95IME.rar
新建上面的几个按钮和list,打开记事本或者win32pad,单击向记事本发送消息,程序会按ctrl+空格关闭中文输入法,并发送aaa到记事本。只适用于前台进程。
Private Declare Function FindWindow Lib "user32" Alias "FindWindowA" (ByVal lpClassName As String, ByVal lpWindowName As String) As Long
Private Declare Function FindWindowEx Lib "user32" Alias "FindWindowExA" (ByVal hWnd1 As Long, ByVal hWnd2 As Long, ByVal lpsz1 As String, ByVal lpsz2 As String) As Long
Private Declare Function SetForegroundWindow Lib "user32" (ByVal hwnd As Long) As Long
Private Declare Function PostMessage Lib "user32" Alias "PostMessageA" (ByVal hwnd As Long, ByVal wMsg As Long, ByVal wParam As Long, ByVal lParam As Long) As Long
Private Declare Function SendMessage Lib "user32" Alias "SendMessageA" (ByVal hwnd As Long, ByVal wMsg As Long, ByVal wParam As Long, lParam As Any) As Long
Private Const WM_MOUSEACTIVATE = &H21
'以下几个API用于关闭前台进程输入法:
'-------------------------------------------------------------------------------------------------------
Private Declare Sub Sleep Lib "kernel32" (ByVal dwMilliseconds As Long)
Private Declare Function GetCurrentThread Lib "kernel32" () As Long
Private Declare Function GetForegroundWindow Lib "user32" () As Long
Private Declare Function GetWindowText Lib "user32" Alias "GetWindowTextA" (ByVal hwnd As Long, ByVal lpString As String, ByVal cch As Long) As Long
Private Declare Function GetWindowThreadProcessId Lib "user32" (ByVal hwnd As Long, lpdwProcessId As Long) As Long
Private Declare Function GetKeyboardLayout Lib "user32" (ByVal dwLayout As Long) As Long
Private Declare Function ImmIsIME Lib "imm32.dll" (ByVal hkl As Long) As Long
Private Declare Function ImmGetDescription Lib "imm32.dll" Alias "ImmGetDescriptionA" (ByVal hkl As Long, ByVal lpsz As String, ByVal ubuflen As Long) As Long
'-------------------------------------------------------------------------------------------------------
Private Sub Command1_Click()
'查找记事本句柄
Dim dHwnd As Long
Dim tHwnd As Long
dHwnd = FindWindow("Notepad", vbNullString)
If dHwnd > 0 Then
tHwnd = FindWindowEx(dHwnd, ByVal 0&, "Edit", vbNullString)
End If
SetForegroundWindow tHwnd
SendMessage tHwnd, 33, 0, 0
Sleep 2000 '延迟2秒确保窗口带到前台
'以下代码把前台进程的输入法关闭:
'-------------------------------------------------------------------------------------------------------
Dim hwnd As Long
Dim hCurThread As Long
Dim sCaption As String
Dim sBuffer As String
Dim hCurKBDLayout As Long
hwnd = GetForegroundWindow
sCaption = Space(255)
GetWindowText hwnd, sCaption, 255
If InStr(sCaption, Chr(0)) Then
sCaption = Left(sCaption, InStr(sCaption, Chr(0)) - 1)
End If
hCurThread = GetWindowThreadProcessId(hwnd, ByVal 0&)
hCurKBDLayout = GetKeyboardLayout(hCurThread)
If ImmIsIME(hCurKBDLayout) = 1 Then
sBuffer = Space(255)
RetCount = ImmGetDescription(ByVal hCurKBDLayout, sBuffer, 255)
sBuffer = Left(sBuffer, InStr(sBuffer, Chr(0)) - 1)
Else
sBuffer = "English(American)"
End If
List1.AddItem "当前窗口标题:" & sCaption
List1.AddItem " 当前输入法: " & sBuffer
If sBuffer <> "English(American)" Then SendKeys "^ "
Sleep 1000 '延迟1秒确保ctrl+空格生效
'-------------------------------------------------------------------------------------------------------
SendKeys "aaa"
' MsgBox pwszKLID
End Sub
Private Sub Command2_Click()
'查找win32pad句柄
Dim dHwnd As Long
Dim tHwnd As Long
dHwnd = FindWindow("win32padClass", vbNullString)
If dHwnd > 0 Then
tHwnd = FindWindowEx(dHwnd, ByVal 0&, "RichEdit20A", vbNullString)
End If
SetForegroundWindow tHwnd '把父窗体带到前台
SendMessage tHwnd, 33, 0, 0 '把子窗体带到前台
Sleep 2000 '延迟2秒确保窗口带到前台
'以下代码把前台进程的输入法关闭:
'-------------------------------------------------------------------------------------------------------
Dim hwnd As Long
Dim hCurThread As Long
Dim sCaption As String
Dim sBuffer As String
Dim hCurKBDLayout As Long
hwnd = GetForegroundWindow
sCaption = Space(255)
GetWindowText hwnd, sCaption, 255
If InStr(sCaption, Chr(0)) Then
sCaption = Left(sCaption, InStr(sCaption, Chr(0)) - 1)
End If
hCurThread = GetWindowThreadProcessId(hwnd, ByVal 0&)
hCurKBDLayout = GetKeyboardLayout(hCurThread)
If ImmIsIME(hCurKBDLayout) = 1 Then
sBuffer = Space(255)
RetCount = ImmGetDescription(ByVal hCurKBDLayout, sBuffer, 255)
sBuffer = Left(sBuffer, InStr(sBuffer, Chr(0)) - 1)
Else
sBuffer = "English(American)"
End If
List1.AddItem "当前窗口标题:" & sCaption
List1.AddItem " 当前输入法: " & sBuffer
If sBuffer <> "English(American)" Then SendKeys "^ "
Sleep 1000 '延迟1秒确保ctrl+空格生效
'-------------------------------------------------------------------------------------------------------
SendKeys "aaa"
End Sub
Private Sub Command3_Click()
End
End Sub
相关文章推荐
- C# 关闭其他程序窗口、进程
- 关于调用TerminateProcess关闭其他进程的权限问题
- VB之操作excel后不能关闭excel进程的原因及解决方法
- C++ 关闭其他进程
- c# 关闭其他程序窗口/进程
- 用VB 关闭其他应用程序
- vb 进程控制 查询 关闭
- vb.net中使用wmi关闭远程计算机上的进程
- C# 关闭其他程序窗口、进程
- VB.NET 调用Excel 不能关闭 Excel.exe 进程的问题
- VB.NET 调用Excel 不能关闭 Excel.exe 进程的问题
- MFC关闭其他进程
- vb.net中使用wmi关闭远程计算机上的进程
- VB:主窗口关闭,进程不一定关闭
- vb程序“关闭”时内存进程不能关闭
- vb.net 打开EXCEL ,关闭程序后,EXCEL进程仍然存在的问题
- C#实现关闭其他程序窗口或进程代码分享
- vb 已经关闭进程的自动开启
- VB.Net检查进程是否存在及关闭进程
- c++ 进程_调用其他程序,关闭其他程序