关于热键执行代码的问题!

ocean9b 2009-11-09 10:13:49
这是写在模块里的.....
Option Explicit

Declare Function SetWindowLong Lib "user32" Alias "SetWindowLongA" (ByVal hwnd As Long, ByVal nIndex As Long, ByVal dwNewLong As Long) As Long
Declare Function GetWindowLong Lib "user32" Alias "GetWindowLongA" (ByVal hwnd As Long, ByVal nIndex As Long) As Long
Declare Function CallWindowProc Lib "user32" Alias "CallWindowProcA" (ByVal lpPrevWndFunc As Long, ByVal hwnd As Long, ByVal Msg As Long, ByVal wParam As Long, ByVal lParam As Long) As Long
Declare Function RegisterHotKey Lib "user32" (ByVal hwnd As Long, ByVal id As Long, ByVal fsModifiers As Long, ByVal vk As Long) As Long
Declare Function UnregisterHotKey Lib "user32" (ByVal hwnd As Long, ByVal id As Long) As Long

Public Const WM_HOTKEY = &H312
Public Const MOD_Alt = &H1
Public Const MOD_Ctrl = &H2
Public Const MOD_Shift = &H4
Public Const GWL_WNDPROC = (-4)

Public preWinProc As Long
Public Modifiers As Long, uVirtKey As Long, idHotKey As Long

Private Type taLong
ll As Long
End Type

Private Type t2Int
lWord As Integer
hWord As Integer
End Type

'热键调用程序
Public Function Wndproc(ByVal hwnd As Long, ByVal Msg As Long, ByVal wParam As Long, ByVal lParam As Long) As Long
If Msg = WM_HOTKEY Then
If wParam = idHotKey Then
Dim lp As taLong, i2 As t2Int
lp.ll = lParam
LSet i2 = lp
If (i2.lWord = Modifiers) And i2.hWord = uVirtKey Then
'热键热行代码
Call aa .......这里不行

End If
End If
End If
'如果不是热键信息则调用原来的程序
Wndproc = CallWindowProc(preWinProc, hwnd, Msg, wParam, lParam)
End Function


貌似不调用主窗体Form_main里的函数aa,请问怎么解决。
谢谢!!!
...全文
85 11 打赏 收藏 转发到动态 举报
写回复
用AI写文章
11 条回复
切换为时间正序
请发表友善的回复…
发表回复
嗷嗷叫的老马 2009-11-10
  • 打赏
  • 举报
回复
ocean9b 2009-11-09
  • 打赏
  • 举报
回复
call frm_main.aa 不行啊

调用不了!
嗷嗷叫的老马 2009-11-09
  • 打赏
  • 举报
回复


http://www.m5home.com/blog/article.asp?id=297

这里有个热键类,封装为事件了,直接在窗体里用WithEvents声明就行.
booksoon 2009-11-09
  • 打赏
  • 举报
回复
call frm_main.aa
ocean9b 2009-11-09
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 modest 的回复:]
Call Form.aa
[/Quote]

显示打不到方法!

我在Frm_main里有一个事件是调用函数aa的
Private Sub MT_set_Click()
Call aa
End Sub

如果有办法可以触发MT_set_Click这个事件也行!
迈克揉索芙特 2009-11-09
  • 打赏
  • 举报
回复
Call Form.aa
dingyanwei 2009-11-09
  • 打赏
  • 举报
回复
老马这个类真不错,省我老事了,呵呵,谢谢老马。
ocean9b 2009-11-09
  • 打赏
  • 举报
回复
可以了。
1。这个AA在窗体里面要以PUBLIC声明
2。call frm_main.aa在aa前要加上frm_main
嗷嗷叫的老马 2009-11-09
  • 打赏
  • 举报
回复
AA函数确实可以那样调用,但这样的话你工程的结构就不太好控制了啊,代码量一大你又不封装,会乱的.

另外,这个AA在窗体里面要以PUBLIC声明才可以调用.
ocean9b 2009-11-09
  • 打赏
  • 举报
回复
[Quote=引用 4 楼 myjian 的回复:]
http://www.m5home.com/blog/article.asp?id=297

这里有个热键类,封装为事件了,直接在窗体里用WithEvents声明就行.
[/Quote]

用这个类是没问题,但我想知道是不是不能这样调用。有什么办法可以解决??
还有能不能用发送一个MT_set_Click的消息来执行函数aa??
赵4老师 2009-11-09
  • 打赏
  • 举报
回复
AutoHotKey

7,762

社区成员

发帖
与我相关
我的任务
社区描述
VB 基础类
社区管理员
  • VB基础类社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