2011-12-20 105 views

回答

1

如果你的窗口管理器是EWMH兼容,可以使用下列的属性:

http://standards.freedesktop.org/wm-spec/1.4/ar01s03.html

特别

_NET_NUMBER_OF_DESKTOPS_NET_DESKTOP_NAMES


this site的修改代码将列出所有可用的虚拟桌面。它打开一个管道wmctrl -d与有*指示的当前virt.desktop返回列表:

#include <stdio.h> 
#include <stdlib.h> 

#ifdef WIN32 
FILE *popen (const char* command, const char* flags) {return _popen(command,flags);} 
int pclose (FILE* fd) { return _pclose(fd);} 
#endif 

int main(int argc, char* argv[]) 
{ 
    char psBuffer[4096]; 
    FILE *iopipe; 

    if((iopipe = popen("wmctrl -d", "r")) == NULL) 
     exit(1); 

    while(!feof(iopipe)) 
    { 
     if(fgets(psBuffer, 4095, iopipe) != NULL) 
      printf(psBuffer); 
    } 

    printf("\nProcess returned %d\n", pclose(iopipe)); 
    return 0; 
} 

捕获的输出将是这个样子:(人wmctrl进行说明)

0 * DG: 1680x1050 VP: 0,0 WA: 36,36 3564x1044 (Unnamed desktop) 
1 - DG: 1680x1050 VP: 0,0 WA: 36,36 3564x1044 desktop 2 
2 - DG: 1680x1050 VP: 0,0 WA: 36,36 3564x1044 desktop 3 
3 - DG: 1680x1050 VP: 0,0 WA: 36,36 3564x1044 desktop 4 
4 - DG: 1680x1050 VP: 0,0 WA: 36,36 3564x1044 desktop 5 
5 - DG: 1680x1050 VP: 0,0 WA: 36,36 3564x1044 desktop 6