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

            牽著老婆滿街逛

            嚴以律己,寬以待人. 三思而后行.
            GMail/GTalk: yanglinbo#google.com;
            MSN/Email: tx7do#yahoo.com.cn;
            QQ: 3 0 3 3 9 6 9 2 0 .

            SkinSB皮膚滾動條庫的一個幫助頭文件

            從哪里獲取到SkinSB?
                你可以從作者的博客里面獲取到相關信息:http://blog.csdn.net/mynamelj/archive/2009/02/16/3895585.aspx

            從哪里獲取Detours?
                它依賴著微軟的一個很暴力的庫Detours,可以從微軟的網站上獲取到:http://research.microsoft.com/en-us/projects/detours/


            官方網站上Detours最新版本是2.1,而SkinSB原生用的是1.5的版本的,這兩個版本的API差異還是很大的,所以頭文件對此做了一個橋接,以下為頭文件的代碼:


            #ifndef __SkinsbHelper_H__
            #define __SkinsbHelper_H__


            // 包含頭文件
            #include "detours.h"
            #include 
            "skinsb.h"


            #if defined(_DEBUG)
                #pragma comment(lib, 
            "skinsb.lib")
                #pragma comment(lib, 
            "detours.lib")
            #else
                #pragma comment(lib, 
            "skinsb.lib")
                #pragma comment(lib, 
            "detours.lib")
            #endif


            //////////////////////////////////////////////////////////////////////////
            // 申明鉤子
            //////////////////////////////////////////////////////////////////////////
            #if (DETOURS_VERSION >= 20100)
                
            int (WINAPI* SetScrollInfoT) (HWND, int, LPCSCROLLINFO, BOOL) = SetScrollInfo;
                BOOL (WINAPI
            * GetScrollInfoT) (HWND, int, LPSCROLLINFO) = GetScrollInfo;
                
            int (WINAPI* SetScrollPosT) (HWND, intint, BOOL) = SetScrollPos;
                
            int (WINAPI* GetScrollPosT) (HWND, int= GetScrollPos;
                BOOL (WINAPI
            * GetScrollRangeT) (HWND, int, LPINT, LPINT) = GetScrollRange;
                BOOL (WINAPI
            * SetScrollRangeT) (HWND, intintint, BOOL) = SetScrollRange;
                BOOL (WINAPI
            * ShowScrollBarT) (HWND, int, BOOL) = ShowScrollBar;
                BOOL (WINAPI
            * EnableScrollBarT) (HWND, UINT, UINT) = EnableScrollBar;
            #else
                DETOUR_TRAMPOLINE(
            int   WINAPI SetScrollInfoT(HWND, int, LPCSCROLLINFO, BOOL), SetScrollInfo)
                DETOUR_TRAMPOLINE(BOOL  WINAPI GetScrollInfoT(HWND, 
            int, LPSCROLLINFO), GetScrollInfo)
                DETOUR_TRAMPOLINE(
            int   WINAPI SetScrollPosT(HWND, intint, BOOL), SetScrollPos)
                DETOUR_TRAMPOLINE(
            int   WINAPI GetScrollPosT(HWND, int), GetScrollPos)
                DETOUR_TRAMPOLINE(BOOL  WINAPI GetScrollRangeT(HWND, 
            int, LPINT, LPINT), GetScrollRange)
                DETOUR_TRAMPOLINE(BOOL  WINAPI SetScrollRangeT(HWND, 
            intintint, BOOL), SetScrollRange)
                DETOUR_TRAMPOLINE(BOOL  WINAPI ShowScrollBarT(HWND, 
            int, BOOL), ShowScrollBar)
                DETOUR_TRAMPOLINE(BOOL  WINAPI EnableScrollBarT(HWND, UINT, UINT), EnableScrollBar)
            #endif


            int WINAPI SetScrollInfoD(HWND hwnd, int fnBar, LPCSCROLLINFO lpsi, BOOL bRedraw)
            {
                
            if( SkinSB_IsValid(hwnd) )
                    
            return SkinSB_SetScrollInfo(hwnd, fnBar, lpsi, bRedraw);
                
            else
                    
            return SetScrollInfoT(hwnd, fnBar, lpsi, bRedraw);
            }


            BOOL WINAPI GetScrollInfoD(HWND hwnd, 
            int fnBar, LPSCROLLINFO lpsi)
            {
                
            if( SkinSB_IsValid(hwnd) )
                    
            return SkinSB_GetScrollInfo(hwnd, fnBar, lpsi);
                
            else
                    
            return GetScrollInfoT(hwnd, fnBar, lpsi);
            }


            int WINAPI SetScrollPosD(HWND hwnd, int nBar, int nPos, BOOL bRedraw)
            {
                
            if( SkinSB_IsValid(hwnd) )
                    
            return SkinSB_SetScrollPos(hwnd, nBar, nPos, bRedraw);
                
            else
                    
            return SetScrollPosT(hwnd, nBar, nPos, bRedraw);
            }


            int WINAPI GetScrollPosD(HWND hwnd, int nBar)
            {
                
            if( SkinSB_IsValid(hwnd) )
                    
            return SkinSB_GetScrollPos(hwnd, nBar);
                
            else
                    
            return GetScrollPosT(hwnd, nBar);
            }


            BOOL WINAPI SetScrollRangeD(HWND hwnd, 
            int nBar, int nMinPos, int nMaxPos, BOOL bRedraw)
            {
                
            if( SkinSB_IsValid(hwnd) )
                    
            return SkinSB_SetScrollRange(hwnd, nBar, nMinPos, nMaxPos, bRedraw);
                
            else
                    
            return SetScrollRangeT(hwnd, nBar, nMinPos, nMaxPos, bRedraw);
            }


            BOOL WINAPI GetScrollRangeD(HWND hwnd, 
            int nBar, LPINT lpMinPos, LPINT lpMaxPos)
            {
                
            if( SkinSB_IsValid(hwnd) )
                    
            return SkinSB_GetScrollRange(hwnd, nBar, lpMinPos, lpMaxPos);
                
            else
                    
            return GetScrollRangeT(hwnd, nBar, lpMinPos, lpMaxPos);
            }


            BOOL WINAPI ShowScrollBarD(HWND hwnd, 
            int nBar, BOOL bShow)
            {
                
            if( SkinSB_IsValid(hwnd) )
                    
            return SkinSB_ShowScrollBar(hwnd, nBar, bShow);
                
            else
                    
            return ShowScrollBarT(hwnd, nBar, bShow);
            }


            BOOL WINAPI EnableScrollBarD(HWND hwnd, UINT wSBflags, UINT wArrows)
            {
                
            if( SkinSB_IsValid(hwnd) )
                    
            return SkinSB_EnableScrollBar(hwnd, wSBflags, wArrows);
                
            else
                    
            return EnableScrollBarT(hwnd, wSBflags, wArrows);
            }



            //////////////////////////////////////////////////////////////////////////
            /// 注冊鉤子
            //////////////////////////////////////////////////////////////////////////

            LONG RegisterSkinSB(VOID)
            {
            #if (DETOURS_VERSION >= 20100)
                DetourTransactionBegin();
                DetourUpdateThread(GetCurrentThread());
                
            // 加載鉤子
                ::DetourAttach(&(PVOID&)SetScrollInfoT, SetScrollInfoD);
                ::DetourAttach(
            &(PVOID&)GetScrollInfoT, GetScrollInfoD);
                ::DetourAttach(
            &(PVOID&)SetScrollPosT, SetScrollPosD);
                ::DetourAttach(
            &(PVOID&)GetScrollPosT, GetScrollPosD);
                ::DetourAttach(
            &(PVOID&)SetScrollRangeT, SetScrollRangeD);
                ::DetourAttach(
            &(PVOID&)GetScrollRangeT, GetScrollRangeD);
                ::DetourAttach(
            &(PVOID&)ShowScrollBarT, ShowScrollBarD);
                ::DetourAttach(
            &(PVOID&)EnableScrollBarT, EnableScrollBarD);
                
            return DetourTransactionCommit();
            #else
                ::DetourFunctionWithTrampoline((PBYTE)SetScrollInfoT, (PBYTE)SetScrollInfoD);
                ::DetourFunctionWithTrampoline((PBYTE)GetScrollInfoT, (PBYTE)GetScrollInfoD);
                ::DetourFunctionWithTrampoline((PBYTE)SetScrollPosT, (PBYTE)SetScrollPosD);
                ::DetourFunctionWithTrampoline((PBYTE)GetScrollPosT, (PBYTE)GetScrollPosD);
                ::DetourFunctionWithTrampoline((PBYTE)SetScrollRangeT, (PBYTE)SetScrollRangeD);
                ::DetourFunctionWithTrampoline((PBYTE)GetScrollRangeT, (PBYTE)GetScrollRangeD);
                ::DetourFunctionWithTrampoline((PBYTE)ShowScrollBarT, (PBYTE)ShowScrollBarD);
                ::DetourFunctionWithTrampoline((PBYTE)EnableScrollBarT, (PBYTE)EnableScrollBarD);
                
            return 1;
            #endif
            }



            //////////////////////////////////////////////////////////////////////////
            /// 注銷鉤子
            //////////////////////////////////////////////////////////////////////////

            LONG UnRegisterSkinSB(VOID)
            {
            #if (DETOURS_VERSION >= 20100)    
                
            // 卸載鉤子
                ::DetourDetach(&(PVOID&)SetScrollInfoT, SetScrollInfoD);
                ::DetourDetach(
            &(PVOID&)GetScrollInfoT, GetScrollInfoD);
                ::DetourDetach(
            &(PVOID&)SetScrollPosT, SetScrollPosD);
                ::DetourDetach(
            &(PVOID&)GetScrollPosT, GetScrollPosD);
                ::DetourDetach(
            &(PVOID&)SetScrollRangeT, SetScrollRangeD);
                ::DetourDetach(
            &(PVOID&)GetScrollRangeT, GetScrollRangeD);
                ::DetourDetach(
            &(PVOID&)ShowScrollBarT, ShowScrollBarD);
                ::DetourDetach(
            &(PVOID&)EnableScrollBarT, EnableScrollBarD);
            #else
                ::DetourRemove((PBYTE)SetScrollInfoT, (PBYTE)SetScrollInfoD);
                ::DetourRemove((PBYTE)SetScrollPosT, (PBYTE)SetScrollPosD);
                ::DetourRemove((PBYTE)GetScrollInfoT, (PBYTE)GetScrollInfoD);
                ::DetourRemove((PBYTE)GetScrollPosT, (PBYTE)GetScrollPosD);
                ::DetourRemove((PBYTE)SetScrollRangeT, (PBYTE)SetScrollRangeD);
                ::DetourRemove((PBYTE)GetScrollRangeT, (PBYTE)GetScrollRangeD);
                ::DetourRemove((PBYTE)ShowScrollBarT, (PBYTE)ShowScrollBarD);
                ::DetourRemove((PBYTE)EnableScrollBarT, (PBYTE)EnableScrollBarD);
            #endif
                
            return 1;
            }



            #endif

            在InitInstance()里面使用:RegisterSkinSB(),
            在RegisterSkinSB中使用;UnRegisterSkinSB().

            posted on 2010-10-28 14:34 楊粼波 閱讀(1209) 評論(0)  編輯 收藏 引用

            精品乱码久久久久久久| 久久久国产亚洲精品| 亚洲综合熟女久久久30p| 欧美久久久久久午夜精品| 青青草国产精品久久| 精品午夜久久福利大片| 99精品国产在热久久无毒不卡 | jizzjizz国产精品久久| 久久国产精品99国产精| 国产精品久久久久久久久鸭| 91精品国产乱码久久久久久 | 色综合合久久天天给综看| 久久精品国产亚洲一区二区三区 | 国内精品久久久久影院亚洲| 一级做a爰片久久毛片免费陪| 久久亚洲熟女cc98cm| 日本人妻丰满熟妇久久久久久| 天堂无码久久综合东京热| 久久天天躁狠狠躁夜夜2020| 亚洲Av无码国产情品久久| 国产成人久久精品一区二区三区| 久久综合狠狠综合久久综合88| 99久久这里只有精品| 久久精品国产精品亚洲人人 | 亚洲精品tv久久久久久久久| MM131亚洲国产美女久久| 亚洲欧美日韩精品久久| 久久精品综合网| 日韩精品国产自在久久现线拍| 色播久久人人爽人人爽人人片aV| 亚洲中文字幕无码久久2017| 国产福利电影一区二区三区,免费久久久久久久精| 91久久精品无码一区二区毛片| 18禁黄久久久AAA片| 久久99国产精品一区二区| 婷婷久久综合| 久久r热这里有精品视频| 久久亚洲AV成人无码软件| 国产精品免费久久久久影院| 亚洲AV无码成人网站久久精品大| 久久精品国产国产精品四凭|