• <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>

            S.l.e!ep.¢%

            像打了激速一樣,以四倍的速度運(yùn)轉(zhuǎn),開心的工作
            簡(jiǎn)單、開放、平等的公司文化;尊重個(gè)性、自由與個(gè)人價(jià)值;
            posts - 1098, comments - 335, trackbacks - 0, articles - 1
              C++博客 :: 首頁(yè) :: 新隨筆 :: 聯(lián)系 :: 聚合  :: 管理
            1 舊 2006-08-02, 18:12 默認(rèn)【已解決】如何用全局Hook記錄鼠標(biāo)滾輪的動(dòng)作?
            masmprogra 當(dāng)前離線 添加 masmprogra 的聲望 反映此帖

            我能記錄鼠標(biāo)移動(dòng),左右鍵單雙擊等動(dòng)作,只有滾輪滾動(dòng)無法記錄,求教高手指點(diǎn)怎么捕獲此動(dòng)作??

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

            初級(jí)會(huì)員
            初級(jí)會(huì)員

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

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

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


            因?yàn)閱挝焕锿耆珱]有測(cè)試人員導(dǎo)致修復(fù)軟件問題時(shí),好了這邊壞了那邊?
            我就想寫個(gè)鉤子程序出來,記錄一次完整的黑盒測(cè)試過程,然后每次改動(dòng)程序,都用此過程進(jìn)行測(cè)試.

            現(xiàn)在就是無法記錄鼠標(biāo)滾輪的事件,郁悶一天了????

            請(qǐng)高手指點(diǎn)指點(diǎn)

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

            普通會(huì)員
            普通會(huì)員

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

            看看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.?

            看到?jīng)]有
            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.

            回復(fù)時(shí)引用此帖 多重引用本帖 快速回復(fù)此帖 返回頂端
            北極星2003
            級(jí)別:15 | 在線時(shí)長(zhǎng):312小時(shí) | 升級(jí)還需:8小時(shí) 級(jí)別:15 | 在線時(shí)長(zhǎng):312小時(shí) | 升級(jí)還需:8小時(shí) 級(jí)別:15 | 在線時(shí)長(zhǎng):312小時(shí) | 升級(jí)還需:8小時(shí) 級(jí)別:15 | 在線時(shí)長(zhǎng):312小時(shí) | 升級(jí)還需:8小時(shí) 級(jí)別:15 | 在線時(shí)長(zhǎng):312小時(shí) | 升級(jí)還需:8小時(shí) 級(jí)別:15 | 在線時(shí)長(zhǎng):312小時(shí) | 升級(jí)還需:8小時(shí)

            『Win32/Win64編程』版主<br>『編程技術(shù)小組』組長(zhǎng)
            『Win32/Win64編程』版主
            『編程技術(shù)小組』組長(zhǎng)

            資 料:
            注冊(cè)日期: Feb 2005
            帖子: 1,224北極星2003 品行端正
            精華: 25
            現(xiàn)金: 1911 Kx
            4 舊 2006-08-03, 09:59 默認(rèn)
            北極星2003 當(dāng)前離線 添加 北極星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.?
            原理是從系統(tǒng)消息隊(duì)列中移出消息并保存
            既然你能實(shí)現(xiàn)鍵盤,鼠標(biāo),同樣滾輪也應(yīng)該能實(shí)現(xiàn)(WM_MOUSEWHEEL)

            回復(fù)時(shí)引用此帖 多重引用本帖 快速回復(fù)此帖 返回頂端
            masmprogra
            級(jí)別:0 | 在線時(shí)長(zhǎng):1小時(shí) | 升級(jí)還需:4小時(shí)

            初級(jí)會(huì)員
            初級(jí)會(huì)員

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

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

            開始我也認(rèn)為WM_MOUSEWHEEL應(yīng)該和WM_MOUSEMOVE等消息類似,但弄了老半天就是截獲不了?

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

            回復(fù)時(shí)引用此帖 多重引用本帖 快速回復(fù)此帖 返回頂端
            masmprogra
            級(jí)別:0 | 在線時(shí)長(zhǎng):1小時(shí) | 升級(jí)還需:4小時(shí)

            初級(jí)會(huì)員
            初級(jí)會(huì)員

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

            請(qǐng)問"紅火蟻":

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

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

            那么他們會(huì)通過?lParam?返回?KBDLLHOOKSTRUCT?和?MSLLHOOKSTRUCT?指針,這兩種結(jié)構(gòu)體能轉(zhuǎn)換為?EVENTMSG?結(jié)構(gòu)類型嗎?

            初學(xué)鉤子方面的知識(shí),請(qǐng)包含

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

            普通會(huì)員
            普通會(huì)員

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

            我?guī)湍阕隽诉@個(gè)簡(jiǎn)易的鉤子,基本實(shí)現(xiàn)了你的功能?
            這個(gè)是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);
            //?低級(jí)鼠標(biāo)鉤子函數(shù)
            LRESULT?CALLBACK?LowLevelMouseProc(
            ????????????????????int?nCode,?????//?hook?code
            ????????????????????WPARAM?wParam,?//?message?identifier
            ????????????????????LPARAM?lParam??//?pointer?to?structure?with?message?data
            ??????????????????)
            {
            ????if?(nCode?==?HC_ACTION)
            ??{
            ????//?如果是滾動(dòng)滑輪,彈出消息框,卸載鉤子函數(shù)
            ????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
            因?yàn)樵趙inuser.h中只有定義了上面的才定義的WH_MOUSE_LL

            然后您在另外建一對(duì)話框工程
            加一個(gè)按鈕
            在工程目錄下加進(jìn)上面的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

            回復(fù)時(shí)引用此帖 多重引用本帖 快速回復(fù)此帖 返回頂端
            masmprogra
            級(jí)別:0 | 在線時(shí)長(zhǎng):1小時(shí) | 升級(jí)還需:4小時(shí)

            初級(jí)會(huì)員
            初級(jí)會(huì)員

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

            我又查看了一下,

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

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

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

            無法播放錄制下來的滾輪動(dòng)作.?

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

            回復(fù)時(shí)引用此帖 多重引用本帖 快速回復(fù)此帖 返回頂端
            masmprogra
            級(jí)別:0 | 在線時(shí)長(zhǎng):1小時(shí) | 升級(jí)還需:4小時(shí)

            初級(jí)會(huì)員
            初級(jí)會(huì)員

            資 料:
            注冊(cè)日期: Jun 2006
            帖子: 61masmprogra 品行端正
            精華: 0
            現(xiàn)金: 200 Kx
            9 舊 2006-08-03, 16:05 默認(rèn)
            masmprogra 當(dāng)前離線 添加 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
            ??

            午夜精品久久久久久影视777 | 国产成人综合久久精品尤物| 精品国产乱码久久久久久郑州公司 | 无码人妻久久一区二区三区免费丨 | 色偷偷88欧美精品久久久| 国产日韩久久久精品影院首页| 99久久国产免费福利| 国产亚洲精午夜久久久久久| 午夜精品久久久久久影视777| 亚洲精品无码久久不卡| 亚洲国产精品无码久久久不卡| 久久精品无码专区免费青青| 国产成人久久激情91| 精品久久久久一区二区三区 | 久久精品极品盛宴观看| 人妻无码久久一区二区三区免费 | 亚洲精品tv久久久久久久久久| 久久久久青草线蕉综合超碰| 久久久久亚洲av无码专区| 亚洲伊人久久大香线蕉苏妲己| 久久免费大片| 久久99热只有频精品8| 久久婷婷人人澡人人| 久久久久亚洲av无码专区导航 | 国内精品伊人久久久影院| 日韩精品久久久久久免费| 99久久精品费精品国产| 久久精品国产免费观看三人同眠| 999久久久免费精品国产| 久久亚洲色一区二区三区| 久久亚洲私人国产精品| 久久无码国产| 精品综合久久久久久97超人| 性高湖久久久久久久久AAAAA| 996久久国产精品线观看| 亚洲国产精品综合久久一线 | 99久久人妻无码精品系列| 久久综合久久鬼色| 久久精品国产只有精品2020| 久久久久久久综合狠狠综合| 国产激情久久久久影院老熟女免费 |