VB 让keyascii=112起作用

问题1:
Private Sub text1_KeyPress(KeyAscii As Integer)
If KeyAscii = 112 Then
c1 = Text2
Print c1
End If
End Sub
但运行后,在text1控件中按下 F1时,程序没有任何反应。
------------
问题2:
上述的代码如果能运行,也只能 当鼠标光标在Text1控件中才能运行,通过什么方法,能让 鼠标光标在网页等地方时,也能通过keyascii触发代码?

下列代码是设置全局热键的。
复制到Form里.

Public Const WM_HOTKEY = &H312
Public Const MOD_ALT = &H1
Public Const MOD_CONTROL = &H2
Public Const MOD_SHIFT = &H4
Public Const GWL_WNDPROC = (-4)

Public Declare Auto Function RegisterHotKey Lib "user32.dll" Alias _
"RegisterHotKey" (ByVal hwnd As IntPtr, ByVal id As Integer, ByVal fsModifiers As Integer, ByVal vk As Integer) As Boolean

Public Declare Auto Function UnRegisterHotKey Lib "user32.dll" Alias _
"UnregisterHotKey" (ByVal hwnd As IntPtr, ByVal id As Integer) As Boolean

Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
'注册全局热键
RegisterHotKey(Handle, 0, Nothing, Keys.F1)
End Sub

Private Sub Form1_FormClosed(ByVal sender As System.Object, ByVal e As System.Windows.Forms.FormClosedEventArgs) Handles MyBase.FormClosed
'注销全局热键
UnRegisterHotKey(Handle, 0)
UnRegisterHotKey(Handle, 1)
End Sub

Protected Overrides Sub WndProc(ByRef m As Message)
If m.Msg = WM_HOTKEY Then
MsgBox("在这里添加你要执行的代码", MsgBoxStyle.Information, "全局热键")
End If
MyBase.WndProc(m)
End Sub
温馨提示:答案为网友推荐,仅供参考
第1个回答  2012-02-04
用这个api函数,可以获取全局按键,无论在哪里按下按钮都可以获取到
Private Declare Function GetAsyncKeyState Lib "user32" (ByVal vKey As Long) As Integer

Private Sub Form_Load()
Timer1.Interval = 1000
End Sub

Private Sub Timer1_Timer()
If GetAsyncKeyState(vbkeyf1) = True Then MsgBox "按下f1"
End Sub
第2个回答  2012-02-15
F1不存在keyascii
改到keydown或者keyup事件里,使用keycode。keycode和keyascii是完全不同的两个东西

问题2
如果要在程序的任何地方起作用,你必须把代码放在form的keyup或者keydown里
然后,form的keypreview属性设置为true,这样的话,焦点不管在哪个控件,都会触发事件
才50分……忒少了
第3个回答  2012-02-04
F1是功能键,没有ASCII码,应当用keydown事件
Private Sub Text1_KeyDown(KeyCode As Integer, Shift As Integer)
If KeyCode = 112 Then
c1 = Text2
Print c1
End If
End Sub

至于你提的第二个问题,你需要设置一个系统级的全局热键,这个比较复杂,你可以上网找找资料
第4个回答  2012-02-04
当然没反应了,112 代码的是小写字母 p,你按 F1 怎么会有反应?
第5个回答  2012-02-14
也能通过
相似回答