首页
社区
课程
招聘
[原创]Windows动态桌面的实现
2021-4-7 15:10 3569

[原创]Windows动态桌面的实现

2021-4-7 15:10
3569

原理:

所谓的动态桌面就是在桌面窗口上插入播放器,播放视频。

子函数之找到顶层的窗口

实际上桌面是一个特殊的窗口,我们需要先找到它的句柄才能对它进行操作。

1
2
3
4
5
6
7
8
BOOL CALLBACK EnumWindowProcFindDesktopWindow(HWND hTop, LPARAM lparam)
{
    HWND hWndShl = FindWindowExW(
        hTop, nullptr, L"SHELLDLL_DefView", nullptr);
    if (hWndShl == nullptr) { return true; }
    s_hWorkerWnd = FindWindowExW(nullptr, hTop, L"WorkerW", nullptr);
    return s_hWorkerWnd == nullptr;
}

主函数

1
2
3
4
5
HWND hwnd_pro = FindWindow(L"Progman", NULL);
    if (hwnd_pro == NULL) { std::cout << "can not find the progman"; return 1; }
    DWORD_PTR result = NULL;
    SendMessageTimeout(hwnd_pro, 0x052c, 0, 0, SMTO_NORMAL, 1000, &result);
    EnumWindows(EnumWindowProcFindDesktopWindow, NULL);

调用开源的vlc播放器

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
char* path = new char[MAX_PATH];
   WideCharToMultiByte(CP_UTF8, 0, L"C:\\Users\\user\\Desktop\\1.mp4", -1, path, 128, NULL, 0);
    libvlc_instance_t* inst = libvlc_new(0, 0);
    libvlc_media_t* m = libvlc_media_new_path(inst, path);
    libvlc_media_list_t* ml = libvlc_media_list_new(inst);
    libvlc_media_player_t* mp = libvlc_media_player_new_from_media(m);
    libvlc_media_list_player_t* mlp = libvlc_media_list_player_new(inst);
    libvlc_media_list_add_media(ml, m);
    libvlc_media_release(m);
    libvlc_media_list_player_set_media_list(mlp, ml);
    libvlc_media_list_player_set_media_player(mlp, mp);
    libvlc_media_list_player_set_playback_mode(mlp, libvlc_playback_mode_loop);;
    libvlc_media_player_set_hwnd(mp, s_hWorkerWnd);
    libvlc_audio_set_volume(mp, 100);
    libvlc_media_list_player_play(mlp);
    std::cin.get();

这样我们就简单地实现了动态桌面。


[CTF入门培训]顶尖高校博士及硕士团队亲授《30小时教你玩转CTF》,视频+靶场+题目!助力进入CTF世界

最后于 2021-4-7 15:14 被wx_放心我很好编辑 ,原因:
收藏
点赞1
打赏
分享
最新回复 (0)
游客
登录 | 注册 方可回帖
返回