void StartExplorer()
{
STARTUPINFO si;
ZeroMemory( &si, sizeof(si) );
si.cb = sizeof(si);
si.lpDesktop = "Virtual";
ZeroMemory( &piExplor, sizeof(piExplor) );
if( !CreateProcess( NULL, // No module name (use command line).
"explorer", // Command line.
NULL, // Process handle not inheritable.
NULL, // Thread handle not inheritable.
FALSE, // Set handle inheritance to FALSE.
0, // No creation flags.
NULL, // Use parent's environment block.
NULL, // Use parent's starting directory.
&si, // Pointer to STARTUPINFO structure.
&piExplor ) // Pointer to PROCESS_INFORMATION structure.
)
{
MessageBox(NULL,"无法初始化Explorer","Error",0);
ExitProcess(1);
}
}
ATOM MyRegisterClass(HINSTANCE hInstance)
{
WNDCLASSEX wcex;
wcex.cbSize = sizeof(WNDCLASSEX);
wcex.style = CS_HREDRAW | CS_VREDRAW;
wcex.lpfnWndProc = (WNDPROC)WndProc;
wcex.cbClsExtra = 0;
wcex.cbWndExtra = 0;
wcex.hInstance = hInstance;
wcex.hIcon = LoadIcon(hInstance, (LPCTSTR)IDI_APPLICATION);
wcex.hCursor = LoadCursor(NULL, IDC_ARROW);
wcex.hbrBackground = (HBRUSH)(COLOR_WINDOW+1);
wcex.lpszMenuName = NULL;
wcex.lpszClassName = szAppName;
wcex.hIconSm = LoadIcon(wcex.hInstance, (LPCTSTR)IDI_APPLICATION);
return RegisterClassEx(&wcex);
}
BOOL InitInstance(HINSTANCE hInstance, int nCmdShow)
{
hInst = hInstance; // 将实例句柄存储在全局变量中
hwnd = CreateWindow(szAppName, TEXT ("SunBear"), WS_OVERLAPPEDWINDOW,
CW_USEDEFAULT, 0, CW_USEDEFAULT, 0, NULL, NULL, hInst, NULL);
if (!hwnd)
{
return FALSE;
}
return TRUE;
}
int WINAPI WinMain (HINSTANCE hInstance, HINSTANCE hPrevInstance,PSTR szCmdLine, int iCmdShow)
{
static TCHAR szAppName[] = TEXT ("SunBear") ;
MSG msg ;
SetStartup(hInstance);
hVirtualDesk = CreateDesktop(
"Virtual",
NULL,
NULL,
DF_ALLOWOTHERACCOUNTHOOK,
GENERIC_ALL,
NULL);
hCurrent = GetThreadDesktop(GetCurrentThreadId());
MyRegisterClass(hInstance);
if (!InitInstance (hInstance, iCmdShow))
{
return FALSE;
}
StartExplorer(); //启动Explorer进程
if(!RegisterHotKey(hwnd, 0x0001,MOD_ALT ,'Q'))
{
//处理切换虚拟桌面
return TRUE;
}
if(!RegisterHotKey(hwnd, 0x0002, 0,VK_F8))
{
//处理退出进程
return TRUE;
}
while (GetMessage (&msg, NULL, 0, 0))
{
TranslateMessage (&msg) ;
DispatchMessage (&msg) ;
}
return 0;
}
LRESULT CALLBACK WndProc (HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam)
{
HDC hdc ;
PAINTSTRUCT ps ;
static HDESK hNow = hCurrent;
switch (message)
{
case WM_PAINT:
hdc = BeginPaint (hwnd, &ps) ;
EndPaint (hwnd, &ps) ;
return 0 ;
case WM_DESTROY: