社区
Windows SDK/API
帖子详情
请教键盘钩子
ActiveXForm
2003-12-03 02:06:44
如何用 别的键或者键组合 来代替 Ctrl + C 和 Ctrl + V (也就是替换掉系统的复制粘贴键) , 谢谢
...全文
68
8
打赏
收藏
请教键盘钩子
如何用 别的键或者键组合 来代替 Ctrl + C 和 Ctrl + V (也就是替换掉系统的复制粘贴键) , 谢谢
复制链接
扫一扫
分享
转发到动态
举报
写回复
配置赞助广告
用AI写文章
8 条
回复
切换为时间正序
请发表友善的回复…
发表回复
打赏红包
GodBirdFlying
2004-03-25
打赏
举报
回复
学习顺便up
hohulove
2003-12-05
打赏
举报
回复
这样册系统全局热键就可以搞定以下是示例:
void __fastcall TForm1::FormCreate(TObject *Sender)
{
RegisterHotKey(Handle,GlobalAddAtom("F1")+0xC001,MOD_ALT,112);
RegisterHotKey(Handle,GlobalAddAtom("F2")+0xC002,MOD_ALT,113);
}
void __fastcall TForm1::AutoOpen(TMessage myopen)
{
//TODO: Add your source code here
if(myopen.LParamHi==112)
{
WinExec("E:\\Program Files\\Microsoft Visual Studio\\VB98\\VB6.EXE",SW_RESTORE);
}
}
ActiveXForm
2003-12-05
打赏
举报
回复
那要注册系统热键该怎么作 ? 我只作过窗体的热键
wjlsmail
2003-12-04
打赏
举报
回复
// 收邮件
wjlsmail
2003-12-04
打赏
举报
回复
都差不多, 有个问题,借小何宝地:)
要是人家屏蔽了 ClipBoard 有要怎么办呢 ?
yjy1001
2003-12-04
打赏
举报
回复
如果只是想替换 Ctrl + c 和Ctrl + v
向系统注册 热键就可以满足楼主的要求了
写钩子,太占系统资源了,不到非写不可的情况,不要写。
而且 注册了钩子后 ,不用的时候 应该 立即销毁钩子。
1楼的钩子应该是可以的。
如果 楼主使用的win2000以上的操作系统,可以向系统注册低阶键盘钩子,而不需要写DLL这么麻烦。
//---------------------------------------------------------------------------
#include <vcl.h>
#pragma hdrstop
#include "Unit1.h"
//---------------------------------------------------------------------------
#pragma package(smart_init)
#pragma resource "*.dfm"
TForm1 *Form1;
HHOOK OldHook;// 钩子 句柄
//键盘钩子 封锁 windows 热键
long CALLBACK KeyProc(int code, WPARAM wParam, LPARAM lParam)
{
KBDLLHOOKSTRUCT *pkbhs;
if (code < 0)
return CallNextHookEx(OldHook,
code, wParam, lParam);
pkbhs = (KBDLLHOOKSTRUCT*) lParam;
if(pkbhs->vkCode == 67 && GetAsyncKeyState(VK_CONTROL) < 0)
{
//ctrl +c 这里屏蔽掉ctrl+c
return 1;//return 1 屏蔽。 ctrl + v 一样的。
}
return CallNextHookEx(OldHook,
code, wParam, lParam);
}
//---------------------------------------------------------------------------
__fastcall TForm1::TForm1(TComponent* Owner)
: TForm(Owner)
{
//注册 钩子
OldHook = SetWindowsHookEx(
WH_KEYBOARD_LL, (HOOKPROC
)KeyProc, HInstance, 0);
}
//---------------------------------------------------------------------------
void __fastcall TForm1::FormDestroy(TObject *Sender)
{
// 销毁 钩子
UnhookWindowsHookEx(OldHook);
}
//---------------------------------------------------------------------------
需要win 2000以上的操作系统 才可以 注册WH_KEYBOARD_LL 低阶键盘钩子
否则需要写成DLL实现
叶子哟
2003-12-03
打赏
举报
回复
钩子就行
heng2003
2003-12-03
打赏
举报
回复
我试了用键盘钩子可以来代替
估计还有其他的方法,或是用系统热键,这个我没试过
代码如下:
// replacekey.dll
//---------------------------------------------------------------------------
#include <vcl.h>
#include <windows.h>
#pragma hdrstop
#pragma argsused
HHOOK OldHook=NULL;
HINSTANCE hInst=NULL;
long CALLBACK KeyProc(int code, WPARAM wParam, LPARAM lParam);
int WINAPI DllEntryPoint(HINSTANCE hinst, unsigned long reason, void* lpReserved)
{
if (reason==DLL_PROCESS_ATTACH){
hInst = hinst;
OldHook = SetWindowsHookEx(WH_KEYBOARD_LL,
(HOOKPROC)KeyProc, hInst, NULL);
}
else if(reason==DLL_PROCESS_DETACH)
if (OldHook)
UnhookWindowsHookEx(OldHook);
return 1;
}
long CALLBACK KeyProc(int code, WPARAM wParam, LPARAM lParam)
{
static bool lock = false;
KBDLLHOOKSTRUCT *key = (KBDLLHOOKSTRUCT*)lParam;
if(lock == false && key->vkCode == 67 && GetAsyncKeyState(VK_CONTROL)<0){
//ctrl +c //这里屏蔽掉ctrl+c 当lock = false 才屏蔽
return 1;
}
if(key->vkCode == 66 && GetAsyncKeyState(VK_CONTROL)<0){
//ctrl + b 模拟代替ctrl+c
lock = true; //关掉ctrl+c 的屏蔽标记
//模拟键盘事件
keybd_event(VK_CONTROL,0,0,0);
keybd_event(67,0,0,0);
keybd_event(67,0,KEYEVENTF_KEYUP,0);
keybd_event(VK_CONTROL,0,KEYEVENTF_KEYUP,0);
lock = false; //打开ctrl+c 的屏蔽标记
return 1;
}
return CallNextHookEx(OldHook,code,wParam,lParam);
}
//ctrl+ v 同理
关于
键盘
钩子
的问题,
请教
大家
关于
键盘
钩子
的问题,
请教
大家 Delphi / Windows SDK/APIhttp://www.delphi2007.net/DelphiAPI/html/delphi_20061122084602187.html function StartHookMouse:boolean; const WH_MOUSE_LL = 14; b...
全局
钩子
中回调函数无效的问题
经测试,安装
钩子
没出问题,但回调函数里的代码老是执行不了,先上QQ群问,又上论坛问,无果。后来想到了GG的代码搜索功能,一搜,才发现是回调函数的声明出错了!需要加“__declspec(dllexport)” //
钩子
过程__declspec(dllexport) LRESULT CALLBACK CBTProc(int nCode, WPARAM wParam, LPARAM lPara
获取
键盘
的按键(Hook)
下面这段程序是我从网上找到的,有几处不明白的地方,
请教
一下 function KeyboardHookHandler(iCode : Integer;WParam : WPARAM;lParam :LPARAM) : LRESULT ;stdcall ; export; const _KeyPressMask = $80000000 ; { 这里是定义了一个常量,我看了看,主要是
请教
!c#winform在1分钟内若无任何操作就弹出操作超时怎么实现?
请教
!有没有好的解决方案? 系统是自助机系统,不知道用
钩子
能不能监控到屏幕点击事件? 添加一个mousemove和keydown共同改变的一个变量,这两个事件一发生时便将这个变量重置。比如intx=0,添加个timer不停 x++,设置其interval=1000,然后mousemove和keydown一触发便使x=0;当x=60的时候弹出窗口就好。 你是想监控耗时操作吗?可以去我主...
c语言怎么写查表函数程序,程序里的
钩子
函数 谁能用c语言写一个
钩子
函数的例子...
1, 谁能用c语言写一个
钩子
函数的例子例子:HWND hWnd = NULL; //定义成全局变量HHOOK hKeyboard;HHOOK hMouse;LRESULT CALLBACK MouseProc( int nCode, WPARAM wParam, LPARAM lparam ) // 鼠标
钩子
函数{return 1; // 返回非零值表示已经对当前消息进行了处理,这样系统就不会再将...
Windows SDK/API
1,222
社区成员
8,135
社区内容
发帖
与我相关
我的任务
Windows SDK/API
C++ Builder Windows SDK/API
复制链接
扫一扫
分享
社区描述
C++ Builder Windows SDK/API
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章