青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品

S.l.e!ep.¢%

像打了激速一樣,以四倍的速度運轉,開心的工作
簡單、開放、平等的公司文化;尊重個性、自由與個人價值;
posts - 1098, comments - 335, trackbacks - 0, articles - 1
  C++博客 :: 首頁 :: 新隨筆 :: 聯系 :: 聚合  :: 管理

如何用全局Hook記錄鼠標滾輪的動作?

Posted on 2010-01-13 21:34 S.l.e!ep.¢% 閱讀(2141) 評論(0)  編輯 收藏 引用 所屬分類: RootKit
1 舊 2006-08-02, 18:12 默認【已解決】如何用全局Hook記錄鼠標滾輪的動作?
masmprogra 當前離線 添加 masmprogra 的聲望 反映此帖

我能記錄鼠標移動,左右鍵單雙擊等動作,只有滾輪滾動無法記錄,求教高手指點怎么捕獲此動作??

此帖于 2006-08-03 16:05 被 masmprogra 最后編輯
回復時引用此帖 多重引用本帖 快速回復此帖 返回頂端
masmprogra
級別:0 | 在線時長:1小時 | 升級還需:4小時

初級會員
初級會員

資 料:
注冊日期: Jun 2006
帖子: 61masmprogra 品行端正
精華: 0
現金: 200 Kx
2 舊 2006-08-03, 09:41 默認
masmprogra 當前離線 添加 masmprogra 的聲望 反映此帖

用來記錄鼠標鍵盤動作的鉤子:
SetWindowsHookEx(WH_JOURNALRECORD,?(HOOKPROC)RecHookProc,?AfxGetApp()->m_hInstance,?0);

用來播放鼠標鍵盤動作的鉤子:
SetWindowsHookEx(WH_JOURNALPLAYBACK,?(HOOKPROC)PlayHookProc,?AfxGetApp()->m_hInstance,?0);


因為單位里完全沒有測試人員導致修復軟件問題時,好了這邊壞了那邊?
我就想寫個鉤子程序出來,記錄一次完整的黑盒測試過程,然后每次改動程序,都用此過程進行測試.

現在就是無法記錄鼠標滾輪的事件,郁悶一天了????

請高手指點指點

此帖于 2006-08-03 10:01 被 masmprogra 最后編輯
回復時引用此帖 多重引用本帖 快速回復此帖 返回頂端
紅火蟻
級別:1 | 在線時長:7小時 | 升級還需:5小時

普通會員
普通會員

資 料:
注冊日期: May 2006
帖子: 62紅火蟻 品行端正
精華: 3
現金: 200 Kx
3 舊 2006-08-03, 09:54 默認
紅火蟻 當前離線 添加 紅火蟻 的聲望 反映此帖

看看MSDN?
LRESULT?CALLBACK?LowLevelMouseProc(
??int?nCode,?????//?hook?code
??WPARAM?wParam,?//?message?identifier
??LPARAM?lParam??//?pointer?to?structure?with?message?data
);
它下面有一句話
wParam?
Specifies?the?identifier?of?the?mouse?message.?This?parameter?can?be?one?of?the?following?messages:WM_LBUTTONDOWN,WM_LBUTTONUP,WM_MOUSEMOVE,WM_MOUSEWHEEL,WM_RBUTTONDOWN,?orWM_RBUTTONUP.?

看到沒有
WM_MOUSEWHEEL
The?WM_MOUSEWHEEL?message?is?sent?to?the?focus?window?when?the?mouse?wheel?is?rotated.?The?DefWindowProc?function?propagates?the?message?to?the?window's?parent.?There?should?be?no?internal?forwarding?of?the?message,?since?DefWindowProc?propagates?it?up?the?parent?chain?until?it?finds?a?window?that?processes?it.

