c#, c++, управление окном, которое за иконками

есть проблема, делаю проект для колледжа, по типу wallpaper engine, только решил поставить на фон окно, winforms, с элементом, webview. Написал dll, которая принимает hwnd окна, и ставит его на фон. Вот только не работает мышь в окне, пробовал sendinput, но не работает, видел на GitHub, кто то делал через sendMessage, подскажите как это работает, не охота просто копировать код, а сам понять не смог

вот мой код на c# и c++

#region dll
        [DllImport("set_wallpapers.dll")]
        public static extern bool set(IntPtr hwnd);

        [DllImport("set_wallpapers.dll")]
        public static extern void mouse_capture(IntPtr hwnd);
        #endregion

        enum window
        {
            None = 0,
            web = 1, 
            video = 2,
            photo =3
        }

        private System.Windows.Forms.Timer mouseMoveTimer;
        window selectedWindow;
        WebWallpaper wallpaper;
        public video_wallpaper video;
        IntPtr hwnd = IntPtr.Zero;

        public set_wallpaper()
        {
            selectedWindow = window.None;
            InitializeComponent();
        }
        #region html
        private void set_html_Click(object sender, EventArgs e)
        {
            close_wallpaper_Click(sender, e);
            wallpaper = new WebWallpaper();
            hwnd = wallpaper.Handle;
            Microsoft.Web.WebView2.WinForms.WebView2 web = wallpaper._web();
            if (!string.IsNullOrEmpty(URL_html.Text))
            {
                web.Source = new Uri(URL_html.Text);
                wallpaper.Show();
                // set() это функция из моей dll, оно ставит окно в качестве фона рабочего стола
                if (set(hwnd))
                {
                    wallpaper.WindowState = FormWindowState.Maximized;
                    selectedWindow = window.web;
                }
            }
        }
        #endregion
        private void close_wallpaper_Click(object sender, EventArgs e)
        {
            switch (selectedWindow)
            {
                case window.None: break;
                case window.web:
                    wallpaper.Close();
                    break;
                case window.video:
                    video.Close();
                    break;
                case window.photo:break;
            }
            selectedWindow= window.None;
        }

код от dll

extern "C" __declspec(dllexport) bool set(HWND hwnd)
{
    if (hwnd)
    {
        if (set_wallpapers(hwnd))
        {
            return true;
        }
    }
    return false;
}

HWND get_wallpaper() {
    HWND progman = FindWindow(L"Progman", NULL);
    SendMessageTimeout(progman, 0x052C, 0, 0, 0x0000, 1000, nullptr);
    EnumWindows([](HWND hwnd, LPARAM lparam) -> BOOL CALLBACK
        {
            HWND p = FindWindowEx(hwnd, NULL, L"SHELLDLL_DefView", NULL);
    if (p)
    {
        wallpaper = FindWindowEx(NULL, hwnd, L"WorkerW", NULL);
    }
    return true;
        }, NULL
    );
    return wallpaper;
}

bool set_wallpapers(HWND hwnd)
{
    HWND desktop = get_wallpaper();
    if (desktop)
    {
        SetParent(hwnd, desktop);
        if (SetParent(hwnd, desktop))
        {
            return true;
        }
    }
    return false;
}

Ответы (0 шт):