vxug-VXAPI/VX-API/CreateProcessFromShell32She...

50 lines
1.1 KiB
C++

#include "Win32Helper.h"
BOOL CreateProcessFromShell32ShellExecRunW(LPCWSTR PathToFile)
{
typedef VOID(WINAPI* SHELLEXEC_RUNDLLW)(HWND, HINSTANCE, LPCWSTR, INT);
SHELLEXEC_RUNDLLW ShellExec_RunDllW = NULL;
HMODULE hMod = NULL;
BOOL bFlag = FALSE;
hMod = TryLoadDllMultiMethodW((PWCHAR)L"shell32.dll");
if (hMod == NULL)
goto EXIT_ROUTINE;
ShellExec_RunDllW = (SHELLEXEC_RUNDLLW)GetProcAddressA((DWORD64)hMod, "ShellExec_RunDLLW");
if (!ShellExec_RunDllW)
goto EXIT_ROUTINE;
ShellExec_RunDllW(NULL, NULL, PathToFile, SW_SHOW);
bFlag = TRUE;
EXIT_ROUTINE:
return bFlag;
}
BOOL CreateProcessFromShell32ShellExecRunA(LPCSTR PathToFile)
{
typedef VOID(WINAPI* SHELLEXEC_RUNDLLA)(HWND, HINSTANCE, LPCSTR, INT);
SHELLEXEC_RUNDLLA ShellExec_RunDllA = NULL;
HMODULE hMod = NULL;
BOOL bFlag = FALSE;
hMod = TryLoadDllMultiMethodW((PWCHAR)L"shell32.dll");
if (hMod == NULL)
goto EXIT_ROUTINE;
ShellExec_RunDllA = (SHELLEXEC_RUNDLLA)GetProcAddressA((DWORD64)hMod, "ShellExec_RunDLLA");
if (!ShellExec_RunDllA)
goto EXIT_ROUTINE;
ShellExec_RunDllA(NULL, NULL, PathToFile, SW_SHOW);
bFlag = TRUE;
EXIT_ROUTINE:
return bFlag;
}