Перехват Shell.Open(path) и его отменаC++

Программы на C++. Форум разработчиков
Ответить
Anonymous
 Перехват Shell.Open(path) и его отмена

Сообщение Anonymous »

Я хочу отменить любую попытку любой программы открыть окно проводника Windows и вместо этого сделать что-то другое.
До сих пор я провел много времени с SetWindowsHookEx, VirtualProtect, ShellExecuteW и всеми видами глобальных перехватчиков , но ничего не работает. Мне удалось установить ловушку, которая получает уведомление при активации некоторых окон, но не любого окна и, что наиболее важно, не проводника Windows. Я думаю, что VirtualProtect — лучший способ, если цель состоит в том, чтобы полностью отменить операцию, но я бы приветствовал все, что работает и предотвращает видимость окна даже в малейшей степени.

extern "C" __declspec(dllexport) void SetGlobalHook()
{
_hmod = GetModuleHandle(L"DllPlusPlus"); // Get the handle of the current DLL
if (_hmod != NULL)
{
OriginalShellExecuteW = (ShellExecuteW_t)GetProcAddress(GetModuleHandle(L"shell32.dll"), "ShellExecuteW");
if (OriginalShellExecuteW != NULL)
{
DWORD oldProtect;
VirtualProtect((LPVOID)OriginalShellExecuteW, sizeof(LPVOID), PAGE_EXECUTE_READWRITE, &oldProtect);

// Replace the function pointer with the address of the hook
*(LPVOID*)&OriginalShellExecuteW = (LPVOID)HookedShellExecuteW;

VirtualProtect((LPVOID)OriginalShellExecuteW, sizeof(LPVOID), oldProtect, &oldProtect);

hShellHook = SetWindowsHookEx(WH_SHELL, ShellProc, _hmod, 0);
if (hShellHook == NULL)
{
DWORD error = GetLastError();
std::wofstream logFile("C:\\hook_error_log.txt", std::ios::app);
if (logFile.is_open())
{
logFile

Подробнее здесь: https://stackoverflow.com/questions/793 ... nceling-it
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «C++»