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

牽著老婆滿街逛

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

SkinSB皮膚滾動(dòng)條庫(kù)的一個(gè)幫助頭文件

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

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


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


#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);
}



//////////////////////////////////////////////////////////////////////////
/// 注冊(cè)鉤子
//////////////////////////////////////////////////////////////////////////

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) 評(píng)論(0)  編輯 收藏 引用


只有注冊(cè)用戶登錄后才能發(fā)表評(píng)論。
網(wǎng)站導(dǎo)航: 博客園   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>
            免费成人av在线看| 久久精品国产亚洲a| 欧美激情一区二区三区在线| 亚洲制服少妇| 亚洲一区二区三区成人在线视频精品| 亚洲欧美影音先锋| 亚洲永久字幕| 欧美在线一区二区三区| 欧美在线影院在线视频| 欧美专区日韩专区| 久久人人97超碰国产公开结果| 性8sex亚洲区入口| 蜜臀久久99精品久久久久久9| 另类综合日韩欧美亚洲| 亚洲国产欧美日韩另类综合| 亚洲国产精品久久久久婷婷884| 国产精品国产福利国产秒拍 | 看片网站欧美日韩| 久久九九免费视频| 免费精品视频| 国产精品九九| 亚洲高清av| 亚洲综合日韩在线| 麻豆成人91精品二区三区| 日韩视频在线一区二区| 久久九九国产精品| 国产精品国产三级国产普通话99 | 欧美日韩三级视频| 国内外成人在线| 一区二区三区色| 免费观看国产成人| 亚洲在线网站| 欧美日韩国产在线一区| 在线看国产日韩| 小处雏高清一区二区三区| 亚洲高清视频的网址| 亚洲自拍偷拍网址| 欧美人体xx| 亚洲国产成人精品视频| 久久国产视频网站| 一本高清dvd不卡在线观看| 免费欧美日韩| 韩国精品一区二区三区| 欧美尤物巨大精品爽| 一区二区91| 欧美日韩综合不卡| 一区二区三区 在线观看视频| 男女av一区三区二区色多| 午夜精品久久久久久| 国产精品久久久久久久午夜片 | 国产综合香蕉五月婷在线| 在线一区视频| 亚洲精品女av网站| 久久久xxx| 国语精品中文字幕| 久久久久久久高潮| 久久精品成人一区二区三区 | 亚洲欧洲日韩综合二区| 你懂的成人av| 久久夜色精品国产亚洲aⅴ| 很黄很黄激情成人| 久久一区中文字幕| 久久伊人精品天天| 亚洲国产日韩精品| 欧美国产三区| 欧美精品乱人伦久久久久久| 日韩亚洲不卡在线| 在线观看日韩av电影| 另类人畜视频在线| 久久综合免费视频影院| 亚洲国产精品久久| 亚洲国产中文字幕在线观看| 欧美激情视频网站| 亚洲欧美一区二区三区极速播放| 亚洲欧美国产视频| 激情丁香综合| 亚洲国产精品视频一区| 欧美日韩精品福利| 亚欧成人在线| 久久久精品动漫| 亚洲激情综合| 国产精品99久久久久久久久| 国产欧美三级| 欧美不卡一区| 欧美香蕉大胸在线视频观看| 久久精品国产综合精品| 久久一区二区精品| 亚洲天堂免费观看| 久久国产乱子精品免费女| 亚洲七七久久综合桃花剧情介绍| 99re国产精品| 国产综合欧美| 99视频在线观看一区三区| 国产午夜亚洲精品不卡| 亚洲国产精品va在线观看黑人| 国产精品久久久99| 欧美国产精品人人做人人爱| 国产精品www色诱视频| 久久影视三级福利片| 欧美日韩国产在线播放| 狼人天天伊人久久| 国产精品久久久| 亚洲电影下载| 国产视频精品xxxx| 日韩一级黄色片| 1000部精品久久久久久久久| 国产精品99久久久久久久久| 亚洲人午夜精品免费| 欧美一区二区三区日韩视频| 99这里只有久久精品视频| 久久精品欧美日韩精品| 亚洲欧美精品在线观看| 欧美福利网址| 欧美xxxx在线观看| 国产欧美一区二区三区久久| 日韩亚洲一区在线播放| 亚洲精选视频在线| 久久综合免费视频影院| 久久一区二区三区国产精品| 国产精品日韩欧美一区二区| 日韩香蕉视频| 99v久久综合狠狠综合久久| 久久久久久穴| 久久久久久久激情视频| 国产精品一区二区黑丝| 亚洲视频导航| 亚洲欧美精品一区| 欧美午夜不卡影院在线观看完整版免费| 欧美成人资源网| 亚洲第一福利社区| 久久亚洲一区| 亚洲电影免费观看高清完整版在线 | 欧美日韩一区三区| 91久久综合亚洲鲁鲁五月天| 伊伊综合在线| 久久精品女人的天堂av| 久久精品系列| 国产综合欧美在线看| 欧美在线视频网站| 久久综合电影一区| 伊人久久综合97精品| 久久久久综合网| 欧美高清hd18日本| 最新日韩在线视频| 欧美二区不卡| 亚洲精品一区二区网址| 亚洲视频中文| 国产欧美日本| 久久久久.com| 欧美黑人一区二区三区| 99re6热在线精品视频播放速度| 欧美激情区在线播放| 一区二区三区视频在线播放| 午夜在线一区二区| 国内成人自拍视频| 欧美国产高清| 中文av字幕一区| 久久久久看片| 亚洲人成网在线播放| 欧美天堂亚洲电影院在线播放 | 午夜精品久久久久久久久久久| 欧美专区亚洲专区| 亚洲激情在线观看视频免费| 欧美日韩精品一本二本三本| 亚洲一区欧美一区| 久久综合精品一区| 一卡二卡3卡四卡高清精品视频| 国产精品久久999| 久久久天天操| 99视频精品免费观看| 久久婷婷国产综合精品青草 | 免费日韩av电影| 宅男精品视频| 狠狠色丁香婷婷综合| 欧美国产日韩精品| 午夜久久电影网| 91久久综合| 久久久久久网| 亚洲视频精品在线| 在线精品观看| 国产偷国产偷亚洲高清97cao | 亚洲电影视频在线| 国产精品久久久999| 欧美ab在线视频| 新狼窝色av性久久久久久| 亚洲国产毛片完整版| 久久人人97超碰精品888| 一本大道av伊人久久综合| 国内伊人久久久久久网站视频| 欧美乱大交xxxxx| 久久精品视频va| 亚洲一区国产| 一本大道av伊人久久综合| 欧美激情四色| 久久综合狠狠综合久久综合88 | 亚洲综合精品四区| 亚洲三级影片| 欧美a级片网| 久久久久高清| 欧美尤物巨大精品爽|