создать windows прозрачный без взаимодействия с мышью и клавиатурой, как приложение Peek - PullRequest
0 голосов
/ 02 апреля 2020

Мне нужно создать 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, любой щелчок по нему не получен из окна под моим приложением ...

...