我現在需要用VB做一個軟體,功能是屏蔽輸入法的軟鍵盤(比如王碼五筆的軟鍵盤),各種方法都可以,只要用不了軟鍵盤就成(但輸入法可以照用) 該如何做,大神們給個思路吧。。。。


淚奔了 淚奔了
uj5u.com熱心網友回復:

這…………
目的是什么啊……
uj5u.com熱心網友回復:
目的說來話長,主要是給工廠控制機器的電腦用的,大概是防止生產線的操作員誤操作,總之能實作就OK啊,大神有木有啥辦法啊,思路也行啊,大方向也行啊uj5u.com熱心網友回復:
這個有點難度,要實作禁用,可能還真的不好辦。不知道你是想禁用所有程式的(也就是系統中運行的任意程式)輸入法軟鍵盤,還是只針對自己的程式?
如果是處理自己的程式,也許可以通過HOOK來解決(只要發現打開了軟鍵盤,立即發訊息關閉它)。
但要用這種方法來處理第三方程式,可能效果不太好。
uj5u.com熱心網友回復:
我想這樣,比如就拿王碼五筆來說, 我程式一直檢測王碼五筆行程出現沒有,如果出現了,干脆一直回圈發訊息來關閉軟體盤行嗎? 還有 我在網上查了幾個 關于輸入法的API ,不知道這幾個API 可以設定輸入法的取消軟體盤嗎?GetKeyboardLayoutList
ImmGetDescription
ImmIsIME
ActivateKeyboardLayout
GetKeyboardLayout
兄弟你看可以不?
萬分感謝
uj5u.com熱心網友回復:
是針對的第三方程式uj5u.com熱心網友回復:
也許換個思路,查找和關閉軟鍵盤的視窗更好。等它處理了按鍵發出鍵盤訊息的時候,你已經很難分辨它的來源。uj5u.com熱心網友回復:
找到一個比較簡單的方法來實作: 只要發現打開了軟鍵盤,就把它的視窗隱藏!(視窗被隱藏了,自然就無法操作軟體盤)
新建一個 標準EXE工程。
然后: 把 Form1移除,再添加一個標準模塊、一個類模塊(類名: claAtom)。
代碼如下:
' 標準模塊代碼:
Option Explicit
Private Declare Sub Sleep Lib "kernel32" (ByVal dwMilliseconds As Long)
Private Declare Function ShowWindow Lib "User32" (ByVal hWnd As Long, ByVal nCmd As Long) As Long
Private Declare Function GetKeyState Lib "User32" (ByVal nVirtKey As Long) As Integer
Private Declare Function FindWindowEx Lib "User32" Alias "FindWindowExW" ( _
ByVal hWnd1 As Long, ByVal hWnd2 As Long, _
ByVal lpsz1 As Long, ByVal lpsz2 As Long) As Long
Private Const ATOM_TEXT As String = "SoftKBD_Surveillant"
Private Const SOFTKBDCLASS As String = "SoftKBDClsC1"
Private Sub Main()
Dim objAtom As claAtom
Dim lpSKclass As Long
Dim lHWnd As Long
' 用全域原子實作單實體運行
Set objAtom = New claAtom
If (Not objAtom.getAtom(ATOM_TEXT)) Then Exit Sub
lpSKclass = StrPtr(SOFTKBDCLASS)
Do
lHWnd = FindWindowEx(0, 0, lpSKclass, 0)
Do
If (0 = lHWnd) Then
Exit Do
Else
Call ShowWindow(lHWnd, 0)
Exit Do
End If
lHWnd = FindWindowEx(0, lHWnd, lpSKclass, 0)
Loop
' 按 F12 結束程式(實際編譯exe時,你可以去掉)
If (&H8000 And GetKeyState(vbKeyF12)) Then Exit Do
DoEvents
Call Sleep(10) ' 可以用5到20ms 。時間太短沒必要,太長反應慢了。
Loop
End Sub
' = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = =
' 類模塊代碼: (注意類名: claAtom)
Option Explicit
' 利用“全域原子”防止程式重復運行
Private Declare Function GlobalAddAtom Lib "kernel32" Alias "GlobalAddAtomA" ( _
ByVal AtomName As String) As Integer
Private Declare Function GlobalFindAtom Lib "kernel32" Alias "GlobalFindAtomA" ( _
ByVal AtomName As String) As Integer
Private Declare Function GlobalDeleteAtom Lib "kernel32" (ByVal AtomName As Integer) As Integer
Private Atom As Integer
Public Function getAtom(AtomName As String) As Boolean
Atom = 0
If (GlobalFindAtom(AtomName) = 0) Then Atom = GlobalAddAtom(AtomName)
getAtom = Atom
End Function
Private Sub Class_Terminate()
If (Atom) Then Call GlobalDeleteAtom(Atom)
End Sub
轉載請註明出處,本文鏈接:https://www.uj5u.com/gongcheng/133242.html
標籤:VB基礎類
上一篇:VB6.0怎么讀取ISA板卡資料