WM_MOUSEWHEEL
fwKeys?=?LOWORD(wParam);????//?key?flags
zDelta?=?(short)?HIWORD(wParam);????//?wheel?rotation
xPos?=?(short)?LOWORD(lParam);????//?horizontal?position?of?pointer
yPos?=?(short)?HIWORD(lParam);????//?vertical?position?of?pointer
?
Parameters
fwKeys?
Value?of?the?low-order?word?of?wParam.?Indicates?whether?various?virtual?keys?are?down.?This?parameter?can?be?any?combination?of?the?following?values:?Value?Description?
MK_CONTROL?Set?if?the?ctrl?key?is?down.?
MK_LBUTTON?Set?if?the?left?mouse?button?is?down.?
MK_MBUTTON?Set?if?the?middle?mouse?button?is?down.?
MK_RBUTTON?Set?if?the?right?mouse?button?is?down.?
MK_SHIFT?Set?if?the?shift?key?is?down.?


zDelta?
The?value?of?the?high-order?word?of?wParam.?Indicates?the?distance?that?the?wheel?is?rotated,?expressed?in?multiples?or?divisions?of?WHEEL_DELTA,?which?is?120.?A?positive?value?indicates?that?the?wheel?was?rotated?forward,?away?from?the?user;?a?negative?value?indicates?that?the?wheel?was?rotated?backward,?toward?the?user.?
xPos?
Value?of?the?low-order?word?of?lParam.?Specifies?the?x-coordinate?of?the?pointer,?relative?to?the?upper-left?corner?of?the?screen.?
yPos?
Value?of?the?high-order?word?of?lParam.?Specifies?the?y-coordinate?of?the?pointer,?relative?to?the?upper-left?corner?of?the?screen.?
Remarks
The?zDelta?parameter?will?be?a?multiple?of?WHEEL_DELTA,?which?is?set?at?120.?This?is?the?threshold?for?action?to?be?taken,?and?one?such?action?(for?example,?scrolling?one?increment)?should?occur?for?each?delta.

The?delta?was?set?to?120?to?allow?Microsoft?or?other?vendors?to?build?finer-resolution?wheels?in?the?future,?including?perhaps?a?freely-rotating?wheel?with?no?notches.?The?expectation?is?that?such?a?device?would?send?more?messages?per?rotation,?but?with?a?smaller?value?in?each?message.?To?support?this?possibility,?you?should?either?add?the?incoming?delta?values?until?WHEEL_DELTA?is?reached?(so?for?a?given?delta-rotation?you?get?the?same?response),?or?scroll?partial?lines?in?response?to?the?more?frequent?messages.?You?could?also?choose?your?scroll?granularity?and?accumulate?deltas?until?it?is?reached.

回復時引用此帖 多重引用本帖 快速回復此帖 返回頂端
北極星2003
級別:15 | 在線時長:312小時 | 升級還需:8小時 級別:15 | 在線時長:312小時 | 升級還需:8小時 級別:15 | 在線時長:312小時 | 升級還需:8小時 級別:15 | 在線時長:312小時 | 升級還需:8小時 級別:15 | 在線時長:312小時 | 升級還需:8小時 級別:15 | 在線時長:312小時 | 升級還需:8小時

『Win32/Win64編程』版主<br>『編程技術小組』組長
『Win32/Win64編程』版主
『編程技術小組』組長

資 料:
注冊日期: Feb 2005
帖子: 1,224北極星2003 品行端正
精華: 25
現金: 1911 Kx
4 舊 2006-08-03, 09:59 默認
北極星2003 當前離線 添加 北極星2003 的聲望 反映此帖

引用:
FROM?MSDN
The?JournalRecordProc?hook?procedure?is?an?application-defined?or?library-defined?callback?function?used?with?the?SetWindowsHookEx?function.?The?function?records?messages?the?system?removes?from?the?system?message?queue.?Later,?an?application?can?use?a?JournalPlaybackProc?hook?procedure?to?play?back?the?messages.?
原理是從系統消息隊列中移出消息并保存
既然你能實現鍵盤,鼠標,同樣滾輪也應該能實現(WM_MOUSEWHEEL)

