📄 srccsb_detours.c
字号:
#include <windows.h>
#include "coolsb_detours.h"
#include "..\coolsb\coolscroll.h"
#include "detours.h"
#pragma warning(disable:4100) // Trampolines don't use formal parameters.
DETOUR_TRAMPOLINE(BOOL WINAPI Detour_EnableScrollBar(HWND hwnd, int wSBflags, UINT wArrows), EnableScrollBar);
DETOUR_TRAMPOLINE(BOOL WINAPI Detour_GetScrollInfo (HWND hwnd, int fnBar, LPSCROLLINFO lpsi), GetScrollInfo);
DETOUR_TRAMPOLINE(int WINAPI Detour_GetScrollPos (HWND hwnd, int nBar), GetScrollPos);
DETOUR_TRAMPOLINE(BOOL WINAPI Detour_GetScrollRange (HWND hwnd, int nBar, LPINT lpMinPos, LPINT lpMaxPos), GetScrollRange);
DETOUR_TRAMPOLINE(int WINAPI Detour_SetScrollInfo (HWND hwnd, int fnBar, LPSCROLLINFO lpsi, BOOL fRedraw), SetScrollInfo);
DETOUR_TRAMPOLINE(int WINAPI Detour_SetScrollPos (HWND hwnd, int nBar, int nPos, BOOL fRedraw), SetScrollPos);
DETOUR_TRAMPOLINE(int WINAPI Detour_SetScrollRange (HWND hwnd, int nBar, int nMinPos, int nMaxPos, BOOL fRedraw), SetScrollRange);
DETOUR_TRAMPOLINE(BOOL WINAPI Detour_ShowScrollBar (HWND hwnd, int wBar, BOOL fShow), ShowScrollBar);
static BOOL WINAPI Tramp_EnableScrollBar(HWND hwnd, int wSBflags, UINT wArrows)
{
if(CoolSB_IsCoolScrollEnabled(hwnd))
return CoolSB_EnableScrollBar(hwnd, wSBflags, wArrows);
else
return Detour_EnableScrollBar(hwnd, wSBflags, wArrows);
}
static BOOL WINAPI Tramp_GetScrollInfo(HWND hwnd, int fnBar, LPSCROLLINFO lpsi)
{
if(CoolSB_IsCoolScrollEnabled(hwnd))
return CoolSB_GetScrollInfo(hwnd, fnBar, lpsi);
else
return Detour_GetScrollInfo(hwnd, fnBar, lpsi);
}
static int WINAPI Tramp_GetScrollPos(HWND hwnd, int nBar)
{
if(CoolSB_IsCoolScrollEnabled(hwnd))
return CoolSB_GetScrollPos(hwnd, nBar);
else
return Detour_GetScrollPos(hwnd, nBar);
}
static BOOL WINAPI Tramp_GetScrollRange(HWND hwnd, int nBar, LPINT lpMinPos, LPINT lpMaxPos)
{
if(CoolSB_IsCoolScrollEnabled(hwnd))
return CoolSB_GetScrollRange(hwnd, nBar, lpMinPos, lpMaxPos);
else
return Detour_GetScrollRange(hwnd, nBar, lpMinPos, lpMaxPos);
}
static int WINAPI Tramp_SetScrollInfo(HWND hwnd, int fnBar, LPSCROLLINFO lpsi, BOOL fRedraw)
{
if(CoolSB_IsCoolScrollEnabled(hwnd))
return CoolSB_SetScrollInfo(hwnd, fnBar, lpsi, fRedraw);
else
return Detour_SetScrollInfo(hwnd, fnBar, lpsi, fRedraw);
}
static int WINAPI Tramp_SetScrollPos(HWND hwnd, int nBar, int nPos, BOOL fRedraw)
{
if(CoolSB_IsCoolScrollEnabled(hwnd))
return CoolSB_SetScrollPos(hwnd, nBar, nPos, fRedraw);
else
return Detour_SetScrollPos(hwnd, nBar, nPos, fRedraw);
}
static int WINAPI Tramp_SetScrollRange(HWND hwnd, int nBar, int nMinPos, int nMaxPos, BOOL fRedraw)
{
if(CoolSB_IsCoolScrollEnabled(hwnd))
return CoolSB_SetScrollRange(hwnd, nBar, nMinPos, nMaxPos, fRedraw);
else
return Detour_SetScrollRange(hwnd, nBar, nMinPos, nMaxPos, fRedraw);
}
static BOOL WINAPI Tramp_ShowScrollBar (HWND hwnd, int wBar, BOOL fShow)
{
if(CoolSB_IsCoolScrollEnabled(hwnd))
return CoolSB_ShowScrollBar(hwnd, wBar, fShow);
else
return Detour_ShowScrollBar(hwnd, wBar, fShow);
}
BOOL WINAPI CoolSB_InitializeApp(void)
{
DWORD dwVersion = GetVersion();
// Only available under Windows NT, 2000 and XP
if(dwVersion < 0x80000000)
{
DetourFunctionWithTrampoline((PBYTE)Detour_EnableScrollBar, (PBYTE)Tramp_EnableScrollBar);
DetourFunctionWithTrampoline((PBYTE)Detour_GetScrollInfo, (PBYTE)Tramp_GetScrollInfo);
DetourFunctionWithTrampoline((PBYTE)Detour_GetScrollPos, (PBYTE)Tramp_GetScrollPos);
DetourFunctionWithTrampoline((PBYTE)Detour_GetScrollRange, (PBYTE)Tramp_GetScrollRange);
DetourFunctionWithTrampoline((PBYTE)Detour_SetScrollInfo, (PBYTE)Tramp_SetScrollInfo);
DetourFunctionWithTrampoline((PBYTE)Detour_SetScrollPos, (PBYTE)Tramp_SetScrollPos);
DetourFunctionWithTrampoline((PBYTE)Detour_SetScrollRange, (PBYTE)Tramp_SetScrollRange);
DetourFunctionWithTrampoline((PBYTE)Detour_ShowScrollBar, (PBYTE)Tramp_ShowScrollBar);
// don't actually use this feature within coolsb yet, but we might need it
CoolSB_SetESBProc(Detour_EnableScrollBar);
return TRUE;
}
else
{
return FALSE;
}
}
BOOL WINAPI CoolSB_UninitializeApp(void)
{
DWORD dwVersion = GetVersion();
// Only available under Windows NT, 2000 and XP
if(dwVersion < 0x80000000)
{
DetourRemove((PBYTE)Detour_EnableScrollBar, (PBYTE)Tramp_EnableScrollBar);
DetourRemove((PBYTE)Detour_GetScrollInfo, (PBYTE)Tramp_GetScrollInfo);
DetourRemove((PBYTE)Detour_GetScrollPos, (PBYTE)Tramp_GetScrollPos);
DetourRemove((PBYTE)Detour_GetScrollRange, (PBYTE)Tramp_GetScrollRange);
DetourRemove((PBYTE)Detour_SetScrollInfo, (PBYTE)Tramp_SetScrollInfo);
DetourRemove((PBYTE)Detour_SetScrollPos, (PBYTE)Tramp_SetScrollPos);
DetourRemove((PBYTE)Detour_SetScrollRange, (PBYTE)Tramp_SetScrollRange);
DetourRemove((PBYTE)Detour_ShowScrollBar, (PBYTE)Tramp_ShowScrollBar);
// don't actually use this feature within coolsb yet, but we might need it
CoolSB_SetESBProc(EnableScrollBar);
return TRUE;
}
else
{
return FALSE;
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -