作者badpp (呵呵)
看板Liu
标题Re: [伪虾] 伪.虾米 Ver 2.9.7 (不稳定测试版)
时间Sun Jun 26 23:49:56 2005
※ 引述《ChrisTorng (ChrisTorng)》之铭言:
: : 完全更新了原本按键拦截的结构
: : 因此会非常不稳定,也非常需要测试 ^^"
: : (才刚解决一个严重 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;
乱po参考试看看,说不定会有用,当初写一个滑鼠监测程式是卡在这里
好像是不能全都是用PostMessage(..)
如果现在最上层的执行视窗 是本身自已的执行程式的话 就要用SendMessage(..)
(原理 也就是现在进来读取这个DLL档的 是本身自已的程式)
我之前写的那个程式是要满足这样的规则 不知道xliu需不需要
HWND hWnd1, hWnd2;
hWnd1 = GetForegroundWindow();
hWnd2 = GetParent(hWnd1);
if (!hWnd2)
hWnd2 = hWnd1;
if (hWnd2 == m_hWnd)//为本程式的执行视窗
SendMessage(m_hWnd, WM_COMMAND, dwArg, NULL);
else
PostMessage(m_hWnd, WM_COMMAND, dwArg, NULL);
: }
: 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);
: }
--
※ 发信站: 批踢踢实业坊(ptt.cc)
◆ From: 140.112.25.174
※ 编辑: badpp 来自: 140.112.25.174 (06/26 23:51)