変更するために「user32.dll」の「GetSysColor」関数をフックするのに問題があります
COLOR_ACTIVECAPTION
COLOR_CAPTIONTEXT
COLOR_INACTIVECAPTION
COLOR_INACTIVECAPTIONTEXT
私のWindowsフッククラスは次のようになります:
CHook(const TCHAR * module, const TCHAR * procname, const void * pNewProc)
{
HINSTANCE hMod = GetModuleHandle(module);
m_pProc = (BYTE*)GetProcAddress(hMod, procname);
if (m_pProc)
{
for (int i = 0; i < 5; i++)
{
m_Storage[i] = m_pProc[i];
}
DWORD dwOldProtect;
VirtualProtect(m_pProc, 5, PAGE_EXECUTE_READWRITE, & dwOldProtect);
m_pProc[0] = 0xE9;
*(unsigned*)(m_pProc + 1) = (unsigned)pNewProc - (unsigned)(m_pProc + 5);
}
}
~CHook()
{
if (m_pProc && (m_pProc[0] == 0xE9))
{
for (int i = 0; i < 5; i++)
{
m_pProc[i] = m_Storage[i];
}
}
}
private:
BYTE* m_pProc;
BYTE m_Storage[5];
カスタムの getsyscolor メソッドを作成しました
static COLORREF WINAPI GetCustomSysColor(int nIndex)
{
return RGB(0xFF, 0x00, 0x00);
}
すべてのメッセージがその関数を介してルーティングされるかどうかをテストします (すべてが最後に赤くなるはずです)。経由でインストールしました
CHook theHook("user32.dll", "GetSysColor", GetCustomSysColor);
残念ながら、すべてが赤く塗られるわけではなく、アイコンなどの一部だけです。しかし、最初に述べた色は以前のシステム設定です。キャプションは依然として青く、白いテキストが表示されます。私もそれをデバッグし、キャプションの色が GetCustomSysColors メソッドに到着しました。
キャプションのために別の winapi 呼び出しが行われているのか、それとも重要なことを見逃していないのか、誰かが知っているかもしれません。どうもありがとうございました!
乾杯、クリス