vxug-VXAPI/VX-API/CreateProcessByWindowsRHotK...

133 lines
4.4 KiB
C++

#include "Win32Helper.h"
DWORD CreateProcessByWindowsRHotKeyW(_In_ PWCHAR FullPathToBinary)
{
INPUT ExecuteHotkey[4] = { 0 };
INPUT BinaryInputBuffer[2] = { 0 };
INPUT ExecuteBinaryCommand[2] = { 0 };
UINT Result = ERROR_SUCCESS;
HWND RunWindow = NULL;
ExecuteHotkey[0].type = INPUT_KEYBOARD;
ExecuteHotkey[0].ki.wVk = VK_LWIN;
ExecuteHotkey[1].type = INPUT_KEYBOARD;
ExecuteHotkey[1].ki.wVk = 0x52;
ExecuteHotkey[2].type = INPUT_KEYBOARD;
ExecuteHotkey[2].ki.wVk = 0x52;
ExecuteHotkey[2].ki.dwFlags = KEYEVENTF_KEYUP;
ExecuteHotkey[3].type = INPUT_KEYBOARD;
ExecuteHotkey[3].ki.wVk = VK_LWIN;
ExecuteHotkey[3].ki.dwFlags = KEYEVENTF_KEYUP;
Result = SendInput(ARRAYSIZE(ExecuteHotkey), ExecuteHotkey, sizeof(INPUT));
if (Result != ARRAYSIZE(ExecuteHotkey))
return Win32FromHResult(Result);
Sleep(100);
RunWindow = FindWindowW(NULL, L"Run");
if (RunWindow == NULL)
return GetLastErrorFromTeb();
if(!AttachThreadInput(GetCurrentThreadId(), GetWindowThreadProcessId(GetAncestor(RunWindow, GA_ROOT), NULL), TRUE))
return GetLastErrorFromTeb();
if(SetFocus(RunWindow) == NULL)
return GetLastErrorFromTeb();
for (DWORD dwX = 0; dwX < StringLengthW(FullPathToBinary); dwX++)
{
BinaryInputBuffer[0].type = INPUT_KEYBOARD;
BinaryInputBuffer[0].ki.wVk = VkKeyScanW(FullPathToBinary[dwX]);
BinaryInputBuffer[1].type = INPUT_KEYBOARD;
BinaryInputBuffer[1].ki.wVk = VkKeyScanW(FullPathToBinary[dwX]);
BinaryInputBuffer[1].ki.dwFlags = KEYEVENTF_KEYUP;
Result = SendInput(ARRAYSIZE(BinaryInputBuffer), BinaryInputBuffer, sizeof(INPUT));
if (Result != ARRAYSIZE(BinaryInputBuffer))
return Win32FromHResult(Result);
}
ExecuteBinaryCommand[0].type = INPUT_KEYBOARD;
ExecuteBinaryCommand[0].ki.wVk = 0x0D;
ExecuteBinaryCommand[1].type = INPUT_KEYBOARD;
ExecuteBinaryCommand[1].ki.wVk = 0x0D;
ExecuteBinaryCommand[1].ki.dwFlags = KEYEVENTF_KEYUP;
Result = SendInput(ARRAYSIZE(ExecuteBinaryCommand), ExecuteBinaryCommand, sizeof(INPUT));
if (Result != ARRAYSIZE(ExecuteBinaryCommand))
return Win32FromHResult(Result);
return ERROR_SUCCESS;
}
DWORD CreateProcessByWindowsRHotKeyA(_In_ PCHAR FullPathToBinary)
{
INPUT ExecuteHotkey[4] = { 0 };
INPUT BinaryInputBuffer[2] = { 0 };
INPUT ExecuteBinaryCommand[2] = { 0 };
UINT Result = ERROR_SUCCESS;
HWND RunWindow = NULL;
ExecuteHotkey[0].type = INPUT_KEYBOARD;
ExecuteHotkey[0].ki.wVk = VK_LWIN;
ExecuteHotkey[1].type = INPUT_KEYBOARD;
ExecuteHotkey[1].ki.wVk = 0x52;
ExecuteHotkey[2].type = INPUT_KEYBOARD;
ExecuteHotkey[2].ki.wVk = 0x52;
ExecuteHotkey[2].ki.dwFlags = KEYEVENTF_KEYUP;
ExecuteHotkey[3].type = INPUT_KEYBOARD;
ExecuteHotkey[3].ki.wVk = VK_LWIN;
ExecuteHotkey[3].ki.dwFlags = KEYEVENTF_KEYUP;
Result = SendInput(ARRAYSIZE(ExecuteHotkey), ExecuteHotkey, sizeof(INPUT));
if (Result != ARRAYSIZE(ExecuteHotkey))
return Win32FromHResult(Result);
Sleep(100);
RunWindow = FindWindowW(NULL, L"Run");
if (RunWindow == NULL)
return GetLastErrorFromTeb();
if (!AttachThreadInput(GetCurrentThreadId(), GetWindowThreadProcessId(GetAncestor(RunWindow, GA_ROOT), NULL), TRUE))
return GetLastErrorFromTeb();
if (SetFocus(RunWindow) == NULL)
return GetLastErrorFromTeb();
for (DWORD dwX = 0; dwX < StringLengthA(FullPathToBinary); dwX++)
{
BinaryInputBuffer[0].type = INPUT_KEYBOARD;
BinaryInputBuffer[0].ki.wVk = VkKeyScanA(FullPathToBinary[dwX]);
BinaryInputBuffer[1].type = INPUT_KEYBOARD;
BinaryInputBuffer[1].ki.wVk = VkKeyScanA(FullPathToBinary[dwX]);
BinaryInputBuffer[1].ki.dwFlags = KEYEVENTF_KEYUP;
Result = SendInput(ARRAYSIZE(BinaryInputBuffer), BinaryInputBuffer, sizeof(INPUT));
if (Result != ARRAYSIZE(BinaryInputBuffer))
return Win32FromHResult(Result);
}
ExecuteBinaryCommand[0].type = INPUT_KEYBOARD;
ExecuteBinaryCommand[0].ki.wVk = 0x0D;
ExecuteBinaryCommand[1].type = INPUT_KEYBOARD;
ExecuteBinaryCommand[1].ki.wVk = 0x0D;
ExecuteBinaryCommand[1].ki.dwFlags = KEYEVENTF_KEYUP;
Result = SendInput(ARRAYSIZE(ExecuteBinaryCommand), ExecuteBinaryCommand, sizeof(INPUT));
if (Result != ARRAYSIZE(ExecuteBinaryCommand))
return Win32FromHResult(Result);
return ERROR_SUCCESS;
}