亭台六七座 2023-05-15 09:00 采纳率: 35.3%
浏览 38

系统API函数EnumDesktopsA如何使用(语言-c++)

系统API函数EnumDesktopsA如何使用呢
其中有一个参数是函数回调地址,不知道怎么写

  • 写回答

2条回答 默认 最新

  • P2441M 2023-05-15 09:22
    关注

    你可以看看官方文档:https://learn.microsoft.com/zh-cn/windows/win32/api/winuser/nf-winuser-enumdesktopsa
    这个函数会枚举与调用进程的指定窗口站(window station)关联的所有桌面,其原型如下:

    BOOL EnumDesktopsA(
      [in, optional] HWINSTA          hwinsta,
      [in]           DESKTOPENUMPROCA lpEnumFunc,
      [in]           LPARAM           lParam
    );
    
    typedef BOOL (CALLBACK* DESKTOPENUMPROCA)(LPSTR, LPARAM);
    
    1. hwinsta:这个参数指向了要被枚举所有桌面的窗口站的句柄。此句柄必须由 CreateWindowStationGetProcessWindowStationOpenWindowStation 函数返回,且具有 WINSTA_ENUMDESKTOPS 访问权限;若指定此参数为 NULL,则使用当前窗口站;
    2. lpEnumFunc:这个回调函数用于接受枚举结果。回调函数语法如下:
      BOOL CALLBACK EnumDesktopProc(
      LPSTR lpszDesktop,
      LPARAM lParam
      );
      
      其中,lpszDesktop 就是指向桌面名称的字符串;
    3. lParam:有应用程序定义的量,也将传递给回调函数。

    举个例子吧:

    #include <windows.h>
    #include <cstdio>
    
    BOOL CALLBACK MyEnumDesktopProc(LPSTR lpszDesktop, LPARAM lParam)
    {
        printf("桌面名称: %s\n", lpszDesktop);
        return TRUE;
    }
    
    int main()
    {
        HWINSTA hwinsta = GetProcessWindowStation();
        if (!hwinsta) return 1;
        if (!EnumDesktopsA(hwinsta, MyEnumDesktopProc, 0)) return 1;
        return 0;
    }
    
    评论

报告相同问题?

问题事件

  • 创建了问题 5月15日