回復時引用此帖 多重引用本帖 快速回復此帖 返回頂端
masmprogra
級別:0 | 在線時長:1小時 | 升級還需:4小時

初級會員
初級會員

資 料:
注冊日期: Jun 2006
帖子: 61masmprogra 品行端正
精華: 0
現金: 200 Kx
5 舊 2006-08-03, 10:21 默認
masmprogra 當前離線 添加 masmprogra 的聲望 反映此帖

謝謝樓上兩位朋友的熱心解答~~?

開始我也認為WM_MOUSEWHEEL應該和WM_MOUSEMOVE等消息類似,但弄了老半天就是截獲不了?

我再看看"火紅蟻"提供的函數,找下問題在哪?

回復時引用此帖 多重引用本帖 快速回復此帖 返回頂端
masmprogra
級別:0 | 在線時長:1小時 | 升級還需:4小時

初級會員
初級會員

資 料:
注冊日期: Jun 2006
帖子: 61masmprogra 品行端正
精華: 0
現金: 200 Kx
6 舊 2006-08-03, 10:35 默認
masmprogra 當前離線 添加 masmprogra 的聲望 反映此帖

請問"紅火蟻":

你的意思是調用---
SetWindowsHookEx(WH_KEYBOARD_LL,?(HOOKPROC)RecKeyProc,?AfxGetApp()->m_hInstance,?0);

SetWindowsHookEx(WH_MOUSE_LL,?(HOOKPROC)RecMouseProc,?AfxGetApp()->m_hInstance,?0);

那么他們會通過?lParam?返回?KBDLLHOOKSTRUCT?和?MSLLHOOKSTRUCT?指針,這兩種結構體能轉換為?EVENTMSG?結構類型嗎?

初學鉤子方面的知識,請包含

此帖于 2006-08-03 15:04 被 masmprogra 最后編輯
回復時引用此帖 多重引用本帖 快速回復此帖 返回頂端
紅火蟻
級別:1 | 在線時長:7小時 | 升級還需:5小時

普通會員
普通會員

資 料:
注冊日期: May 2006
帖子: 62紅火蟻 品行端正
精華: 3
現金: 200 Kx
7 舊 2006-08-03, 11:18 默認
紅火蟻 當前離線 添加 紅火蟻 的聲望 反映此帖

我幫你做了這個簡易的鉤子,基本實現了你的功能?
這個是dll代碼
#include?"stdafx.h"
#include?"GetMouseMessage.h"

#ifdef?_DEBUG
#define?new?DEBUG_NEW
#undef?THIS_FILE
static?char?THIS_FILE[]?=?__FILE__;
#endif

//
//??Note!
//
//????If?this?DLL?is?dynamically?linked?against?the?MFC
//????DLLs,?any?functions?exported?from?this?DLL?which
//????call?into?MFC?must?have?the?AFX_MANAGE_STATE?macro
//????added?at?the?very?beginning?of?the?function.
//
//????For?example:
//
//????extern?"C"?BOOL?PASCAL?EXPORT?ExportedFunction()
//????{
//??????AFX_MANAGE_STATE(AfxGetStaticModuleState());
//??????//?normal?function?body?here
//????}
//
//????It?is?very?important?that?this?macro?appear?in?each
//????function,?prior?to?any?calls?into?MFC.??This?means?that
//????it?must?appear?as?the?first?statement?within?the?
//????function,?even?before?any?object?variable?declarations
//????as?their?constructors?may?generate?calls?into?the?MFC
//????DLL.
//
//????Please?see?MFC?Technical?Notes?33?and?58?for?additional
//????details.
//

/////////////////////////////////////////////////////////////////////////////
//?CGetMouseMessageApp

BEGIN_MESSAGE_MAP(CGetMouseMessageApp,?CWinApp)
??//{{AFX_MSG_MAP(CGetMouseMessageApp)
????//?NOTE?-?the?ClassWizard?will?add?and?remove?mapping?macros?here.
????//????DO?NOT?EDIT?what?you?see?in?these?blocks?of?generated?code!
??//}}AFX_MSG_MAP
END_MESSAGE_MAP()

