: 完全更新了原本按鍵攔截的結構
: 因此會非常不穩定,也非常需要測試 ^^"
: (才剛解決一個嚴重 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