作者ChrisTorng (ChrisTorng)
看板Liu
标题Re: [伪虾] 伪.虾米 Ver 2.9.7 (不稳定测试版)
时间Fri Jun 24 16:27:21 2005
: 完全更新了原本按键拦截的结构
: 因此会非常不稳定,也非常需要测试 ^^"
: (才刚解决一个严重 Bug)
: 事实上我还在评估
: 因为虽然这个结构可以改良部份困扰已久的问题
: 不过程式效率可能会降低(目前还不确定是不是真的会降低)
: 所以可能根据大家的回报再决定最後用哪一个结构好了
用 vc 写 dll 对吗?
事实上我为了工作已经写好一个现成的拦截键盘 vc dll,
也是由书上抄来的,我用是已经很稳定了,不知道会不会有帮助,提供做参考:
// CbtHook.cpp : Defines the entry point for the DLL application.
//
#include "stdafx.h"
#include "CbtHook.h"
#define CBTHOOK_VERSION 1
#define MYWM_APPACTIVATE WM_USER + 1
#define MYWM_APPMINMAX WM_USER + 2
#define MYWM_APPDESTROYWND WM_USER + 3
HINSTANCE g_hinstDll = NULL;
// for VS.NET warning C4659:
// #pragma 'data_seg' : 使用保留的区段 '.drectve' 有未定义的行为,
// 使用 #pragma comment(linker, ...)
#pragma data_seg(".drectve")
//#pragma comment(linker, "/SECTION:.drectve,RWS")
static char szLinkDirectiveShared[] = "-section:Shared,rws";
#pragma data_seg()
#pragma data_seg("Shared")
HHOOK g_hhook = NULL;
HWND g_hwndPost = NULL;
#pragma data_seg()
static LRESULT WINAPI WndHook_HookProc(int nCode, WPARAM wParam,
LPARAM lParam)
{
switch (nCode)
{
case HCBT_ACTIVATE:
PostMessage(g_hwndPost, MYWM_APPACTIVATE, wParam,
(LPARAM)(((LPCBTACTIVATESTRUCT)lParam)->hWndActive));
break;
case HCBT_MINMAX:
PostMessage(g_hwndPost, MYWM_APPMINMAX, wParam, lParam);
break;
case HCBT_DESTROYWND:
PostMessage(g_hwndPost, MYWM_APPDESTROYWND, wParam, lParam);
break;
}
return CallNextHookEx(g_hhook, nCode, wParam, lParam);
}
BOOL WINAPI SetWindowHook(int ThreadId, HWND hWndPost)
{
HHOOK hhook;
if (g_hhook != NULL) return(FALSE);
g_hwndPost = hWndPost;
hhook = SetWindowsHookEx(WH_CBT, WndHook_HookProc, g_hinstDll,
ThreadId);
InterlockedExchange((PLONG) &g_hhook, (LONG) hhook);
return(g_hhook != NULL);
}
BOOL WINAPI ReleaseWindowHook()
{
BOOL fOK = TRUE;
if (g_hhook == NULL)
return(FALSE);
fOK = UnhookWindowsHookEx(g_hhook);
g_hhook = NULL;
return(fOK);
}
int WINAPI GetDllVersion()
{
return(CBTHOOK_VERSION);
}
BOOL APIENTRY DllMain(HINSTANCE hinstDll, DWORD fdwReason, LPVOID lpvReserved)
{
switch (fdwReason)
{
case DLL_PROCESS_ATTACH:
g_hinstDll = hinstDll;
break;
case DLL_THREAD_ATTACH:
case DLL_THREAD_DETACH:
case DLL_PROCESS_DETACH:
break;
}
return(TRUE);
}
--
ChrisTorng
http://groups.msn.com/ChrisTorng
ChrisTorng 样式讯息记录 V2.1 正式推出
http://groups.msn.com/ChrisTorng/msn6messagelog.msnw
--
※ 发信站: 批踢踢实业坊(ptt.cc)
◆ From: 203.75.28.114