上一篇:JavaScript与Java的区别 >>
按下某组键(HotKey)便执行某程式
使用registerhotkey的概念是,它会定义一组按键的组合,当使用者不管在哪个程式之中,按下window有注册的hotkey时,os会传送wm_hotkey 的讯息给待接收该讯息的window,而该window收到wm_hotkey时,便可知道有本身thread所定义的hotkey被按下,於是可以从wparam, lparam来得知是哪一组hotkey被按下。
registerhotkey(
byval hwnd as long , //接收hotkey的window
byval idhotkey as long, // identifier of hot key,range 0x0000 through 0xbfff
byval modifiers as long, // 定义alt shift control等的组合
byval uvirtkey as long // virtual-key code
)
wm_hotkey 叁数的定义
idhotkey = wparam; // identifier of hot key
modifiers = (uint) loword(lparam); // key-modifier flags
uvirtkey = (uint) hiword(lparam); // virtual-key code
所以了,除了设定registerhotkey外,另要使用subclassing的技巧才会得知hotkey被按下;最後,程式结束前要使用unregisterhotkey将hotkey的定义取消掉。
以下程式功能是:不管在哪个程式中,只要按下alt-shift-g 便执行notepad。
'以下在.basoption 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_control = &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
debug.print "hotkey shift-alt-g pressed "
shell "notepad", vbnormalfocus
end if
end if
end if
'将之送往原来的window procedure
wndproc = callwindowproc(prewinproc, hwnd, msg, wparam, lparam)
end function
'以下在 form
sub form_load()
dim ret as long
prewinproc = getwindowlong(me.hwnd, gwl_wndproc)
ret = setwindowlong(me.hwnd, gwl_wndproc, addressof wndproc)
idhotkey = 1 'in the range &h0000 through &hbfff
modifiers = mod_alt + mod_shift
uvirtkey = vbkeyg
ret = registerhotkey(me.hwnd, idhotkey, modifiers, uvirtkey)
end sub
private sub form_unload(cancel as integer)
dim ret as long
'取消message的截取,而使之又只送往原来的window procedure
ret = setwindowlong(me.hwnd, gwl_wndproc, prewinproc)
call unregisterhotkey(me.hwnd, uvirtkey)
end sub
()
下一篇:利用SQLEXEC突破网络妙管免费上网 >>
相关文章:
- · 一行代码崩溃IE
- · 脚本安全和利用
- · 亲手打造一个QQ恶作剧程序
- · CCIE:年薪翻了两倍
- · Linux认证基本知识介绍
- · 思科认证考生问答集
- · 微软认证考试的几种形式
- · 利用SSH从外网安全地访问PIX防火墙
- · 多网段环境下的Windows文件夹共享解决
- · 防火墙中使用Telnet、FTP、RealAudio
- · 网络经典命令行-网络安全工作者必杀技
- · Java 程序编码规范
- · FTP 鸡肉制作
- · 安全程序员必读书籍清单
- · 编辑web.config,保证ASP.NET的安全
- · 修复ADSL的Firmware之手记
- · Microsoft平台下的find在网络管理中的妙用
- · 利用组策略对象(GPOs)防止匿名登录
- · 删除系统顽固文件的十二招技巧
- · DoS攻击隐身于合法指令中 难以完全阻绝
- · 我能躲到哪里去?—无线定位技术
- · Windows“安全模式”的五项用途
- · ECHO命令的超详细使用
- · php注入专题
- · 对IPv6在NGI核心层和接入层部署的思考
- · IDS(入侵检测系统)术语
- · 如何用好双WAN路由器
- · 使用IP过滤,轻松管理网络
- · CHKDSK(磁盘检测)命令的运用
- · Linux下口令恢复任我行
- · 使用FlashFXP来提升权限
- · 部署防火墙策略的十六条守则
- · TopStyle Pro 使用技巧
- · 21分钟解决struts国际化和中文问题
- · WindowsNT/2K/XP/2K3系统实用工具集
- · TOPSEC网络安全体系平台
- · 巧用比较并合并文档 RPC服务启用的方法
- · Windows管道技术简述
