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

牽著老婆滿街逛

嚴以律己,寬以待人. 三思而后行.
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 楊粼波 閱讀(1219) 評論(0)  編輯 收藏 引用


只有注冊用戶登錄后才能發表評論。
網站導航: 博客園   IT新聞   BlogJava   博問   Chat2DB   管理


青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品
  • <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>
            欧美深夜影院| 欧美在线首页| 亚洲国产欧美国产综合一区| 久久米奇亚洲| 99成人免费视频| 亚洲天堂成人| 在线观看不卡| 一区二区三区蜜桃网| 国产一区二区三区高清| 欧美丰满高潮xxxx喷水动漫| 国产精品第一页第二页第三页| 久久青草欧美一区二区三区| 欧美a级片网站| 久久精品盗摄| 欧美三级日韩三级国产三级| 美女啪啪无遮挡免费久久网站| 欧美日韩亚洲一区二区三区在线观看| 久久九九热re6这里有精品| 欧美日韩小视频| 美女在线一区二区| 国产精品一区二区三区久久 | 久久人人97超碰精品888| 亚洲视频狠狠| 农村妇女精品| 久久免费黄色| 国产精品手机在线| 99精品欧美一区二区三区综合在线| 国内外成人在线| 亚洲欧美精品中文字幕在线| 一区二区三区精品在线| 久久久久久久一区二区三区| 午夜国产一区| 欧美日韩精品欧美日韩精品| 久久久精品日韩欧美| 国产精品欧美日韩一区| 亚洲国产精品专区久久| 国产综合视频| 亚洲一品av免费观看| 亚洲国产精品久久久久秋霞不卡| 亚洲一二三四区| 一区二区国产精品| 老司机成人在线视频| 欧美永久精品| 欧美日韩一区二区三区高清| 欧美成人免费全部观看天天性色| 国产精品久久久一本精品| 欧美激情视频在线播放 | 欧美成人在线免费观看| 久久人人97超碰国产公开结果| 欧美日韩一区二区在线观看| 亚洲欧美国产视频| 亚洲一区精彩视频| 久久久精品视频成人| 亚洲欧美一区二区三区极速播放| 欧美顶级少妇做爰| 麻豆视频一区二区| 国产欧美日韩亚洲精品| 99视频精品免费观看| 亚洲免费高清| 久久久久99| 久久手机免费观看| 国产一区二区精品久久99| 亚洲女人天堂成人av在线| 亚洲天堂免费观看| 欧美日韩黄色一区二区| 亚洲美女视频在线免费观看| 国产亚洲二区| 夜夜嗨av一区二区三区| 亚洲视频第一页| 欧美日韩一区二区免费视频| 亚洲美女中文字幕| 一区二区三区免费观看| 欧美黄网免费在线观看| 亚洲国产精品黑人久久久| 亚洲国产欧美一区| 美女成人午夜| 亚洲高清久久网| 亚洲裸体视频| 欧美日韩aaaaa| 日韩小视频在线观看专区| 一本色道久久综合亚洲精品小说 | 亚洲高清视频一区| 免费成人在线观看视频| 久久在线免费观看视频| 激情综合色综合久久综合| 久久亚洲视频| 亚洲精品国精品久久99热| 亚洲一区中文| 国内欧美视频一区二区| 欧美搞黄网站| 亚洲香蕉在线观看| 久久先锋影音av| 亚洲国产综合在线看不卡| 欧美高清视频在线观看| 一区二区三区高清不卡| 亚洲麻豆av| 亚洲一区二区三区四区在线观看| 欧美大成色www永久网站婷| 亚洲美女黄色片| 欧美视频一区二区三区在线观看| 亚洲免费网站| 欧美高清视频一区| 亚洲午夜电影网| 国产日韩欧美在线播放不卡| 免费成人黄色| 亚洲欧美日本国产专区一区| 蜜臀91精品一区二区三区| 日韩视频一区二区三区在线播放免费观看 | 久久亚洲不卡| 欧美成人精品福利| 亚洲欧美日韩高清| 小黄鸭精品aⅴ导航网站入口| 国产免费成人av| 另类激情亚洲| 亚洲一区免费视频| 欧美成人伊人久久综合网| 亚洲天堂第二页| 樱桃视频在线观看一区| 国产精品高清网站| 亚洲另类自拍| 亚洲最新视频在线| 极品中文字幕一区| 欧美日韩视频在线第一区| 久久久久久国产精品mv| 99视频超级精品| 欧美国产91| 久久久久一区二区| 午夜精品免费视频| 亚洲裸体俱乐部裸体舞表演av| 国产午夜精品一区理论片飘花| 欧美日韩国产精品一区| 久久亚洲图片| 久久av一区二区三区| 99热这里只有精品8| 亚洲成人在线视频播放| 久久久久欧美| 亚洲精品视频一区| 欧美jizzhd精品欧美巨大免费| 99国产精品久久久久久久成人热| 久久精品一本久久99精品| 一区二区三区视频在线观看| 亚洲第一精品久久忘忧草社区| 国产午夜精品视频免费不卡69堂| 欧美日本一区二区三区| 免费精品99久久国产综合精品| 欧美一区二区精美| 亚洲视频在线观看免费| 日韩午夜高潮| 亚洲精品久久久久久一区二区| 欧美激情一区二区三区在线视频| 久久精品亚洲精品国产欧美kt∨| 在线视频一区二区| 一区二区三区免费网站| 一区二区三区在线观看国产| 国产毛片精品国产一区二区三区| 欧美性一区二区| 欧美视频一区二区在线观看| 欧美日韩一区自拍| 欧美日韩 国产精品| 欧美激情第五页| 欧美精品久久久久久| 欧美精品一二三| 欧美理论电影在线播放| 欧美日韩国产黄| 欧美午夜一区二区| 国产精品爽黄69| 国产欧美 在线欧美| 国产专区欧美专区| 国产精品久久影院| 国产一区二区日韩| 在线观看亚洲精品| 亚洲精品国产拍免费91在线| 亚洲精选久久| 一区二区三区三区在线| 亚洲午夜电影网| 久久本道综合色狠狠五月| 久久久水蜜桃| 欧美激情网友自拍| 99亚洲伊人久久精品影院红桃| 亚洲网址在线| 久久av最新网址| 麻豆精品在线观看| 欧美久久一级| 国产亚洲一区在线| 最近中文字幕日韩精品| 国模吧视频一区| 亚洲欧洲精品天堂一级| 在线一区亚洲| 欧美亚洲免费在线| 久久精品麻豆| 久久av资源网| 麻豆91精品91久久久的内涵| 欧美不卡高清| 国产精品黄色在线观看| 韩国在线视频一区| 一区二区三区日韩欧美精品| 欧美怡红院视频一区二区三区| 免费试看一区| 亚洲午夜影视影院在线观看| 久久人人超碰|