如何禁止其他进程窗口接收键盘消息?

CowWu 2003-08-20 06:18:24
如何禁止其他进程窗口接收键盘消息?
最好有实例!
我的email:mmwhw@sohu.com
cowly@parkway.com.cn
谢了
...全文
233 21 打赏 收藏 转发到动态 举报
写回复
用AI写文章
21 条回复
切换为时间正序
请发表友善的回复…
发表回复
fishboyzyf 2003-09-07
  • 打赏
  • 举报
回复
up
wuji10 2003-09-01
  • 打赏
  • 举报
回复
hHookMouse=SetWindowsHookEx(WH_MOUSE_LL,
MouseProc, //dll中鼠标处理函数,接收所有
鼠标消息在系统接收到之前
GetModuleHandle("YourHookDll.dll"),
0
);

//hHookMouse=(HOOKPROC)GetProcAddress(h_Instance,"LowLevelKeyboardProc");
hHookKeyboard=SetWindowsHookEx(WH_KEYBOARD_LL,
LowLevelKeyboardProc, ////dll中键盘处理函
数,接收所有键盘消息在系统接收到之前

GetModuleHandle("YourHookDll.dll"),
0
);
wuji10 2003-08-29
  • 打赏
  • 举报
回复
全局钩子能够捕捉到所有的键盘消息,当然就是在别的程序接收到他们之前了 。好像就是
Ctrl+Alt+Del比较麻烦点,别的都比较容易。
你只要调用这个全局钩子的dll就可以了。这样,就是你的程序能够在别的 程序接收到这些键盘消息之前接收到它。
你通过一个dll建立一个全局钩子,函数,然后通过重载捕获消息的函数。就能对你捕获到的 消息作处理了 。
最后调用这个 dll就是了 。
不知道这样说你能不能明白
wuji10 2003-08-29
  • 打赏
  • 举报
回复
用全局钩子,能捕捉到所有的所有的键盘消息,好象是Ctrl+Alt+Del键的消息捕捉有一定难度。别的完全可以捕捉到。而这当然是在你别的程序接收到这些消息之前。
这里只要你用你 希望接收到这些消息的 程序调用这个dll就可以了。
不知道这样说你是否能明白。
CowWu 2003-08-29
  • 打赏
  • 举报
回复
是不是安装了全局钩子,那系统中运行的程序都要加载全局钩子函数所在dll?如果是这样,那会损失系统的性能的。另外,我也不知道如何安装全局钩子函数,麻烦各位告诉我!
有没有方法只向给定的程序安装钩子函数?
谢谢
CowWu 2003-08-29
  • 打赏
  • 举报
回复
我在一个程序中安装了全局钩子函数,但如何让目标程序加载dll呢
shootingstars 2003-08-27
  • 打赏
  • 举报
回复
提供一个思路:(因为我也是刚刚接触钩子,所以可能理解存在错误)
首先你做的全局键盘钩子肯定是一个dll,这个dll实际运行的地址空间是应用程序的空间。所以假设你运行了三个程序:notepad,game,yourprogramm。这时这个dll应该被三次调用,并且这三个实例运行在不同的应用程序的地址空间。所以你因该只要在dll里判断这个dll的调用者就可以判断是否是yourprogramm了。
至于怎么找到这个调用者的句柄,等我找到了再告诉你。
--------------------------------------------------------
以上言论纯属一个初学者的理解,可能有不正确的地方请高手指教。
CowWu 2003-08-27
  • 打赏
  • 举报
回复
键盘钩子函数怎么判断消息是属于哪一个窗口的?
CowWu 2003-08-26
  • 打赏
  • 举报
回复
各位帮帮我把
cnhome 2003-08-25
  • 打赏
  • 举报
回复
up
CowWu 2003-08-25
  • 打赏
  • 举报
回复
各位有没有例子代码阿
heweixing_77 2003-08-21
  • 打赏
  • 举报
回复
同意 shootingstars(流星)

肯定要用全局钩子。
feeboby 2003-08-21
  • 打赏
  • 举报
回复
用钩子把所有的消息拦下来。
shootingstars 2003-08-21
  • 打赏
  • 举报
回复
做一个钩子的dll,设置全局的键盘钩子,在钩子函数中盘断当前窗口是否是自己的程序,如果是传送消息,如果不是拦截它。
Phourm 2003-08-21
  • 打赏
  • 举报
回复
用钩子,没得说!
balas 2003-08-21
  • 打赏
  • 举报
回复
PreTranslateMessage只能把发送到本进程的消息拦住,但是不能把其它进程的拦住,得做个钩子。
wangweintk 2003-08-21
  • 打赏
  • 举报
回复
做系统钩子,拦截其它应用程序的键盘消息。
flinming 2003-08-20
  • 打赏
  • 举报
回复
拦截窗体得PreTranslateMessage消息,比如下面一段代码只能输入0-9
BOOL CCsDlg::PreTranslateMessage(MSG* pMsg)
{
if(pMsg->hwnd==m_edit.m_hWnd)
{
if(pMsg->message==WM_KEYDOWN)
{
int a = pMsg->wParam;
CString b;
b.Format("%d",a);
//AfxMessageBox(b);
this->SetWindowText(b);
if((a<48&&a!=8&&a!=40&&a!=39&&a!=38&&a!=37)||(a>59&&a<96)||(a>105&&a!=187&&a!=189))
{
pMsg->wParam = 0;
}
}
}

return CDialog::PreTranslateMessage(pMsg);
}
bborn 2003-08-20
  • 打赏
  • 举报
回复
做个键盘钩子 判断一下

只给指定的窗口发送消息
mintwlf 2003-08-20
  • 打赏
  • 举报
回复
在映射键盘消息的时候,将return CView::OnKeyDown(...);等之类的语句换为return true;试试!
加载更多回复(1)

15,979

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC 界面
社区管理员
  • 界面
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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