mirror of
https://gitflic.ru/project/openide/openide.git
synced 2026-09-18 09:34:34 +07:00
Eliminate focus killer
This commit is contained in:
Binary file not shown.
Binary file not shown.
@@ -1,339 +0,0 @@
|
||||
/*
|
||||
Module : HookImportFunction.cpp
|
||||
Purpose: Defines the implementation for code to hook a call to any imported Win32 SDK
|
||||
Created: PJN / 23-10-1999
|
||||
History: PJN / 01-01-2001 1. Now includes copyright message in the source code and documentation.
|
||||
2. Fixed an access violation in where I was getting the name of the import
|
||||
function but not checking for failure.
|
||||
3. Fixed a compiler error where I was incorrectly casting to a PDWORD instead
|
||||
of a DWORD
|
||||
PJN / 20-04-2002 1. Fixed a potential infinite loop in HookImportFunctionByName. Thanks to
|
||||
David Defoort for spotting this problem.
|
||||
|
||||
Copyright (c) 1996 - 2002 by PJ Naughter. (Web: www.naughter.com, Email: pjna@naughter.com)
|
||||
|
||||
All rights reserved.
|
||||
|
||||
Copyright / Usage Details:
|
||||
|
||||
You are allowed to include the source code in any product (commercial, shareware, freeware or otherwise)
|
||||
when your product is released in binary form. You are allowed to modify the source code in any way you want
|
||||
except you cannot modify the copyright details at the top of each module. If you want to distribute source
|
||||
code with your application, then you are only allowed to distribute versions released by the author. This is
|
||||
to maintain a single distribution point for the source code.
|
||||
|
||||
*/
|
||||
|
||||
|
||||
////////////////// Includes ////////////////////////////////////
|
||||
|
||||
#include <windows.h>
|
||||
#include "HookImportFunction.h"
|
||||
|
||||
#define ASSERT(e)
|
||||
#define VERIFY(e) e
|
||||
#define TRACE0(s) OutputDebugString(s)
|
||||
#define _T(s) s
|
||||
|
||||
////////////////// Defines / Locals ////////////////////////////
|
||||
|
||||
#ifdef _DEBUG
|
||||
#define new DEBUG_NEW
|
||||
#undef THIS_FILE
|
||||
static char THIS_FILE[] = __FILE__;
|
||||
#endif
|
||||
|
||||
#define MakePtr(cast, ptr, AddValue) (cast)((DWORD)(ptr)+(DWORD)(AddValue))
|
||||
|
||||
BOOL IsNT();
|
||||
|
||||
|
||||
|
||||
////////////////// Implementation //////////////////////////////
|
||||
|
||||
BOOL HookImportFunctionsByName(HMODULE hModule, LPCSTR szImportMod, UINT uiCount,
|
||||
LPHOOKFUNCDESC paHookArray, PROC* paOrigFuncs, UINT* puiHooked)
|
||||
{
|
||||
// Double check the parameters.
|
||||
ASSERT(szImportMod);
|
||||
ASSERT(uiCount);
|
||||
ASSERT(!IsBadReadPtr(paHookArray, sizeof(HOOKFUNCDESC)*uiCount));
|
||||
|
||||
#ifdef _DEBUG
|
||||
if (paOrigFuncs)
|
||||
ASSERT(!IsBadWritePtr(paOrigFuncs, sizeof(PROC)*uiCount));
|
||||
if (puiHooked)
|
||||
ASSERT(!IsBadWritePtr(puiHooked, sizeof(UINT)));
|
||||
|
||||
//Check each function name in the hook array.
|
||||
for (UINT i = 0; i<uiCount; i++)
|
||||
{
|
||||
ASSERT(paHookArray[i].szFunc);
|
||||
ASSERT(*paHookArray[i].szFunc != _T('\0'));
|
||||
|
||||
//If the proc is not NULL, then it is checked.
|
||||
if (paHookArray[i].pProc)
|
||||
ASSERT(!IsBadCodePtr(paHookArray[i].pProc));
|
||||
}
|
||||
#endif
|
||||
|
||||
//Do the parameter validation for real.
|
||||
if (uiCount == 0 || szImportMod == NULL || IsBadReadPtr(paHookArray, sizeof(HOOKFUNCDESC)* uiCount))
|
||||
{
|
||||
ASSERT(FALSE);
|
||||
SetLastErrorEx(ERROR_INVALID_ADDRESS, SLE_ERROR);
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
if (paOrigFuncs && IsBadWritePtr(paOrigFuncs, sizeof(PROC)*uiCount))
|
||||
{
|
||||
ASSERT(FALSE);
|
||||
SetLastErrorEx(ERROR_INVALID_ADDRESS, SLE_ERROR);
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
if (puiHooked && IsBadWritePtr(puiHooked, sizeof(UINT)))
|
||||
{
|
||||
ASSERT(FALSE);
|
||||
SetLastErrorEx(ERROR_INVALID_ADDRESS, SLE_ERROR );
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
//Is this a system DLL, which Windows95 will not let you patch
|
||||
//since it is above the 2GB line?
|
||||
if (!IsNT() && ((DWORD)hModule >= 0x80000000))
|
||||
{
|
||||
#ifdef _DEBUG
|
||||
CString sMsg;
|
||||
sMsg.Format(_T("Could not hook module %x because we are on Win9x and it is in shared memory\n"), hModule);
|
||||
OutputDebugString(sMsg);
|
||||
#endif
|
||||
SetLastErrorEx(ERROR_INVALID_HANDLE, SLE_ERROR);
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
//TODO TODO
|
||||
// Should each item in the hook array be checked in release builds?
|
||||
|
||||
if (puiHooked)
|
||||
*puiHooked = 0; //Set the number of functions hooked to zero.
|
||||
|
||||
//Get the specific import descriptor.
|
||||
PIMAGE_IMPORT_DESCRIPTOR pImportDesc = GetNamedImportDescriptor(hModule, szImportMod);
|
||||
if (NULL == pImportDesc)
|
||||
return FALSE; // The requested module was not imported.
|
||||
|
||||
HINSTANCE hImportMod = GetModuleHandle(szImportMod);
|
||||
if (NULL == hImportMod)
|
||||
{
|
||||
ASSERT(FALSE);
|
||||
SetLastErrorEx(ERROR_HOOK_NEEDS_HMOD, SLE_ERROR);
|
||||
return FALSE; // The requested module was not available.
|
||||
}
|
||||
|
||||
//Set all the values in paOrigFuncs to NULL.
|
||||
if (NULL != paOrigFuncs)
|
||||
memset(paOrigFuncs, NULL, sizeof(PROC)*uiCount);
|
||||
|
||||
//Get the original thunk information for this DLL. I cannot use
|
||||
// the thunk information stored in the pImportDesc->FirstThunk
|
||||
// because the that is the array that the loader
|
||||
// has already bashed to fix up all the imports.
|
||||
// This pointer gives us acess to the function names.
|
||||
PIMAGE_THUNK_DATA pOrigThunk = MakePtr(PIMAGE_THUNK_DATA, hModule, pImportDesc->OriginalFirstThunk);
|
||||
|
||||
//Get the array pointed to by the pImportDesc->FirstThunk.
|
||||
// This is where I will do the actual bash.
|
||||
PIMAGE_THUNK_DATA pRealThunk = MakePtr(PIMAGE_THUNK_DATA, hModule, pImportDesc->FirstThunk);
|
||||
|
||||
//Loop through and look for the one that matches the name.
|
||||
for (; NULL != pOrigThunk->u1.Function;
|
||||
// Increment both tables.
|
||||
pOrigThunk++, pRealThunk++)
|
||||
{
|
||||
//Only look at those that are imported by name, not ordinal.
|
||||
if (IMAGE_ORDINAL_FLAG == (IMAGE_ORDINAL_FLAG & pOrigThunk->u1.Ordinal))
|
||||
continue;
|
||||
|
||||
//Look get the name of this imported function.
|
||||
PIMAGE_IMPORT_BY_NAME pByName = MakePtr(PIMAGE_IMPORT_BY_NAME, hModule, pOrigThunk->u1.AddressOfData);
|
||||
|
||||
if (IsBadReadPtr(pByName, MAX_PATH+4))
|
||||
{
|
||||
SetLastErrorEx(ERROR_INVALID_ADDRESS, SLE_ERROR);
|
||||
continue;
|
||||
}
|
||||
|
||||
//If the name starts with NULL, then just skip to next.
|
||||
if (_T('\0') == pByName->Name[0])
|
||||
continue;
|
||||
|
||||
//Determines if we do the hook.
|
||||
BOOL bDoHook = FALSE;
|
||||
|
||||
//TODO {
|
||||
// Might want to consider bsearch here.
|
||||
//TODO }
|
||||
//See if the particular function name is in the import
|
||||
// list. It might be good to consider requiring the
|
||||
// paHookArray to be in sorted order so bsearch could be
|
||||
// used so the lookup will be faster. However, the size of
|
||||
// uiCount coming into this function should be rather small
|
||||
// but it is called for each function imported by szImportMod.
|
||||
UINT i;
|
||||
for (i = 0; i<uiCount; i++)
|
||||
{
|
||||
if ((paHookArray[i].szFunc[0] == pByName->Name[0]) &&
|
||||
(strcmpi(paHookArray[i].szFunc, (char*)pByName->Name) == 0))
|
||||
{
|
||||
//If the proc is NULL, kick out, otherwise
|
||||
// go ahead and hook it.
|
||||
if (paHookArray[i].pProc)
|
||||
bDoHook = TRUE;
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
if (FALSE == bDoHook)
|
||||
continue;
|
||||
|
||||
// I found it. Now I need to change the protection to
|
||||
// writable before I do the blast. Note that I am now
|
||||
// blasting into the real thunk area!
|
||||
MEMORY_BASIC_INFORMATION mbi_thunk;
|
||||
VirtualQuery(pRealThunk, &mbi_thunk, sizeof(MEMORY_BASIC_INFORMATION));
|
||||
VERIFY(VirtualProtect(mbi_thunk.BaseAddress, mbi_thunk.RegionSize, PAGE_READWRITE, &mbi_thunk.Protect));
|
||||
|
||||
// Get fast/simple pointer
|
||||
PROC* pFunction = (PROC*) &(pRealThunk->u1.Function);
|
||||
if (*pFunction == paHookArray[i].pProc)
|
||||
{
|
||||
SetLastErrorEx(ERROR_ALREADY_INITIALIZED, SLE_ERROR);
|
||||
return FALSE;
|
||||
}
|
||||
if (IsBadCodePtr(*pFunction))
|
||||
{
|
||||
ASSERT(FALSE);
|
||||
SetLastErrorEx(ERROR_INVALID_ADDRESS, SLE_ERROR);
|
||||
return FALSE;
|
||||
}
|
||||
//Save the original address if requested.
|
||||
if (NULL != paOrigFuncs)
|
||||
{
|
||||
if ((DWORD)(*pFunction) < (DWORD)hImportMod && ((DWORD)(0x80000000) > (DWORD)hImportMod))
|
||||
{
|
||||
ASSERT(FALSE);
|
||||
SetLastErrorEx(ERROR_INVALID_ADDRESS, SLE_ERROR);
|
||||
return FALSE;
|
||||
}
|
||||
if (*pFunction != paOrigFuncs[i])
|
||||
{
|
||||
if (NULL != paOrigFuncs[i])
|
||||
{
|
||||
if (paHookArray[i].pProc != paOrigFuncs[i])
|
||||
{
|
||||
ASSERT(FALSE);
|
||||
SetLastErrorEx(ERROR_INVALID_ADDRESS, SLE_ERROR);
|
||||
return FALSE;
|
||||
}
|
||||
}
|
||||
paOrigFuncs[i] = * pFunction;
|
||||
}
|
||||
}
|
||||
//Do the actual hook.
|
||||
*pFunction = paHookArray[i].pProc;
|
||||
|
||||
//Increment the total number hooked.
|
||||
if (puiHooked)
|
||||
*puiHooked += 1;
|
||||
|
||||
//Change the protection back to what it was before I blasted.
|
||||
DWORD dwOldProtect;
|
||||
VERIFY(VirtualProtect(mbi_thunk.BaseAddress, mbi_thunk.RegionSize, mbi_thunk.Protect, &dwOldProtect));
|
||||
}
|
||||
//All OK, JumpMaster!
|
||||
SetLastError(ERROR_SUCCESS);
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
PIMAGE_IMPORT_DESCRIPTOR GetNamedImportDescriptor(HMODULE hModule, LPCSTR szImportMod)
|
||||
{
|
||||
//Always check parameters.
|
||||
ASSERT(szImportMod);
|
||||
ASSERT(hModule);
|
||||
if ((szImportMod == NULL) || (hModule == NULL))
|
||||
{
|
||||
ASSERT(FALSE);
|
||||
SetLastErrorEx(ERROR_INVALID_PARAMETER, SLE_ERROR);
|
||||
return NULL;
|
||||
}
|
||||
|
||||
//Get the Dos header.
|
||||
PIMAGE_DOS_HEADER pDOSHeader = (PIMAGE_DOS_HEADER) hModule;
|
||||
|
||||
// Is this the MZ header?
|
||||
if (IsBadReadPtr(pDOSHeader, sizeof(IMAGE_DOS_HEADER)) || (pDOSHeader->e_magic != IMAGE_DOS_SIGNATURE))
|
||||
{
|
||||
#ifdef _DEBUG
|
||||
CString sMsg;
|
||||
sMsg.Format(_T("Could not find the MZ Header for %x\n"), hModule);
|
||||
OutputDebugString(sMsg);
|
||||
#endif
|
||||
SetLastErrorEx( ERROR_BAD_EXE_FORMAT, SLE_ERROR);
|
||||
return NULL;
|
||||
}
|
||||
|
||||
// Get the PE header.
|
||||
PIMAGE_NT_HEADERS pNTHeader = MakePtr(PIMAGE_NT_HEADERS, pDOSHeader, pDOSHeader->e_lfanew);
|
||||
|
||||
//Is this a real PE image?
|
||||
if (IsBadReadPtr(pNTHeader, sizeof(IMAGE_NT_HEADERS)) || (pNTHeader->Signature != IMAGE_NT_SIGNATURE))
|
||||
{
|
||||
ASSERT(FALSE);
|
||||
SetLastErrorEx( ERROR_INVALID_EXE_SIGNATURE, SLE_ERROR);
|
||||
return NULL;
|
||||
}
|
||||
|
||||
//If there is no imports section, leave now.
|
||||
if (pNTHeader->OptionalHeader.DataDirectory[IMAGE_DIRECTORY_ENTRY_IMPORT].VirtualAddress == 0)
|
||||
return NULL;
|
||||
|
||||
// Get the pointer to the imports section.
|
||||
PIMAGE_IMPORT_DESCRIPTOR pImportDesc = MakePtr(PIMAGE_IMPORT_DESCRIPTOR, pDOSHeader, pNTHeader->OptionalHeader.DataDirectory[IMAGE_DIRECTORY_ENTRY_IMPORT].VirtualAddress);
|
||||
|
||||
//Loop through the import module descriptors looking for the module whose name matches szImportMod.
|
||||
while (pImportDesc->Name)
|
||||
{
|
||||
PSTR szCurrMod = MakePtr(PSTR, pDOSHeader, pImportDesc->Name);
|
||||
if (stricmp(szCurrMod, szImportMod) == 0)
|
||||
break; // Found it.
|
||||
|
||||
//Look at the next one.
|
||||
pImportDesc++;
|
||||
}
|
||||
|
||||
//If the name is NULL, then the module is not imported.
|
||||
if (pImportDesc->Name == NULL)
|
||||
return NULL;
|
||||
|
||||
//All OK, Jumpmaster!
|
||||
return pImportDesc;
|
||||
}
|
||||
|
||||
BOOL IsNT()
|
||||
{
|
||||
OSVERSIONINFO stOSVI;
|
||||
memset(&stOSVI, NULL, sizeof(OSVERSIONINFO));
|
||||
stOSVI.dwOSVersionInfoSize = sizeof(OSVERSIONINFO);
|
||||
|
||||
BOOL bRet = GetVersionEx(&stOSVI);
|
||||
ASSERT(TRUE == bRet);
|
||||
if (FALSE == bRet)
|
||||
{
|
||||
TRACE0("GetVersionEx failed!\n");
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
//Check the version and call the appropriate thing.
|
||||
return (VER_PLATFORM_WIN32_NT == stOSVI.dwPlatformId);
|
||||
}
|
||||
@@ -1,33 +0,0 @@
|
||||
/*
|
||||
Module : HookImportFunction.h
|
||||
Purpose: Defines the interface for code to hook a call to any imported Win32 SDK
|
||||
Created: PJN / 23-10-1999
|
||||
|
||||
Copyright (c) 1999 by PJ Naughter.
|
||||
All rights reserved.
|
||||
|
||||
*/
|
||||
|
||||
#ifndef __HOOKIMPORTFUNCTION_H__
|
||||
#define __HOOKIMPORTFUNCTION_H__
|
||||
|
||||
|
||||
|
||||
////////////// Structures ///////////////////////////
|
||||
|
||||
typedef struct tag_HOOKFUNCDESC
|
||||
{
|
||||
LPCSTR szFunc; // The name of the function to hook.
|
||||
PROC pProc; // The procedure to blast in.
|
||||
} HOOKFUNCDESC , * LPHOOKFUNCDESC;
|
||||
|
||||
|
||||
|
||||
////////////// Functions ////////////////////////////
|
||||
|
||||
PIMAGE_IMPORT_DESCRIPTOR GetNamedImportDescriptor(HMODULE hModule, LPCSTR szImportMod);
|
||||
BOOL HookImportFunctionsByName(HMODULE hModule, LPCSTR szImportMod, UINT uiCount,
|
||||
LPHOOKFUNCDESC paHookArray, PROC* paOrigFuncs, UINT* puiHooked);
|
||||
|
||||
|
||||
#endif //__HOOKIMPORTEDFUNCTION_H__
|
||||
@@ -1,25 +0,0 @@
|
||||
Microsoft Visual Studio Solution File, Format Version 11.00
|
||||
# Visual Studio 2010
|
||||
Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "focusKiller", "focusKiller.vcxproj", "{6B40296D-5F50-4606-AB84-81FA874CC25A}"
|
||||
EndProject
|
||||
Global
|
||||
GlobalSection(SolutionConfigurationPlatforms) = preSolution
|
||||
Debug|Win32 = Debug|Win32
|
||||
Debug|x64 = Debug|x64
|
||||
Release|Win32 = Release|Win32
|
||||
Release|x64 = Release|x64
|
||||
EndGlobalSection
|
||||
GlobalSection(ProjectConfigurationPlatforms) = postSolution
|
||||
{6B40296D-5F50-4606-AB84-81FA874CC25A}.Debug|Win32.ActiveCfg = Debug|Win32
|
||||
{6B40296D-5F50-4606-AB84-81FA874CC25A}.Debug|Win32.Build.0 = Debug|Win32
|
||||
{6B40296D-5F50-4606-AB84-81FA874CC25A}.Debug|x64.ActiveCfg = Debug|x64
|
||||
{6B40296D-5F50-4606-AB84-81FA874CC25A}.Debug|x64.Build.0 = Debug|x64
|
||||
{6B40296D-5F50-4606-AB84-81FA874CC25A}.Release|Win32.ActiveCfg = Release|Win32
|
||||
{6B40296D-5F50-4606-AB84-81FA874CC25A}.Release|Win32.Build.0 = Release|Win32
|
||||
{6B40296D-5F50-4606-AB84-81FA874CC25A}.Release|x64.ActiveCfg = Release|x64
|
||||
{6B40296D-5F50-4606-AB84-81FA874CC25A}.Release|x64.Build.0 = Release|x64
|
||||
EndGlobalSection
|
||||
GlobalSection(SolutionProperties) = preSolution
|
||||
HideSolutionNode = FALSE
|
||||
EndGlobalSection
|
||||
EndGlobal
|
||||
@@ -1,362 +0,0 @@
|
||||
<?xml version="1.0" encoding="windows-1251"?>
|
||||
<VisualStudioProject
|
||||
ProjectType="Visual C++"
|
||||
Version="8,00"
|
||||
Name="focusKiller"
|
||||
ProjectGUID="{6B40296D-5F50-4606-AB84-81FA874CC25A}"
|
||||
RootNamespace="focusKiller"
|
||||
Keyword="Win32Proj"
|
||||
>
|
||||
<Platforms>
|
||||
<Platform
|
||||
Name="Win32"
|
||||
/>
|
||||
<Platform
|
||||
Name="x64"
|
||||
/>
|
||||
</Platforms>
|
||||
<ToolFiles>
|
||||
</ToolFiles>
|
||||
<Configurations>
|
||||
<Configuration
|
||||
Name="Debug|Win32"
|
||||
OutputDirectory="$(SolutionDir)$(ConfigurationName)"
|
||||
IntermediateDirectory="$(ConfigurationName)"
|
||||
ConfigurationType="2"
|
||||
UseOfMFC="0"
|
||||
CharacterSet="2"
|
||||
>
|
||||
<Tool
|
||||
Name="VCPreBuildEventTool"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCCustomBuildTool"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCXMLDataGeneratorTool"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCWebServiceProxyGeneratorTool"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCMIDLTool"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCCLCompilerTool"
|
||||
Optimization="0"
|
||||
PreprocessorDefinitions="WIN32;_DEBUG;_WINDOWS;_USRDLL;FOCUSKILLER_EXPORTS"
|
||||
MinimalRebuild="true"
|
||||
BasicRuntimeChecks="3"
|
||||
RuntimeLibrary="1"
|
||||
UsePrecompiledHeader="0"
|
||||
WarningLevel="3"
|
||||
Detect64BitPortabilityProblems="true"
|
||||
DebugInformationFormat="4"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCManagedResourceCompilerTool"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCResourceCompilerTool"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCPreLinkEventTool"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCLinkerTool"
|
||||
LinkIncremental="2"
|
||||
GenerateDebugInformation="true"
|
||||
SubSystem="2"
|
||||
TargetMachine="1"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCALinkTool"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCManifestTool"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCXDCMakeTool"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCBscMakeTool"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCFxCopTool"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCAppVerifierTool"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCWebDeploymentTool"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCPostBuildEventTool"
|
||||
/>
|
||||
</Configuration>
|
||||
<Configuration
|
||||
Name="Release|Win32"
|
||||
OutputDirectory="$(SolutionDir)$(ConfigurationName)"
|
||||
IntermediateDirectory="$(ConfigurationName)"
|
||||
ConfigurationType="2"
|
||||
CharacterSet="2"
|
||||
WholeProgramOptimization="1"
|
||||
>
|
||||
<Tool
|
||||
Name="VCPreBuildEventTool"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCCustomBuildTool"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCXMLDataGeneratorTool"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCWebServiceProxyGeneratorTool"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCMIDLTool"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCCLCompilerTool"
|
||||
PreprocessorDefinitions="WIN32;NDEBUG;_WINDOWS;_USRDLL;FOCUSKILLER_EXPORTS"
|
||||
RuntimeLibrary="0"
|
||||
UsePrecompiledHeader="0"
|
||||
WarningLevel="3"
|
||||
Detect64BitPortabilityProblems="true"
|
||||
DebugInformationFormat="3"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCManagedResourceCompilerTool"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCResourceCompilerTool"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCPreLinkEventTool"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCLinkerTool"
|
||||
LinkIncremental="1"
|
||||
GenerateDebugInformation="true"
|
||||
SubSystem="2"
|
||||
OptimizeReferences="2"
|
||||
EnableCOMDATFolding="2"
|
||||
TargetMachine="1"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCALinkTool"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCManifestTool"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCXDCMakeTool"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCBscMakeTool"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCFxCopTool"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCAppVerifierTool"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCWebDeploymentTool"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCPostBuildEventTool"
|
||||
/>
|
||||
</Configuration>
|
||||
<Configuration
|
||||
Name="Debug|x64"
|
||||
OutputDirectory="$(SolutionDir)$(PlatformName)\$(ConfigurationName)"
|
||||
IntermediateDirectory="$(PlatformName)\$(ConfigurationName)"
|
||||
ConfigurationType="2"
|
||||
UseOfMFC="0"
|
||||
CharacterSet="2"
|
||||
>
|
||||
<Tool
|
||||
Name="VCPreBuildEventTool"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCCustomBuildTool"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCXMLDataGeneratorTool"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCWebServiceProxyGeneratorTool"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCMIDLTool"
|
||||
TargetEnvironment="3"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCCLCompilerTool"
|
||||
Optimization="0"
|
||||
PreprocessorDefinitions="WIN32;_DEBUG;_WINDOWS;_USRDLL;FOCUSKILLER_EXPORTS"
|
||||
MinimalRebuild="true"
|
||||
BasicRuntimeChecks="3"
|
||||
RuntimeLibrary="1"
|
||||
UsePrecompiledHeader="0"
|
||||
WarningLevel="3"
|
||||
Detect64BitPortabilityProblems="true"
|
||||
DebugInformationFormat="3"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCManagedResourceCompilerTool"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCResourceCompilerTool"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCPreLinkEventTool"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCLinkerTool"
|
||||
LinkIncremental="2"
|
||||
GenerateDebugInformation="true"
|
||||
SubSystem="2"
|
||||
TargetMachine="17"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCALinkTool"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCManifestTool"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCXDCMakeTool"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCBscMakeTool"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCFxCopTool"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCAppVerifierTool"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCWebDeploymentTool"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCPostBuildEventTool"
|
||||
/>
|
||||
</Configuration>
|
||||
<Configuration
|
||||
Name="Release|x64"
|
||||
OutputDirectory="$(SolutionDir)$(PlatformName)\$(ConfigurationName)"
|
||||
IntermediateDirectory="$(PlatformName)\$(ConfigurationName)"
|
||||
ConfigurationType="2"
|
||||
CharacterSet="2"
|
||||
WholeProgramOptimization="1"
|
||||
>
|
||||
<Tool
|
||||
Name="VCPreBuildEventTool"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCCustomBuildTool"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCXMLDataGeneratorTool"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCWebServiceProxyGeneratorTool"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCMIDLTool"
|
||||
TargetEnvironment="3"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCCLCompilerTool"
|
||||
PreprocessorDefinitions="WIN32;NDEBUG;_WINDOWS;_USRDLL;FOCUSKILLER_EXPORTS"
|
||||
RuntimeLibrary="0"
|
||||
UsePrecompiledHeader="0"
|
||||
WarningLevel="3"
|
||||
Detect64BitPortabilityProblems="true"
|
||||
DebugInformationFormat="3"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCManagedResourceCompilerTool"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCResourceCompilerTool"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCPreLinkEventTool"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCLinkerTool"
|
||||
LinkIncremental="1"
|
||||
GenerateDebugInformation="true"
|
||||
SubSystem="2"
|
||||
OptimizeReferences="2"
|
||||
EnableCOMDATFolding="2"
|
||||
TargetMachine="17"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCALinkTool"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCManifestTool"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCXDCMakeTool"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCBscMakeTool"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCFxCopTool"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCAppVerifierTool"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCWebDeploymentTool"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCPostBuildEventTool"
|
||||
/>
|
||||
</Configuration>
|
||||
</Configurations>
|
||||
<References>
|
||||
</References>
|
||||
<Files>
|
||||
<Filter
|
||||
Name="Source Files"
|
||||
Filter="cpp;c;cc;cxx;def;odl;idl;hpj;bat;asm;asmx"
|
||||
UniqueIdentifier="{4FC737F1-C7A5-4376-A066-2A32D752A2FF}"
|
||||
>
|
||||
<File
|
||||
RelativePath=".\focuskiller.cpp"
|
||||
>
|
||||
</File>
|
||||
<File
|
||||
RelativePath=".\HookImportFunction.cpp"
|
||||
>
|
||||
</File>
|
||||
</Filter>
|
||||
<Filter
|
||||
Name="Header Files"
|
||||
Filter="h;hpp;hxx;hm;inl;inc;xsd"
|
||||
UniqueIdentifier="{93995380-89BD-4b04-88EB-625FBE52EBFB}"
|
||||
>
|
||||
<File
|
||||
RelativePath=".\HookImportFunction.h"
|
||||
>
|
||||
</File>
|
||||
</Filter>
|
||||
<Filter
|
||||
Name="Resource Files"
|
||||
Filter="rc;ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe;resx;tiff;tif;png;wav"
|
||||
UniqueIdentifier="{67DA6AB6-F800-4c08-8B7A-83BB121AAD01}"
|
||||
>
|
||||
</Filter>
|
||||
</Files>
|
||||
<Globals>
|
||||
</Globals>
|
||||
</VisualStudioProject>
|
||||
@@ -1,165 +0,0 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<Project DefaultTargets="Build" ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
|
||||
<ItemGroup Label="ProjectConfigurations">
|
||||
<ProjectConfiguration Include="Debug|Win32">
|
||||
<Configuration>Debug</Configuration>
|
||||
<Platform>Win32</Platform>
|
||||
</ProjectConfiguration>
|
||||
<ProjectConfiguration Include="Debug|x64">
|
||||
<Configuration>Debug</Configuration>
|
||||
<Platform>x64</Platform>
|
||||
</ProjectConfiguration>
|
||||
<ProjectConfiguration Include="Release|Win32">
|
||||
<Configuration>Release</Configuration>
|
||||
<Platform>Win32</Platform>
|
||||
</ProjectConfiguration>
|
||||
<ProjectConfiguration Include="Release|x64">
|
||||
<Configuration>Release</Configuration>
|
||||
<Platform>x64</Platform>
|
||||
</ProjectConfiguration>
|
||||
</ItemGroup>
|
||||
<PropertyGroup Label="Globals">
|
||||
<ProjectGuid>{6B40296D-5F50-4606-AB84-81FA874CC25A}</ProjectGuid>
|
||||
<RootNamespace>focusKiller</RootNamespace>
|
||||
<Keyword>Win32Proj</Keyword>
|
||||
</PropertyGroup>
|
||||
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.Default.props" />
|
||||
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="Configuration">
|
||||
<ConfigurationType>DynamicLibrary</ConfigurationType>
|
||||
<CharacterSet>MultiByte</CharacterSet>
|
||||
<WholeProgramOptimization>true</WholeProgramOptimization>
|
||||
</PropertyGroup>
|
||||
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="Configuration">
|
||||
<ConfigurationType>DynamicLibrary</ConfigurationType>
|
||||
<UseOfMfc>false</UseOfMfc>
|
||||
<CharacterSet>MultiByte</CharacterSet>
|
||||
</PropertyGroup>
|
||||
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'" Label="Configuration">
|
||||
<ConfigurationType>DynamicLibrary</ConfigurationType>
|
||||
<CharacterSet>MultiByte</CharacterSet>
|
||||
<WholeProgramOptimization>true</WholeProgramOptimization>
|
||||
</PropertyGroup>
|
||||
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" Label="Configuration">
|
||||
<ConfigurationType>DynamicLibrary</ConfigurationType>
|
||||
<UseOfMfc>false</UseOfMfc>
|
||||
<CharacterSet>MultiByte</CharacterSet>
|
||||
</PropertyGroup>
|
||||
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.props" />
|
||||
<ImportGroup Label="ExtensionSettings">
|
||||
</ImportGroup>
|
||||
<ImportGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="PropertySheets">
|
||||
<Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
|
||||
</ImportGroup>
|
||||
<ImportGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="PropertySheets">
|
||||
<Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
|
||||
</ImportGroup>
|
||||
<ImportGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'" Label="PropertySheets">
|
||||
<Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
|
||||
</ImportGroup>
|
||||
<ImportGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" Label="PropertySheets">
|
||||
<Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
|
||||
</ImportGroup>
|
||||
<PropertyGroup Label="UserMacros" />
|
||||
<PropertyGroup>
|
||||
<_ProjectFileVersion>10.0.40219.1</_ProjectFileVersion>
|
||||
<OutDir Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">$(SolutionDir)$(Configuration)\</OutDir>
|
||||
<IntDir Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">$(Configuration)\</IntDir>
|
||||
<LinkIncremental Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">true</LinkIncremental>
|
||||
<OutDir Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">..\..\bin\win</OutDir>
|
||||
<IntDir Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">$(Configuration)\</IntDir>
|
||||
<LinkIncremental Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">false</LinkIncremental>
|
||||
<OutDir Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">$(SolutionDir)$(Platform)\$(Configuration)\</OutDir>
|
||||
<IntDir Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">$(Platform)\$(Configuration)\</IntDir>
|
||||
<LinkIncremental Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">true</LinkIncremental>
|
||||
<OutDir Condition="'$(Configuration)|$(Platform)'=='Release|x64'">..\..\bin\win</OutDir>
|
||||
<IntDir Condition="'$(Configuration)|$(Platform)'=='Release|x64'">$(Platform)\$(Configuration)\</IntDir>
|
||||
<LinkIncremental Condition="'$(Configuration)|$(Platform)'=='Release|x64'">false</LinkIncremental>
|
||||
<TargetName Condition="'$(Configuration)|$(Platform)'=='Release|x64'">$(ProjectName)64</TargetName>
|
||||
</PropertyGroup>
|
||||
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
|
||||
<ClCompile>
|
||||
<Optimization>Disabled</Optimization>
|
||||
<PreprocessorDefinitions>WIN32;_DEBUG;_WINDOWS;_USRDLL;FOCUSKILLER_EXPORTS;%(PreprocessorDefinitions)</PreprocessorDefinitions>
|
||||
<MinimalRebuild>true</MinimalRebuild>
|
||||
<BasicRuntimeChecks>EnableFastChecks</BasicRuntimeChecks>
|
||||
<RuntimeLibrary>MultiThreadedDebug</RuntimeLibrary>
|
||||
<PrecompiledHeader>
|
||||
</PrecompiledHeader>
|
||||
<WarningLevel>Level3</WarningLevel>
|
||||
<DebugInformationFormat>EditAndContinue</DebugInformationFormat>
|
||||
</ClCompile>
|
||||
<Link>
|
||||
<GenerateDebugInformation>true</GenerateDebugInformation>
|
||||
<SubSystem>Windows</SubSystem>
|
||||
<TargetMachine>MachineX86</TargetMachine>
|
||||
</Link>
|
||||
</ItemDefinitionGroup>
|
||||
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
|
||||
<ClCompile>
|
||||
<PreprocessorDefinitions>WIN32;NDEBUG;_WINDOWS;_USRDLL;FOCUSKILLER_EXPORTS;%(PreprocessorDefinitions)</PreprocessorDefinitions>
|
||||
<RuntimeLibrary>MultiThreaded</RuntimeLibrary>
|
||||
<PrecompiledHeader>
|
||||
</PrecompiledHeader>
|
||||
<WarningLevel>Level3</WarningLevel>
|
||||
<DebugInformationFormat>ProgramDatabase</DebugInformationFormat>
|
||||
</ClCompile>
|
||||
<Link>
|
||||
<GenerateDebugInformation>true</GenerateDebugInformation>
|
||||
<SubSystem>Windows</SubSystem>
|
||||
<OptimizeReferences>true</OptimizeReferences>
|
||||
<EnableCOMDATFolding>true</EnableCOMDATFolding>
|
||||
<TargetMachine>MachineX86</TargetMachine>
|
||||
</Link>
|
||||
</ItemDefinitionGroup>
|
||||
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">
|
||||
<Midl>
|
||||
<TargetEnvironment>X64</TargetEnvironment>
|
||||
</Midl>
|
||||
<ClCompile>
|
||||
<Optimization>Disabled</Optimization>
|
||||
<PreprocessorDefinitions>WIN32;_DEBUG;_WINDOWS;_USRDLL;FOCUSKILLER_EXPORTS;%(PreprocessorDefinitions)</PreprocessorDefinitions>
|
||||
<MinimalRebuild>true</MinimalRebuild>
|
||||
<BasicRuntimeChecks>EnableFastChecks</BasicRuntimeChecks>
|
||||
<RuntimeLibrary>MultiThreadedDebug</RuntimeLibrary>
|
||||
<PrecompiledHeader>
|
||||
</PrecompiledHeader>
|
||||
<WarningLevel>Level3</WarningLevel>
|
||||
<DebugInformationFormat>ProgramDatabase</DebugInformationFormat>
|
||||
</ClCompile>
|
||||
<Link>
|
||||
<GenerateDebugInformation>true</GenerateDebugInformation>
|
||||
<SubSystem>Windows</SubSystem>
|
||||
<TargetMachine>MachineX64</TargetMachine>
|
||||
</Link>
|
||||
</ItemDefinitionGroup>
|
||||
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'">
|
||||
<Midl>
|
||||
<TargetEnvironment>X64</TargetEnvironment>
|
||||
</Midl>
|
||||
<ClCompile>
|
||||
<PreprocessorDefinitions>WIN32;NDEBUG;_WINDOWS;_USRDLL;FOCUSKILLER_EXPORTS;%(PreprocessorDefinitions)</PreprocessorDefinitions>
|
||||
<RuntimeLibrary>MultiThreaded</RuntimeLibrary>
|
||||
<PrecompiledHeader>
|
||||
</PrecompiledHeader>
|
||||
<WarningLevel>Level3</WarningLevel>
|
||||
<DebugInformationFormat>ProgramDatabase</DebugInformationFormat>
|
||||
</ClCompile>
|
||||
<Link>
|
||||
<GenerateDebugInformation>true</GenerateDebugInformation>
|
||||
<SubSystem>Windows</SubSystem>
|
||||
<OptimizeReferences>true</OptimizeReferences>
|
||||
<EnableCOMDATFolding>true</EnableCOMDATFolding>
|
||||
<TargetMachine>MachineX64</TargetMachine>
|
||||
</Link>
|
||||
</ItemDefinitionGroup>
|
||||
<ItemGroup>
|
||||
<ClCompile Include="focuskiller.cpp" />
|
||||
<ClCompile Include="HookImportFunction.cpp" />
|
||||
</ItemGroup>
|
||||
<ItemGroup>
|
||||
<ClInclude Include="HookImportFunction.h" />
|
||||
</ItemGroup>
|
||||
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets" />
|
||||
<ImportGroup Label="ExtensionTargets">
|
||||
</ImportGroup>
|
||||
</Project>
|
||||
@@ -1,30 +0,0 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<Project ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
|
||||
<ItemGroup>
|
||||
<Filter Include="Source Files">
|
||||
<UniqueIdentifier>{4FC737F1-C7A5-4376-A066-2A32D752A2FF}</UniqueIdentifier>
|
||||
<Extensions>cpp;c;cc;cxx;def;odl;idl;hpj;bat;asm;asmx</Extensions>
|
||||
</Filter>
|
||||
<Filter Include="Header Files">
|
||||
<UniqueIdentifier>{93995380-89BD-4b04-88EB-625FBE52EBFB}</UniqueIdentifier>
|
||||
<Extensions>h;hpp;hxx;hm;inl;inc;xsd</Extensions>
|
||||
</Filter>
|
||||
<Filter Include="Resource Files">
|
||||
<UniqueIdentifier>{67DA6AB6-F800-4c08-8B7A-83BB121AAD01}</UniqueIdentifier>
|
||||
<Extensions>rc;ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe;resx;tiff;tif;png;wav</Extensions>
|
||||
</Filter>
|
||||
</ItemGroup>
|
||||
<ItemGroup>
|
||||
<ClCompile Include="focuskiller.cpp">
|
||||
<Filter>Source Files</Filter>
|
||||
</ClCompile>
|
||||
<ClCompile Include="HookImportFunction.cpp">
|
||||
<Filter>Source Files</Filter>
|
||||
</ClCompile>
|
||||
</ItemGroup>
|
||||
<ItemGroup>
|
||||
<ClInclude Include="HookImportFunction.h">
|
||||
<Filter>Header Files</Filter>
|
||||
</ClInclude>
|
||||
</ItemGroup>
|
||||
</Project>
|
||||
@@ -1,112 +0,0 @@
|
||||
#include <windows.h>
|
||||
|
||||
// NT 4 doesn't have FlashWindowEx.
|
||||
typedef BOOL (WINAPI *t_FlashWindowEx)(FLASHWINFO*);
|
||||
t_FlashWindowEx p_FlashWindowEx;
|
||||
#define FlashWindowEx p_FlashWindowEx
|
||||
|
||||
#ifdef USE_DETOURS
|
||||
#include "detours.h" // see http://research.microsoft.com/sn/detours/
|
||||
extern "C" {
|
||||
DETOUR_TRAMPOLINE(BOOL WINAPI Real_SetForegroundWindow(HWND hWnd), SetForegroundWindow);
|
||||
}
|
||||
#else
|
||||
// IAT patching hook method. See http://www.naughter.com/hookimportfunction.html
|
||||
// compile with cl /LD focuskiller.cpp HookImportFunction.cpp user32.lib
|
||||
#include "HookImportFunction.h"
|
||||
|
||||
typedef BOOL (WINAPI *t_SetForegroundWindow)(HWND);
|
||||
t_SetForegroundWindow Real_SetForegroundWindow;
|
||||
#endif
|
||||
|
||||
DWORD mypid;
|
||||
|
||||
BOOL WINAPI Mine_SetForegroundWindow(HWND hWnd)
|
||||
{
|
||||
DWORD pid;
|
||||
HWND fg = GetForegroundWindow();
|
||||
HWND owner = GetWindow(hWnd, GW_OWNER);
|
||||
GetWindowThreadProcessId(fg, &pid);
|
||||
|
||||
#ifdef _DEBUG
|
||||
char buf[500];
|
||||
wsprintf(buf, "SetForegroundWindow(%x): owner = %x, %d <-> %d", hWnd, owner, pid, mypid);
|
||||
OutputDebugString(buf);
|
||||
#endif
|
||||
|
||||
// Disallow if
|
||||
// a) another process' window is in the foreground
|
||||
// b) the window to be put in front is a top-level window (should avoid putting one IDEA project in front of another one)
|
||||
if (mypid != pid || owner == NULL) {
|
||||
if (FlashWindowEx != NULL) {
|
||||
FLASHWINFO fw;
|
||||
fw.cbSize = sizeof(fw);
|
||||
fw.hwnd = hWnd;
|
||||
fw.uCount = 5;
|
||||
fw.dwTimeout = 0;
|
||||
|
||||
fw.dwFlags = FLASHW_TRAY | FLASHW_TIMERNOFG;
|
||||
FlashWindowEx(&fw);
|
||||
} else {
|
||||
FlashWindow(hWnd, TRUE);
|
||||
}
|
||||
return TRUE; // fake success
|
||||
}
|
||||
|
||||
return Real_SetForegroundWindow(hWnd);
|
||||
}
|
||||
|
||||
void HookFunctions(HMODULE hModule)
|
||||
{
|
||||
#ifdef USE_DETOURS
|
||||
#ifdef _DEBUG
|
||||
OutputDebugString("Using Detours hook...");
|
||||
#endif
|
||||
|
||||
DetourFunctionWithTrampoline((PBYTE)Real_SetForegroundWindow,
|
||||
(PBYTE)Mine_SetForegroundWindow);
|
||||
#else
|
||||
#ifdef _DEBUG
|
||||
OutputDebugString("Using IAT patching hook...");
|
||||
#endif
|
||||
|
||||
HOOKFUNCDESC hook;
|
||||
hook.szFunc = "SetForegroundWindow";
|
||||
hook.pProc = (PROC)Mine_SetForegroundWindow;
|
||||
|
||||
// hooking LoadLibrary and waiting until awt.dll is being loaded by java would be more correct but this works too
|
||||
HMODULE awtModule = LoadLibrary("awt.dll");
|
||||
|
||||
BOOL b = HookImportFunctionsByName(awtModule, "user32.dll", 1, &hook, (PROC *)&Real_SetForegroundWindow, NULL);
|
||||
if (!b) {
|
||||
char buf[200];
|
||||
wsprintf(buf, "Hooking SetForegroundWindow failed [0x%x]", GetLastError());
|
||||
OutputDebugString(buf);
|
||||
}
|
||||
#endif
|
||||
|
||||
#ifdef _DEBUG
|
||||
OutputDebugString("Functions hooked");
|
||||
#endif
|
||||
}
|
||||
|
||||
BOOL WINAPI DllMain(HINSTANCE hinstDLL, DWORD fdwReason, LPVOID lpReserved)
|
||||
{
|
||||
if (fdwReason == DLL_PROCESS_ATTACH) {
|
||||
#ifdef _DEBUG
|
||||
char buf[200];
|
||||
wsprintf(buf, "DLL Attached");
|
||||
OutputDebugString(buf);
|
||||
#endif
|
||||
|
||||
mypid = GetCurrentProcessId();
|
||||
p_FlashWindowEx = (t_FlashWindowEx)GetProcAddress(GetModuleHandle("user32.dll"), "FlashWindowEx");
|
||||
|
||||
DisableThreadLibraryCalls((HMODULE)hinstDLL);
|
||||
|
||||
HookFunctions((HMODULE)hinstDLL);
|
||||
}
|
||||
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user