Access911.net   |   a9BBS   |   OTaA System  
  搜索文章:  
Access911欢迎您光临  
   主页      上传      繁體版       论坛     
设为首页  |  加入收藏   
  
你现在的位置:文章索引 -> 文章分类 -> 宏  
 首页|  近日更新|  下载  |  文章索引  |  搜索|  术语|  承接工程|  
 
系统正在加载内容,请耐心等待...
 
 查询
 窗体
 报表
 
 
 VBA
 函数
 ADO/DAO/ADO.NET
 API
 ADP
 安全
 发布
 OA
 ASP/ASP.NET
 其他语言
 控件
 DELPHI
 C#/.Net
 本站
 其他
 小例程
 常用软件
 参考文档
 业主作品
 网友大作
 
 
友情链接
 access911.net
 
访问人次
 1702788
 
站长 E-Mail
 net911@sina.com
 access911@gmail.com
 
RSS 订阅

显示附加信息 >>>

如何禁用ctrl+c?如何定义一个我自己的快捷键?

作者:cg1  摘自:access911.net  :cg1  更新日期:2002-11-25  浏览人次:

 

问题:


1、如何禁用ctrl+c?
2、如何定义一个我自己的快捷键?

 

方法一:

写一个名为 AutoKeys 的宏
1、首先要创建一个名为AutoKeys 的宏。 
2、在“宏名”列中利用想使之无效的键的SendKeys 代码指定一个宏名。 
3、增加SendKeys操作并使“键击”参数保持为空。 
以后打开数据库时,自动执行AutoKeys 宏,只要数据库保持打开,AutoKeys宏将始终有效。 
举例来说:
使 F1 键无效,在“宏名”列中输入{F1},在“操作”列中选择 SendKeys ,并使 SendKeys 操作的“键击”参数为空即可。
使 Ctrl + F6 无效,方法相同,在“宏名”列中 输入^{F6}在“操作”列中选择 SendKeys ,并使 SendKeys 操作的“键击”参数为空即可。


那么问题2:如何定义一个我自己的快捷键? 如何解决哪?
对了,既然可以通过定义空的参数来使某个快捷键失效,当然可以通过定义有效的参数来完成特定的程序拉,这不就成了自定义快捷键了吗?

示例下载:http://access911.net/down/eg/sendkeys.rar
 (15KB)

注意:在 ACCESS 2003 版本以前,“ALT+某个键”的组合键是无法定义的,因此用 AutoKeys 无法禁用或者设定含有alt键的全局组合键,目前还未找到有效的方法可以代替。
在 ACCESS 2007 中虽然已经定义了 % 字符用来实现 ALT 组合键,但是类似 ALT+F1 之类的定义(%{F1})仍旧被视为语法错误,无法实现。

有人还问ACCESS2007下为什么宏操作里面没有 SendKeys 操作。在宏设计视图下:菜单 -> 设计 -> 显示所有操作 即可。


 


参考::

以下为 MS 帮助

将操作或操作集指派给某个键
可以创建一个 AutoKeys 宏组,将一个操作或一组操作指派给某个特定的键或组合键。这样,当按下指定的键或组合键时,Microsoft Access 就会执行相应的操作。如果指派给某个操作的组合键已经由 Access 使用(例如,Ctrl+C 是“复制”的组合键),则新指派给该组合键的操作将取代 Access 的键分配。 

在“数据库”窗口中,单击“对象”下的“宏”  。 
单击“新建”。 
单击工具栏上的“宏名”  。 
在“宏名”列中键入要为一个操作或一组操作指派的键或组合键。 
AutoKeys 组合键的语法

下表显示可以用来在 AutoKeys 宏组中指派键的组合键。这些组合键是用于 Microsoft Visual Basic 中的 SendKeys 语句的语法的子集。

SendKeys 语法 键组合 
^A 或 ^4 Ctrl+A 或 Ctrl+4 
{F1} F1 
^{F1} Ctrl+F1 
+{F1} Shift+F1 
{INSERT} Ins 
^{INSERT} Ctrl+Ins  
+{INSERT} Shift+Ins 
{DELETE} 或 {DEL} Del 
^{DELETE} 或 ^{DEL} Ctrl+Del 
+{DELETE} 或 +{DEL} Shift+Del 


添加需要键或组合键执行的单个操作或一组操作。例如,添加一个 RunMacro 操作,使得在按下 Ctrl+P 时执行 Print Current Record 宏。 
 

重复第 4 步和第 5 步以进行其他键的指派。 
以 AutoKeys 为名称保存宏组。 
在保存宏组后,每次打开数据库时,新的键分配就会生效。

 


方法二:


下面提供一个用api定义热键的方法,稍一修改让执行的代码为空,就可以达到使某个快捷键失效的目的:

《如何为你的应用程序设置热键?》
启动工程后,在你的工程中添加一个标准模块,然后将下面的代码粘贴到模块的声明段中。

Option Explicit

Declare Function SendMessage Lib "user32" _
Alias "SendMessageA" (ByVal hwnd As Long, _
ByVal wMsg As Long, ByVal wParam As Long, _
lParam As Long) As Long

Declare Function DefWindowProc Lib "user32" _
Alias "DefWindowProcA" (ByVal hwnd As Long, _
ByVal wMsg As Long, ByVal wParam As Long, _
ByVal lParam As Long) As Long

Public Const WM_SETHOTKEY = &H32
Public Const WM_SHOWWINDOW = &H18
Public Const HK_SHIFTA = &H141 'Shift + A
Public Const HK_SHIFTB = &H142 'Shift * B
Public Const HK_CONTROLA = &H241 'Control + A
Public Const HK_ALTZ = &H45A 



请注意组合键的值必须以低/高位字节的格式进行声明。也就是说是一个十六进制的数字。后两位是低端字节,如41=a;前两位是高端字节,如01=1=shift。

在窗体的Load事件中加入下面的代码:

Private Sub Form_Load()


Dim erg As Long
Me.WindowState = vbMinimized
'让windows知道你想要的热键。
erg = SendMessage(Me.hwnd, WM_SETHOTKEY,HK_ALTZ, 0)
'检查函数是否执行成功
If erg <> 1 Then
MsgBox "You need another hotkey", vbOKOnly,"Error"
End If
'告诉windows热键按下后做什么--显示窗口
erg = DefWindowProc(Me.hwnd, WM_SHOWWINDOW,0, 0)

End Sub


按F5运行程序后,再按下ALT+Z就会看到结果了。

 


 

 
相关文章
     没有手动相关文章
     Linq中使用C#自定义函数生成的新字段不支持where和排序
     在 windows XP | 2003 中如何自定义纸张大小?
     Access不编程生成菜单,自定义菜单如何调用自定义过程?
 
评论
     查看或发表更多的评论,请单击这里。
 
 
 
 
 
   
  Access911.net   |   a9BBS   |   OTaA System   |
建站日期:2000年4月2日  |  设计施工:陈格 ( access911 & cg1 )
 Copyright © 2000 - 2003 COMET, 陈格 保留所有权利