/////////////////////////////////////////////////////////////////////////////
//?CGetMouseMessageApp?construction

CGetMouseMessageApp::CGetMouseMessageApp()
{
??//?TODO:?add?construction?code?here,
??//?Place?all?significant?initialization?in?InitInstance
}

/////////////////////////////////////////////////////////////////////////////
//?The?one?and?only?CGetMouseMessageApp?object

CGetMouseMessageApp?theApp;

//?定義鉤子變量
HHOOK?g_hook?=?NULL;
extern?"C"?_declspec(dllexport)?void?EndHook(void);
//?低級鼠標鉤子函數
LRESULT?CALLBACK?LowLevelMouseProc(
????????????????????int?nCode,?????//?hook?code
????????????????????WPARAM?wParam,?//?message?identifier
????????????????????LPARAM?lParam??//?pointer?to?structure?with?message?data
??????????????????)
{
????if?(nCode?==?HC_ACTION)
??{
????//?如果是滾動滑輪,彈出消息框,卸載鉤子函數
????if?(wParam?==?WM_MOUSEWHEEL)
????{
??????MessageBox(NULL,?"Get?the?mousewheel?message",?NULL,?MB_OK);
??????EndHook();
????}
??}

??return?CallNextHookEx(g_hook,?nCode,?wParam,?lParam);
}

//?安裝鉤子
extern?"C"?_declspec(dllexport)?void?SetHook(void)
{
??g_hook?=?SetWindowsHookEx(
????????????????WH_MOUSE_LL,?????????//?type?of?hook?to?install
????????????????LowLevelMouseProc,???//?address?of?hook?procedure
????????????????theApp.m_hInstance,??//?handle?to?application?instance
????????????????0????????????????????//?identity?of?thread?to?install?hook?for
??????????????);
??if?(g_hook?==?NULL)
??{
????MessageBox(NULL,?"SetWindowsHookEx?Failed",?NULL,?MB_OK);
????return?;
??}

??return?;
}
//?卸載鉤子
extern?"C"?_declspec(dllexport)?void?EndHook(void)
{
??if?(g_hook?!=?NULL)
????UnhookWindowsHookEx(g_hook);
}

注意,您必須在stdAfx.h中加上
#define?_WIN32_WINNT??0x0500
因為在winuser.h中只有定義了上面的才定義的WH_MOUSE_LL

然后您在另外建一對話框工程
加一個按鈕
在工程目錄下加進上面的GetMouseMessage.dll和GetMouseMessage.lib

在按鈕事件中寫
extern?"C"?_declspec(dllimport)?void?SetHook(void);
extern?"C"?_declspec(dllimport)?void?EndHook(void);

void?CTestGetMessageDlg::OnButton1()?
{
??//?TODO:?Add?your?control?notification?handler?code?here
??SetHook();
}

我試過
完全ok

回復時引用此帖 多重引用本帖 快速回復此帖 返回頂端
masmprogra
級別:0 | 在線時長:1小時 | 升級還需:4小時

初級會員
初級會員

資 料:
注冊日期: Jun 2006
帖子: 61masmprogra 品行端正
精華: 0
現金: 200 Kx
8 舊 2006-08-03, 15:04 默認
masmprogra 當前離線 添加 masmprogra 的聲望 反映此帖

我又查看了一下,

SetWindowsHookEx(WH_JOURNALRECORD,?(HOOKPROC)RecHookProc,?AfxGetApp()->m_hInstance,?0);

能捕獲WM_MOUSEWHEEL消息,問題是出在

SetWindowsHookEx(WH_JOURNALPLAYBACK,?(HOOKPROC)PlayHookProc,?AfxGetApp()->m_hInstance,?0);

無法播放錄制下來的滾輪動作.?

原因我還在查找中,謝謝"紅火蟻"的熱心幫助.

回復時引用此帖 多重引用本帖 快速回復此帖 返回頂端
masmprogra
級別:0 | 在線時長:1小時 | 升級還需:4小時

