2015-06-22 12:40:59 -04:00
|
|
|
#define _CRT_SECURE_NO_WARNINGS
|
|
|
|
|
|
|
|
#include <stdio.h>
|
|
|
|
#include "dxwnd.h"
|
|
|
|
#include "dxwcore.hpp"
|
|
|
|
#include "syslibs.h"
|
|
|
|
#include "dxhook.h"
|
|
|
|
#include "dxhelper.h"
|
|
|
|
|
|
|
|
typedef BOOL (WINAPI *GetFileNameA_Type)(LPOPENFILENAMEA);
|
|
|
|
typedef BOOL (WINAPI *GetFileNameW_Type)(LPOPENFILENAMEW);
|
|
|
|
GetFileNameA_Type pGetOpenFileNameA = NULL;
|
|
|
|
GetFileNameA_Type pGetSaveFileNameA = NULL;
|
|
|
|
GetFileNameW_Type pGetOpenFileNameW = NULL;
|
|
|
|
GetFileNameW_Type pGetSaveFileNameW = NULL;
|
|
|
|
BOOL WINAPI extGetSaveFileNameA(LPOPENFILENAMEA);
|
|
|
|
BOOL WINAPI extGetOpenFileNameA(LPOPENFILENAMEA);
|
|
|
|
BOOL WINAPI extGetSaveFileNameW(LPOPENFILENAMEW);
|
|
|
|
BOOL WINAPI extGetOpenFileNameW(LPOPENFILENAMEW);
|
|
|
|
|
2016-12-03 11:45:15 -05:00
|
|
|
static HookEntryEx_Type Hooks[]={
|
|
|
|
{HOOK_IAT_CANDIDATE, 0, "GetSaveFileNameA", NULL, (FARPROC *)&pGetSaveFileNameA, (FARPROC)extGetSaveFileNameA},
|
|
|
|
{HOOK_IAT_CANDIDATE, 0, "GetOpenFileNameA", NULL, (FARPROC *)&pGetOpenFileNameA, (FARPROC)extGetOpenFileNameA},
|
|
|
|
{HOOK_IAT_CANDIDATE, 0, "GetSaveFileNameW", NULL, (FARPROC *)&pGetSaveFileNameW, (FARPROC)extGetSaveFileNameW},
|
|
|
|
{HOOK_IAT_CANDIDATE, 0, "GetOpenFileNameW", NULL, (FARPROC *)&pGetOpenFileNameW, (FARPROC)extGetOpenFileNameW},
|
|
|
|
{HOOK_IAT_CANDIDATE, 0, 0, NULL, 0, 0} // terminator
|
2015-06-22 12:40:59 -04:00
|
|
|
};
|
|
|
|
|
|
|
|
void HookComDlg32(HMODULE module)
|
|
|
|
{
|
2016-12-03 11:45:15 -05:00
|
|
|
HookLibraryEx(module, Hooks, "comdlg32.dll");
|
2015-06-22 12:40:59 -04:00
|
|
|
}
|
|
|
|
|
|
|
|
FARPROC Remap_ComDlg32_ProcAddress(LPCSTR proc, HMODULE hModule)
|
|
|
|
{
|
|
|
|
FARPROC addr;
|
2016-12-03 11:45:15 -05:00
|
|
|
if (addr=RemapLibraryEx(proc, hModule, Hooks)) return addr;
|
2015-06-22 12:40:59 -04:00
|
|
|
return NULL;
|
|
|
|
}
|
|
|
|
|
|
|
|
BOOL WINAPI extGetSaveFileNameA(LPOPENFILENAMEA lpofn)
|
|
|
|
{
|
|
|
|
BOOL ret, FullScreen;
|
|
|
|
FullScreen = dxw.IsFullScreen();
|
|
|
|
OutTraceDW("GetSaveFileNameA: FullScreen=%x\n", FullScreen);
|
|
|
|
dxw.SetFullScreen(FALSE);
|
|
|
|
ret = (*pGetSaveFileNameA)(lpofn);
|
|
|
|
dxw.SetFullScreen(FullScreen);
|
|
|
|
OutTraceDW("GetSaveFileNameA: ret=%x\n", ret);
|
|
|
|
return ret;
|
|
|
|
}
|
|
|
|
|
|
|
|
BOOL WINAPI extGetOpenFileNameA(LPOPENFILENAMEA lpofn)
|
|
|
|
{
|
|
|
|
BOOL ret, FullScreen;
|
|
|
|
FullScreen = dxw.IsFullScreen();
|
|
|
|
OutTraceDW("GetOpenFileNameA: FullScreen=%x\n", FullScreen);
|
|
|
|
dxw.SetFullScreen(FALSE);
|
|
|
|
ret = (*pGetOpenFileNameA)(lpofn);
|
|
|
|
dxw.SetFullScreen(FullScreen);
|
|
|
|
OutTraceDW("GetOpenFileNameA: ret=%x\n", ret);
|
|
|
|
return ret;
|
|
|
|
}
|
|
|
|
|
|
|
|
BOOL WINAPI extGetSaveFileNameW(LPOPENFILENAMEW lpofn)
|
|
|
|
{
|
|
|
|
BOOL ret, FullScreen;
|
|
|
|
FullScreen = dxw.IsFullScreen();
|
|
|
|
OutTraceDW("GetSaveFileNameW: FullScreen=%x\n", FullScreen);
|
|
|
|
dxw.SetFullScreen(FALSE);
|
|
|
|
ret = (*pGetSaveFileNameW)(lpofn);
|
|
|
|
dxw.SetFullScreen(FullScreen);
|
|
|
|
OutTraceDW("GetSaveFileNameW: ret=%x\n", ret);
|
|
|
|
return ret;
|
|
|
|
}
|
|
|
|
|
|
|
|
BOOL WINAPI extGetOpenFileNameW(LPOPENFILENAMEW lpofn)
|
|
|
|
{
|
|
|
|
BOOL ret, FullScreen;
|
|
|
|
FullScreen = dxw.IsFullScreen();
|
|
|
|
OutTraceDW("GetOpenFileNameW: FullScreen=%x\n", FullScreen);
|
|
|
|
dxw.SetFullScreen(FALSE);
|
|
|
|
ret = (*pGetOpenFileNameW)(lpofn);
|
|
|
|
dxw.SetFullScreen(FullScreen);
|
|
|
|
OutTraceDW("GetOpenFileNameW: ret=%x\n", ret);
|
|
|
|
return ret;
|
|
|
|
}
|