能力值:
( LV5,RANK:60 )
2 楼
没人看。我闷。
能力值:
( LV8,RANK:130 )
3 楼
f2用lowlevelkeyboardhook
那个监视进程切换用RegisterShellHookWindow
能力值:
( LV5,RANK:60 )
4 楼
f2是什么意思?
lowlevelkeyboardhook这个是低级的键盘钩子,RegisterShellHookWindow这个什么用?
貌视不需要dll么?
能力值:
( LV8,RANK:130 )
5 楼
f2键。。。。
RegisterShellHookWindow注册一个wh_shell钩子(严格来说不算)
这样做不需要dll可以监视到当前窗口的切换。
然后发生窗口切换后就GetForegroundWindow 判断到底还屏蔽鼠标与否
能力值:
( LV5,RANK:60 )
6 楼
我觉的用DLL就是要用全局钩子了,如果不用的话。
只能算是局部钩子。
能力值:
( LV5,RANK:60 )
7 楼
#include "windows.h"
#include "winuser.h"
HHOOK M_hwnd=NULL;
HHOOK K_hwnd=NULL;
HWND G_hwnd=NULL;
LRESULT CALLBACK MouseProc(
int nCode, // hook code
WPARAM wParam, // message identifier
LPARAM lParam // mouse coordinates
)
{
return 1;
}
LRESULT CALLBACK KeyboardProc(
int code, // hook code
WPARAM wParam, // virtual-key code
LPARAM lParam // keystroke-message information
)
{
switch(wParam)
{
case VK_F2:
M_hwnd=SetWindowsHookEx(WH_MOUSE,MouseProc,GetModuleHandle("CSHOOK"),0);
break;
case VK_F4:
// MessageBox(0, "It worked!",
// "This messagebox brought to you using J/Direct", 0);
UnhookWindowsHookEx(M_hwnd);
//return 0;
break;
}
return CallNextHookEx(K_hwnd,code,wParam,lParam);
}
void SetHook(HWND hwnd)
{
G_hwnd=hwnd;
K_hwnd=SetWindowsHookEx(WH_KEYBOARD,KeyboardProc,GetModuleHandle("CSHOOK"),0);
}
这是一个dll的代码
我想在键盘钩子里被相应鼠标钩子的加载与卸载。
我点了f2后可以加载。
但是我点了f4确没有被卸载。仍然不好使~
只有来到这里求大虾帮忙。
能力值:
( LV5,RANK:60 )
8 楼
代码到底哪里错了呢?
能力值:
( LV12,RANK:1010 )
9 楼
#pragma data_seg ("Shared") ... #pragma data_seg () #pragma comment (linker,"/section:Shared,rws")
DllMain也没有。。。
能力值:
(RANK:1010 )
10 楼
你没有判断按键的状态,
按下F2键,SetWindowsHookEx执行两次,而第二次是失败的
所以F2后的M_hwnd=NULL
所以关闭的时候就相当于UnhookWindowsHookEx(NULL);
通过lParam的最高位来判断按键状态
Specifies the transition state. The value is 0 if the key is being pressed and 1 if it is being released.
还有就是3楼所提到的问题
另外,把m_hwnd放到共享段
能力值:
(RANK:1010 )
11 楼
这里先提醒一下,请不要重复发贴!
能力值:
( LV5,RANK:60 )
12 楼
LRESULT CALLBACK KeyboardProc(
int code, // hook code
WPARAM wParam, // virtual-key code
LPARAM lParam // keystroke-message information
)
{
if (code = HC_ACTION )
{
switch(wParam)
{
case VK_F2:
// MessageBox(0, "It worked!",
// "aa", 0);
if((lParam & 0xA0000000)==1)
{
M_hwnd=SetWindowsHookEx(WH_MOUSE,MouseProc,GetModuleHandle("CSHOOK"),0);
break;
}
case VK_F4:
// MessageBox(0, "It worked!",
// "This messagebox brought to you using J/Direct", 0);
UnHook();
//return 0;
break;
}
}
return CallNextHookEx(K_hwnd,code,wParam,lParam);
}
这是我的代码。怎么改呢?
郁闷死我 。
请斑竹帮忙~!
能力值:
( LV5,RANK:60 )
13 楼
斑竹大大。炉子。帮我修改一下吧。很迷惑我。
能力值:
(RANK:1010 )
14 楼
只处理键盘按下情况
if ( lParam > 0 )
{
switch ( wParam )
{
//……
}
}
能力值:
( LV5,RANK:60 )
15 楼
谢谢你,我已经搞定了。
为了其他人也犯此错误。我写上代码
LRESULT CALLBACK KeyboardProc(
int code, // hook code
WPARAM wParam, // virtual-key code
LPARAM lParam // keystroke-message information
)
{
if(code == HC_ACTION)
{
switch (wParam)
{
case VK_F2:
{
if ((lParam & 0xC0000000 )==0)
{
M_hwnd=SetWindowsHookEx(WH_MOUSE,MouseProc,GetModuleHandle("CSHOOK"),0);
MessageBox(NULL,"aaaa","aaaa",MB_OK);
}
break;
case VK_F4:
{
if ((lParam & 0xC0000000 )==0)
{
UnhookWindowsHookEx(M_hwnd);
MessageBox(NULL,"aaaa","aaaa",MB_OK);
}
break;
}
}
}
}
另外在Release模式下编译主程序。_declspec(dllimport) void SetHook();报错
错误如下:
CSLOADDlg.obj : error LNK2001: unresolved external symbol "__declspec(dllimport) void __cdecl SetHook(void)" (__imp_?SetHook@@YAXXZ)
Release/CSLOAD.exe : fatal error LNK1120: 1 unresolved externals
执行 link.exe 时出错.
我不知道是怎么回事。请大大帮助。
能力值:
( LV5,RANK:60 )
16 楼
RegisterShellHookWindow'需要引入什么头文件?
能力值:
( LV12,RANK:1010 )
17 楼
这个需要别人回答你吗?
那MSDN是干什么的?
Declared in Winuser.h, include Windows.h
能力值:
( LV5,RANK:60 )
18 楼
typedef BOOL (WINAPI *pRegSHW)(HWND);
HMODULE hUser32dll;
hUser32dll=LoadLibrary(L"user32.dll");
if(hUser32dll)
{
pRegSHW= (pRegSHW)GetProcAddress(hUser32dll,"RegisterShellHookWindow");
}
能力值:
( LV5,RANK:60 )
19 楼
那这个又是做什么的?弄的象我不对似的.
能力值:
( LV12,RANK:1010 )
20 楼
这个是定义函数原型后,自己在user32.dll中取所要函数的地址。
用于动态获得函数地址~~~