English 中文(简体)
利用桌面背景作为更换纸张(Windows/C#)
原标题:Drawing on the desktop background as wallpaper replacement (Windows/C#)
  • 时间:2009-11-05 21:32:59
  •  标签:

我试图提出需要从桌面上取用的应用程序,在ons后面,似乎取代桌面挂图。 我找到了这方面的几个解决办法,但其中大多数工作做得很好(点火)。 一种解决办法是:。 我主要使用高层次图像图书馆或仅使用Windows表格的C#应用程序,有些C++,但仅使用非Windows平台。

如果任何人能够“向我转达”或向我提供另一种解决办法,那将受到高度赞赏。

最佳回答
问题回答

你们可以在《世界建筑工程》媒体参与者守则中找到灵感。 http://git.videolan.org/?p=vlc.git;a=blob;f=modules/video_output/msw/directx.c;h=678e7e7e40acf84d6b362c0c09a417116a0d244;hb=HEAD#l1770” rel=“nofollow norekter”

我知道这是一个很晚的答复,但我最近对自己进行了研究,如果更多的用户也存在同样的问题,这可能会帮助他们。

NOTE:这一答案是C++,但也许可以帮助您在C#中这样做。

如以上评论所述,见。 本指南<><><>>>。 我将如何利用<>ON窗口纸张窗口。

采用这两种方法:

BOOL CALLBACK EnumWindowsProc(HWND hwnd, LPARAM lParam) {
    HWND p = FindWindowEx(hwnd, NULL, "SHELLDLL_DefView", NULL);
    HWND* ret = (HWND*)lParam;

    if (p)
        {
        // Gets the WorkerW Window after the current one.
        *ret = FindWindowEx(NULL, hwnd, "WorkerW", NULL);
        }
    return true;
}

HWND get_wallpaper_window() {
        // Fetch the Progman window
        HWND progman = FindWindow("ProgMan", NULL);
        // Send 0x052C to Progman. This message directs Progman to spawn a 
        // WorkerW behind the desktop icons. If it is already there, nothing 
        // happens.
        SendMessageTimeout(progman, 0x052C, 0, 0, SMTO_NORMAL, 1000, nullptr);
        // We enumerate all Windows, until we find one, that has the SHELLDLL_DefView 
        // as a child. 
        // If we found that window, we take its next sibling and assign it to workerw.
        HWND wallpaper_hwnd = nullptr;
        EnumWindows(EnumWindowsProc, (LPARAM)&wallpaper_hwnd);
        // Return the handle you re looking for.
        return wallpaper_hwnd;
}

我能够检索窗户。

自2006年以来 我只熟悉SDL,这是我发现的唯一解决办法,但我认为,任何使你能够创造/改变基于另一个窗口的窗口的办法都应奏效。

window = SDL_CreateWindowFrom((void*)get_wallpaper_window());

以上线使我能够在SDL中从通过<代码>get_ Wallow(方法检索的HWND中建立一个窗口。

由于涉及许多法典,我将把my Solutions on github。 这可以在你的台.后面 draw许多星(尽管我认为可以改进)。





相关问题
热门标签