vb-vs2012 热键无法正常注册

问题描述

vs2012 热键无法正常注册
Public Declare Function SetWindowLong Lib "user32" Alias "SetWindowLongA" (ByVal hWnd As Long, ByVal nIndex As Long, ByVal dwNewLong As DelegateWindowProc) As Long
Public 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
Public Delegate Function DelegateWndProc(ByVal hwnd As Long, ByVal iMsg As Long, ByVal wParam As Long, ByVal lParam As Long) As Long
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 = 1 Then      ..
            msgbox(“已注册”)
        End If
    End If
    '与form_load中的ADDRESSOF WNDPROC对应
    wndproc = CallWindowProc(preWinProc, hWnd, Msg, wParam, lParam)
End Function

SetWindowLong(Me.Handle, GWL_WNDPROC, AddressOf WndProc)
Public Declare Function SetWindowLong Lib "user32" Alias "SetWindowLongA" (ByVal hWnd As Long, ByVal nIndex As Long, ByVal dwNewLong As DelegateWindowProc) As Long

工具:vs2012
语言:vb
一直无法正常注册热键
1. dwNewLong 的数据类型改为Long出现以下错误,网上很多代码都是这样,不能正常编译
error:“AddressOf”表达式不能转换为“Long”,因为“Long”不是委托类型。

2.修改为ByVal dwNewLong As DelegateWindowProc后 则出现以下错误:
error::Module1::SetWindowLong”的调用导致堆栈不对称。原因可能是托管的 PInvoke 签名与非托管的目标签名不匹配。请检查 PInvoke 签名的调用约定和参数与非托管的目标签名是否匹配

3.function“wndproc”隐藏基 class“Form”中的可重写方法。若要重写基方法,必须将此方法声明为“Overrides”。
4.修改为 Public Overrides sub wndproc
error:sub“wndproc”不能声明为“Overrides”,因为它不重写基 class 中的 sub。

求修正错误,或可正确编译运行代码

时间: 2024-10-27 16:57:45

vb-vs2012 热键无法正常注册的相关文章

使用VB在应用程序中注册热键

程序 '窗体中Option Explicit Private Sub Form_Load()Dim ret As Long '记录原来的window程序地址 preWinProc = GetWindowLong(Me.hWnd, GWL_WNDPROC) '用自定义程序代替原来的window程序 ret = SetWindowLong(Me.hWnd, GWL_WNDPROC, AddressOf wndproc) idHotKey = 1 'in the range &h0000 throug

100分求助!vb.net关于WMI远程注册表报错问题

问题描述 DimconnectionAsNewConnectionOptionsconnection.Username="aaa"connection.Password="aaaaaaaaa"connection.Authority="ntlmdomain:domm"DimscopeAsNewManagementScope("\192.23.5.12rootDEFAULT",connection)scope.Connect()

利用VB.NET访问注册表

访问|注册表 利用VB.NET访问注册表 译者注:访问注册表的例子比较多,然而通过VB.NET访问注册表的例子并不多,本文翻译了一篇MSDN上的利用VB.NET存取注册表的例子,挺详细也挺全面的. ( http://msdn.microsoft.com/library/default.asp?url=/library/en-us/dv_vstechart/html/vbtchimpdragdrop.asp) Cat FrancisVisual Studio TeamMicrosoft Corpo

Windows热键注册原理

要像系统注册一个全局热键,需要用到RegisterHotKey,函数用法如下(MSDN):BOOLRegisterHotKey(HWNDhWnd,intid,UINTfsModifiers,UINTvk);函数功能:该函数定义一个系统范围的热键. 函数原型:BOOLRegisterHotKey(HWNDhWnd,intid,UINTfsModifiers,UINTvk): 参数: hWnd:接收热键产生WM_HOTKEY消息的窗口句柄.若该参数NULL,传递给调用线程的WM_HOTKEY消息必须

VS调用VB.NET函数连接SAP,无法创建ActiveX组件

问题描述 求助各位大神,我是用C#2012开发了一个软件,调用了一个使用VB.NET来连接SAP的函数,在本机上面测试的时候没有问题,放到Server2003服务器上面测试页没有问题,但是放到Server2008服务器上面却老是提示无法创建ActiveX组件.后来有放到装了VS2012开发软件的云服务器上面,也是Server2008服务器但是没有安装SAP,一样提示无法创建ActiveX组件.又因为我的电脑是双系统-(XP+Win7),后面我又在我的电脑上面的XP系统测试,也是无法创建Activ

用VB生成DLL封装ASP代码一个例子:连接access数据库等

access|封装|数据|数据库 封装为dll会带来很多的好处,主要包括只是产权的保护,以及效率和安全性能的提升.这个例子中被封装的dll文件可以隐藏access数据库的实际路径. VB生成的DLL封装ASP代码来连接数据库(Access). 本文用一个最简单的连接access数据库的例子来说明如何将asp代码封装为dll文件. 我们用vb,最常见的方式来封装asp代码. 我们需要封装的对象如下: 'Proconn.aspdim ProConnset ProConn=Server.CreateO

VB中定制DllRegisterServer、DllUnregisterServer

server VB中定制DllRegisterServer.DllUnregisterServer -阿鬼(heroyin) VB作为一种简单容易上手的语言,可以让开发者快速上手,开发速度快,效率高.但它过分的封装也给开发者带来诸多不便. 问题的由来最近本人在开发一个插件结构的项目中就遇到了一个麻烦,我的项目是采用COM架构,框架由DELPHI开发,插件为COM组件,插件可以由其他语言开发,当然也包括VB.每个插件必须注册为一个固定的组件类别(Categories).在其他语言如VC.DELPH

为winamp定做热键

前言: 本人喜欢把winamp设置在托盘区,不过winamp不提供热键呼出,而我用惯OICQ的热键呼出,所以,每次想换歌时要用鼠标点击总觉得不爽. 于是萌发了给它作个热键的想法,基本思想就是注册一个系统级热键当然热键不能直接注册在winamp上的,所以我把热键注册在一个对话框上,然后通过获得的winamp的句柄将winamp显示出来,并且是显示到最前方.而且对话框最小化时对它进行隐藏,这样不至于占用任务栏,也让人觉得热键就是winamp自己带的,对话框也同样用热键呼出. 示例程序运行效果图 具体

Win98注册表应用50例—注册表使用全攻略之十_注册表

Win98注册表应用300例-注册表使用全攻略之十 1.自动刷新 每次在窗口添加一个文件夹或删除一个对象后,须要按键对窗口 进行重新刷新,很麻烦.通过修改注册表可以达到自动刷新的目的. 点击HKEY_LOCAL_MACHINE\SYSTEM\CURRENTCONTRO LSET\CONTROL\UPDATE,修改 "UPDATEMODE"值,由"1"改为"0". 2.修改系统版权信息 点击HKEY_LOCAL_MACHINE\SOFTWARE\M