原理很简单,一看便知,主要的实现代码如下:
#include "stdafx.h"
#include <iostream>
#include <windows.h>
using namespace std;
static int i = 0;
BOOL CALLBACK EnumWindowsProc( HWND hwnd,
LPARAM lParam)
{
if(::GetWindowLong(hwnd,GWL_STYLE)& WS_VISIBLE)
{
char lpName[256];
GetClassName( hwnd , lpName , 256 );
cout<< '/t' << lpName <<endl;
}
return TRUE;
}
BOOL CALLBACK EnumDesktopPrc( LPTSTR lpszDesktop, // name of a desktop
LPARAM lParam) // value specified in EnumDesktops call);
{
cout << '/t' << lpszDesktop << endl;
HDESK hDesk = OpenDesktop( lpszDesktop , 0 , FALSE , DESKTOP_ENUMERATE );
if(hDesk)
EnumDesktopWindows( hDesk , (WNDENUMPROC)EnumWindowsProc , 0L );
i++;
return TRUE;
}
BOOL CALLBACK EnumWindowStationProc( LPTSTR lpszWindowStation,
// name of a window station
LPARAM lParam) // value specified in EnumWindowStations call
{
HWINSTA hWstn = OpenWindowStation(lpszWindowStation, 0,
WINSTA_ENUMDESKTOPS);
cout << "window station name: "<<lpszWindowStation << endl;
if(hWstn) EnumDesktops(hWstn, (DESKTOPENUMPROC)EnumDesktopPrc, 0L);
CloseHandle(hWstn);
return TRUE;
}
void main()
{
EnumWindowStations( (WINSTAENUMPROC) EnumWindowStationProc, 0L);
cout << "Total desktops: " << i << endl;
}