Я работаю над небольшой программой, которая в основном анимирует обои с помощью OpenGL.
Обои являются интерактивными (я использую глобальный хук мыши для событий мыши), но чтобы сделать их идеальными, когда я держувниз левой кнопкой мыши, я бы хотел, чтобы прямоугольник выделения вообще не появлялся.
Все, что я мог изменить, это отключить полупрозрачный прямоугольник выделения , используя ключ реестра и P / Invokeфункция, заставляющая рабочий стол перезагружать его настройки реестра, что приводит к следующему:
На изображении вы можете увидеть контур выделения, который был бы великолепен, если бы не отображался, когда яудерживайте и перетащите.
Можно ли добиться с помощью 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);
Проблема с этим решением состоит в том, что теперь, когда я пытаюсь выбрать что-либо на рабочем столе, он не будет, так как я буквально отменяю выбор простокогда я начинаю удерживать кнопку мыши.