Мне нужно создать windows с таким поведением, прозрачный, с верхней панелью, без взаимодействия с мышью, без взаимодействия с клавиатурой
точно, что делает приложение для просмотра (https://github.com/phw/peek) Я много искал, но не нашел никакого решения или чего-то подобного
Windows Формы: пропускать клики через частично прозрачное окно всегда сверху .
Итак, я создал минимальное моно приложение с системой windows и одной формой
using System;
using System.Windows.Forms;
namespace GostWindow
{
public class MainWindow: Form
{
public MainWindow()
{
//this.FormBorderStyle = FormBorderStyle.Fixed3D;
//this.AllowTransparency = true;
this.Opacity = 0.90;
//this.TransparencyKey = Color.Red;
this.TopMost = true;
//this.WindowState = FormWindowState.Maximized;
}
const int GWL_EXSTYLE = -20;
const int WS_EX_LAYERED = 0x80000;
const int WS_EX_NOACTIVATE = (int)0x08000000L;
const int WS_EX_WINDOWEDGE = (int)0x00000100L;
const int WS_EX_CLIENTEDGE = (int)0x00000200L;
const int WS_EX_TRANSPARENT = (int)0x00000020L;
const int WS_EX_OVERLAPPEDWINDOW = (WS_EX_WINDOWEDGE | WS_EX_CLIENTEDGE);
const int WM_NCHITTEST = 0x0084;
const int HTTRANSPARENT = -1;
const int WM_LBUTTONDBLCLK = 0x0203;
const int WM_ACTIVATE = 0x0006;
protected override void WndProc(ref Message m)
{
System.Console.WriteLine(m.ToString());
if (m.Msg == WM_ACTIVATE)
{
m.Result = (IntPtr)HTTRANSPARENT;
}
else
{
base.WndProc(ref m);
}
}
protected override CreateParams CreateParams
{
get
{
CreateParams cp = base.CreateParams;
cp.ExStyle |= WS_EX_TRANSPARENT | WS_EX_LAYERED;
return cp;
}
}
}
}
Но, похоже, не работает должным образом. Я использую Ubuntu 18.4, любой щелчок по нему не получен из окна под моим приложением ...