初級會員
初級會員

資 料:
注冊日期: Jun 2006
帖子: 61masmprogra 品行端正
精華: 0
現金: 200 Kx
9 舊 2006-08-03, 16:05 默認
masmprogra 當前離線 添加 masmprogra 的聲望 反映此帖

徹底郁悶了...???

在codeproject的帖子里找到了答案,詳情如下:

;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
WM_MOUSEWHEEL?cannot?work??

I?downloaded?and?use?it?to?test?out?Notepad.
It?seems?like?the?WM_MOUSEWHEEL?can?be?recorded,?but?when?it?is?played?back?in?NotePad,?the?playback?does?not?"wheel"?or?scroll?the?notepad?app.

You?can?easily?try?it?out?in?notepad.?just?type?in?many?line?to?make?Notepad?scrollbar?appear.?Record?the?mouse?wheel?and?play?it?back.

Any?idea?how?to?make?Mouse?Wheel?work?
;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
Re:?WM_MOUSEWHEEL?cannot?work??

Yes,?this?is?a?bug??in?the?journal?playback?system.?Unfortunately,?there's?nothing?I?can?do

Regards
Senthil
??

青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品
  • <ins id="pjuwb"></ins>
    <blockquote id="pjuwb"><pre id="pjuwb"></pre></blockquote>
    <noscript id="pjuwb"></noscript>
          <sup id="pjuwb"><pre id="pjuwb"></pre></sup>
            <dd id="pjuwb"></dd>
            <abbr id="pjuwb"></abbr>
            欧美日本不卡视频| 久久青青草综合| 欧美国产日本高清在线| 免费日韩成人| 亚洲一区二区三区在线| 午夜日韩在线观看| 欧美+日本+国产+在线a∨观看| 亚洲人成人一区二区三区| 一区二区三区国产盗摄| 午夜精品短视频| 在线日韩精品视频| 亚洲线精品一区二区三区八戒| 国产精品欧美一区二区三区奶水| 久久视频免费观看| 欧美三区美女| 欧美成人中文字幕| 国产欧美日韩视频| 亚洲精品久久| 一区二区三区在线高清| 日韩亚洲综合在线| 亚洲国产精品一区二区www在线| 一本色道久久综合狠狠躁篇怎么玩| 国产一区二区三区自拍| 亚洲蜜桃精久久久久久久 | 欧美伊人影院| 欧美巨乳波霸| 欧美国产第二页| 国产亚洲第一区| 一本高清dvd不卡在线观看| 91久久精品美女| 久久久噜噜噜久久狠狠50岁| 欧美一区二区国产| 欧美日韩国产探花| 亚洲第一中文字幕在线观看| 狠狠久久综合婷婷不卡| 午夜精品国产精品大乳美女| 亚洲网址在线| 欧美日韩国产首页在线观看| 亚洲国产视频一区| 亚洲区欧美区| 久久天天躁夜夜躁狠狠躁2022| 亚洲美女av黄| 日韩视频一区二区三区| 美女福利精品视频| 久久视频一区| 狠狠色丁香久久综合频道 | 一区二区成人精品| 欧美黄色一级视频| 亚洲国产精品精华液网站| 1024成人网色www| 久久综合久久久| 欧美高清成人| 99精品99| 欧美视频不卡中文| 国产精品99久久久久久有的能看 | 欧美国产第一页| 亚洲春色另类小说| 99re66热这里只有精品4| 欧美国产日韩精品免费观看| 亚洲国产精品免费| 在线视频日韩| 国产精品午夜在线| 久久国产毛片| 韩国av一区| 久久综合色88| 亚洲精品国产无天堂网2021| 一区二区三区免费网站| 国产精品成人国产乱一区| 亚洲欧美日韩视频一区| 狼人天天伊人久久| 日韩午夜精品视频| 国产老女人精品毛片久久| 久久久91精品国产| 亚洲人体偷拍| 午夜在线精品| 在线看片第一页欧美| 欧美日韩八区| 欧美亚洲网站| 亚洲福利久久| 性欧美大战久久久久久久免费观看 | 欲香欲色天天天综合和网| 免费久久99精品国产| 日韩网站在线观看| 久久国产一二区| 亚洲三级电影在线观看| 国产精品美女视频网站| 久久日韩粉嫩一区二区三区| 亚洲欧洲日夜超级视频| 午夜久久资源| 亚洲激情午夜| 国产美女扒开尿口久久久| 美女视频黄免费的久久| 亚洲午夜av在线| 亚洲大片一区二区三区| 欧美亚洲三区| 99热这里只有成人精品国产| 国产香蕉97碰碰久久人人| 欧美激情亚洲一区| 久久精品国产清自在天天线| 日韩网站在线观看| 男女视频一区二区| 欧美一区二区三区免费观看| 亚洲精选视频免费看| 国产亚洲高清视频| 国产精品久久久久久久9999| 久久亚洲综合色一区二区三区| 亚洲视频福利| 久久精品国产久精国产思思| 欧美激情按摩在线| 欧美在线观看一二区| 99视频超级精品| 欧美激情一区二区三区高清视频| 香蕉成人久久| 亚洲视频一区二区| 亚洲精品乱码久久久久久黑人 | 亚洲毛片av在线| 男女精品网站| 久久免费精品视频| 香蕉乱码成人久久天堂爱免费| 亚洲美女网站| 亚洲电影天堂av| 在线观看的日韩av| 狠狠色综合色综合网络| 国产欧美丝祙| 国产精品一区二区久久久| 欧美日韩一区二区精品| 欧美精品午夜| 欧美日本高清| 亚洲成在人线av| 欧美电影资源| 欧美成人日韩| 欧美成人综合| 欧美不卡在线视频| 欧美1区2区| 欧美激情一区二区| 亚洲丶国产丶欧美一区二区三区| 欧美高清视频在线播放| 欧美福利视频| 亚洲人体一区| aⅴ色国产欧美| 亚洲图片欧美日产| 亚洲综合色丁香婷婷六月图片| 亚洲一区二区视频在线| 中文精品一区二区三区| 国产精品99久久久久久久久 | 日韩视频不卡| 日韩一区二区免费高清| 一级成人国产| 亚洲一区不卡| 欧美一区在线视频| 欧美中文字幕不卡| 久热成人在线视频| 欧美激情视频在线播放| 91久久国产自产拍夜夜嗨| 亚洲精品欧美在线| 中文一区二区在线观看| 亚洲欧美中文日韩在线| 欧美在线免费观看| 美女91精品| 欧美日韩在线影院| 国产亚洲精品一区二区| 在线观看一区欧美| 99精品99| 欧美在线高清| 欧美国产成人精品| 国产精品99久久久久久白浆小说| 午夜久久久久久久久久一区二区| 久久se精品一区精品二区| 麻豆视频一区二区| 一本大道久久a久久精品综合| 亚洲社区在线观看| 久久久精品日韩| 欧美日韩 国产精品| 国产精品日日做人人爱| 尤物在线观看一区| 亚洲一区免费观看| 猛男gaygay欧美视频| 日韩一级精品| 久久久久国产精品一区三寸| 欧美激情一区二区三区成人 | 99精品欧美| 欧美一区二区三区在线视频| 欧美1级日本1级| 国产欧美一区二区三区在线看蜜臀| 亚洲成人资源| 亚洲深爱激情| 鲁大师影院一区二区三区| 欧美日韩一区二区三区在线| 国产色产综合产在线视频| 亚洲理伦在线| 久久精品一区二区三区不卡牛牛| 亚洲国产精品一区二区第四页av| 亚洲一区二区三区四区中文| 久久婷婷国产综合精品青草| 欧美性猛交xxxx免费看久久久| 国产一区二区无遮挡| 亚洲色图自拍| 欧美激情久久久| 久久成人免费| 国产精品久久久爽爽爽麻豆色哟哟|