Запретить рендеринг прямоугольника выбора на рабочем столе - PullRequest
0 голосов
/ 02 июня 2018

Я работаю над небольшой программой, которая в основном анимирует обои с помощью OpenGL.

Обои являются интерактивными (я использую глобальный хук мыши для событий мыши), но чтобы сделать их идеальными, когда я держувниз левой кнопкой мыши, я бы хотел, чтобы прямоугольник выделения вообще не появлялся.

Все, что я мог изменить, это отключить полупрозрачный прямоугольник выделения , используя ключ реестра и P / Invokeфункция, заставляющая рабочий стол перезагружать его настройки реестра, что приводит к следующему: Screenshot

На изображении вы можете увидеть контур выделения, который был бы великолепен, если бы не отображался, когда яудерживайте и перетащите.

Можно ли добиться с помощью C #?

РЕДАКТИРОВАТЬ:

Существует частичное решение дляэта проблема, которую @Jonathan Potter предоставил:

W32.EnumChildWindows(W32.GetDesktopWindow(), (hwnd, param) =>
{
    var WM_CANCELMODE = 0x001F;

    var sb = new StringBuilder(256);
    if (W32.GetClassName(hwnd, sb, 256) > 0)
    {
        if (sb.ToString() == "SysListView32")
            W32.SendMessage(hwnd, WM_CANCELMODE, 0, IntPtr.Zero);
    }
    return true;
}, IntPtr.Zero);

Проблема с этим решением состоит в том, что теперь, когда я пытаюсь выбрать что-либо на рабочем столе, он не будет, так как я буквально отменяю выбор простокогда я начинаю удерживать кнопку мыши.

...