Я пытаюсь отрисовать данный фильтр при помощи следующего кода
namespace AutoclickerRG
{
public static class OverlayDrawer
{
[DllImport("User32.dll")]
public static extern IntPtr GetDC(IntPtr hwnd);
[DllImport("User32.dll")]
public static extern void ReleaseDC(IntPtr hwnd, IntPtr dc);
public static void DrawFrame(Frame frame)
{
IntPtr desktopPtr = GetDC(IntPtr.Zero);
Graphics g = Graphics.FromHdc(desktopPtr);
SolidBrush b = new SolidBrush(Color.FromArgb(50, 255, 50, 10));
g.FillRectangle(b, new Rectangle(frame.FirstPoint.X, frame.FirstPoint.Y, frame.SecondPoint.X - frame.FirstPoint.X, frame.SecondPoint.Y - frame.FirstPoint.Y));
g.Dispose();
ReleaseDC(IntPtr.Zero, desktopPtr);
}
}
}
, но получаю волновую медленную отрисовку как на картинке ниже. При этом сквозь отрисовку невозможно "насквозь" работать с окнами за фильтром (vs и т.д.).
Также нашел код на просторах интернета, где люди делают прозрачный фон формы, при которой можно продолжить работать с любым окном за ней. Но мы тогда не получаем цветовой фильтр, а просто прозрачную форму.
Также нашел библиотеку
https://github.com/lolp1/Overlay.NET
Смог вырезать то, что мне нужно
Но тут есть проблема, что можно оверлей вешать лишь на какой-то запущенный процесс. И вторая проблема при попытке перенести этот код в winform app - он запустился и вроде работает, но при этом ничего не отрисовывает на том же notepad.
Можете мне подсказать какое-нибудь вменяемое решение, чтоб получить примерно вот это: