这个问题要完美解决最好用API,首先说快捷键部分,最好注册全局热键,这样不论你窗体是否具有焦点都可以随意隐藏显示
窗体的显示隐藏用SetWindowPos
注册热键用RegisterHotKey
单键的热键用GetAsyncKeyState
我做过个程序你可以参考
如有问题可以消息我
http://tieba.baidu.com/f?kz=346258333
此程序可以对任意窗口进行显示、隐藏、永在最上、关闭等操作
支持热键。任何状态下按小键盘区的"+","-","*"可以隐藏、关闭、显示所选窗口。
两种热键技术
组合热键可以使隐藏状态的本程序窗口显示(具有防热键冲突功能)
单键热键可以操作选中的任意窗口
系统通知栏图标
窗体模块
frmMain 程序主窗口
标准模块
APIStuff 管理系统通知栏图标(添加、删除、菜单管理)
CommDlgs 不使用控件的公用对话框
HotKey 组合热键管理
modMain 主模块
新建一个Form2,输入代码
Private Sub Form_KeyPress(KeyAscii As Integer)
If KeyAscii = 101 Then
Form1.Show
End If
If KeyAscii = 121 Then
Form1.Hide
End If
End Sub
然后运行Form2,再按键就可以了
你这是只针对当前焦点窗口的热键。。
如果Form1隐藏了,就等于失去焦点了。。
所以按热键无效的。
建议去找下写捕获键盘命令的代码。
添加一个计时器 Timer1
Option Explicit
Private Declare Function GetAsyncKeyState Lib "user32" (ByVal vKey As Long) As Long
Private Sub Form_Load()
Timer1.Interval = 10
Timer1.Enabled = True
End Sub
Private Sub Timer1_Timer()
'检查是否热键被按下
If GetAsyncKeyState(vbKeyY) Then Me.Hide
If GetAsyncKeyState(vbKeyE)Then Form1.Show
End Sub
隐藏之后,Form失去焦点,当然不会响应KeyPress事件。要首先获得焦点才行!