亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關于我們
? 蟲蟲下載站

?? mintask.cpp

?? 該代碼壓縮包只為需要研究CE下的任務管理器的實現而提供的。某些通用的頭文件沒有包含在其中
?? CPP
字號:
//
// Copyright (c) Microsoft Corporation.  All rights reserved.
//
//
// Use of this source code is subject to the terms of the Microsoft end-user
// license agreement (EULA) under which you licensed this SOFTWARE PRODUCT.
// If you did not accept the terms of the EULA, you are not authorized to use
// this source code. For a copy of the EULA, please see the LICENSE.RTF on your
// install media.
//
/*---------------------------------------------------------------------------*\
 *
 * THIS CODE AND INFORMATION IS PROVIDED "AS IS" WITHOUT WARRANTY OF ANY KIND,
 * EITHER EXPRESSED OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE IMPLIED 
 * WARRANTIES OF MERCHANTABILITY AND/OR FITNESS FOR A PARTICULAR PURPOSE.
 * 
 *
 *  file:  MinTask.cpp
 *  purpose: Implement Sample shell "taskbar" 
 *
 *  Actually this sample implements an *invisible* taskbar, just as a dummy 
 *  window to register with GWE to get the taskbar messages. It doesn't 
 *  actually *do* anything with the taskbar except to trap special 
 *  key-sequences such as Alt-Tab & bring up a Task-Manager type dialog
 *
\*---------------------------------------------------------------------------*/
#include <windows.h>
#include <windowsx.h>
#include "minshell.h"

#define HHTASKBARCLASSNAME  TEXT("HHTaskBar")

//#define TASKBAR_HEIGHT      26
#define TASKBAR_HEIGHT      0   // Since this task-bar has no functionality (see
                                // comments above), let's make it zero-height and
                                // truly invisible.
#define TASKBAR_LOC      	0	// 0=top, 1=left, 2=right, 3=bottom

// this timer is used for housekeeping tasks such as monitoring battery level etc
#define MINSHELL_HOUSEKEEPING_TIMER 71 // pick an random id

// Local fns
LRESULT CALLBACK TaskBarWndProc(HWND hwnd, UINT msg, WPARAM wp, LPARAM lp);
BOOL WINAPI TaskBar_CreateClass(HINSTANCE hInstance);
HWND WINAPI TaskBar_CreateWindow(void);
void WINAPI TaskBar_Cleanup();
void TaskBar_SetWorkArea(void);
void TaskBar_UpdateDesktopArea(void);

BOOL TaskBar_ThreadProc(int nCmdShow)
{
	DWORD dwThrdID = 0;
    MSG msg;

	// Create Taskbar WNDCLASS
	if(!TaskBar_CreateClass(g_hInst))
		return FALSE;

	// Create Taskbar window
	if(!(g_hwndTaskBar = TaskBar_CreateWindow()))
		return FALSE;

	// Create Taskman window *after* registertaskbar, so it can be hidden behind the desktop
	if(!TaskMan_Create())
		return FALSE;

	// Initialize of sample "server" that registers callbacks for the Shell_NotifyIcon & other APIs
	if(!(MinServer_Init()))
		return FALSE;

	RETAILMSG(TRUE, (TEXT("Minshell taskbar thread started.\r\n")));

	// We call SignalStarted with our start-sequence ID to signal that we're
	// done initializing. The ID is passed to us on teh cmdline by the kernel
	// when we are launched at startup from the HKLM\init key. If we don't call
	// SignalStarted() apps that depend on us in the HKLM\init key will never start
	SignalStarted(g_iSignalStartedID);

	while (GetMessage(&msg, NULL, 0, 0)) 
	{
		// first process all the modeless dialog msgs
		if(g_hwndTaskMan && IsDialogMessage(g_hwndTaskMan, &msg))
			continue;
		if(g_hwndMBVL && IsDialogMessage(g_hwndMBVL, &msg))
			continue;
		if(g_hwndBBL && IsDialogMessage(g_hwndBBL, &msg))
			continue;
		if(g_hwndBBVL && IsDialogMessage(g_hwndBBVL, &msg))
			continue;
				
		TranslateMessage(&msg);
		DispatchMessage(&msg);
	}

	TaskBar_Cleanup();
	return msg.wParam;
}

// Create the Taskbar's Window Class
BOOL WINAPI TaskBar_CreateClass(HINSTANCE hInstance)
{
	WNDCLASS wc;

    wc.style         = /*CS_HREDRAW | CS_VREDRAW | */CS_DBLCLKS;
    wc.lpfnWndProc   = (WNDPROC)TaskBarWndProc;
    wc.cbClsExtra    = 0;
    wc.cbWndExtra    = 0;
    wc.hInstance     = hInstance;
    wc.hIcon         = NULL;
	wc.hCursor       = LoadCursor(NULL, IDC_ARROW);
	wc.hbrBackground = GetStockBrush(LTGRAY_BRUSH);
    wc.lpszMenuName  = NULL;
    wc.lpszClassName = HHTASKBARCLASSNAME;

	// Register the window class and return success/failure code.
	return RegisterClass(&wc);

}

void GetTaskbarRect(PRECT prc, BOOL fRest)
{
	// get screen
	SetRect(prc, 0, 0, GetSystemMetrics(SM_CXSCREEN), GetSystemMetrics(SM_CYSCREEN));
	// 0=top, 1=left, 2=right, 3=bottom
	if(!fRest)
	{
		switch(TASKBAR_LOC)
		{
		case 0: prc->bottom = TASKBAR_HEIGHT; break;
		case 1: prc->right = TASKBAR_HEIGHT; break;
		case 2: prc->top = prc->bottom - TASKBAR_HEIGHT; break;
		case 3: prc->left = prc->right - TASKBAR_HEIGHT; break;
		}
	}
	else
	{
		switch(TASKBAR_LOC)
		{
		case 0: prc->top = TASKBAR_HEIGHT; break;
		case 1: prc->left = TASKBAR_HEIGHT; break;
		case 2: prc->bottom = prc->bottom - TASKBAR_HEIGHT; break;
		case 3: prc->right = prc->right - TASKBAR_HEIGHT; break;
		}
	}
	DEBUGMSG(1, (L"%s area=(%d, %d, %d, %d)", (fRest ? L"WORK" : L"TASKBAR"), prc->left, prc->top, prc->right, prc->bottom));
}

// Create & initialize the Taskbar's Window
HWND WINAPI TaskBar_CreateWindow(void)
{
	HWND hwndTB;
	DWORD dwStyle = WS_POPUP;
	RECT rc;

	// get taskbar rect
	GetTaskbarRect(&rc, FALSE);
	hwndTB = CreateWindow(HHTASKBARCLASSNAME, TEXT(""), dwStyle, rc.left, rc.top,
						  rc.right-rc.left, rc.bottom-rc.top, NULL,
						  NULL, g_hInst, NULL);

	if (hwndTB) 
	{
		DEBUGMSG(ZONE_TRACE, (TEXT("Created Minshell taskbar window.\r\n")));

		// This GWE API registers both the desktop & taskbar windows with GWE.
		// Both windows should be created before this API is called.
		// The Taskbar HWND is passed in explicitly. The Desktop HWND is located
		// from it's window-class, which *must* be "DesktopExplorerWindow"
		// 
		// GWE remembers these window handles as special. The desktop window 
		// is used by GWE to hide "minimized" windows (since CE doesn't support
		// true minimization, "minimized"windows just get moved behind the desktop.

		// The taskbar window is notified when top-level windows are created or
		// deleted (so it can put up taskbar icons etc if it wants to -- which 
		// this sample doesn't yet do). The taskbar window is also sent messages on
		// special Windows key sequences such as Alt-Tab, Ctrl-Esc etc.
	
		if(!RegisterTaskBar(hwndTB))
			return FALSE;
		DEBUGMSG(ZONE_TRACE, (TEXT("Registered minshell taskbar & desktop window.\r\n")));

		// Update the workarea (size of other windows) & desktop window size
		TaskBar_SetWorkArea();

		// update & redraw the taskbar
		SetWindowPos(hwndTB, HWND_TOPMOST, 0, 0, 0, 0, SWP_NOMOVE | SWP_NOSIZE);
		InvalidateRect(hwndTB, 0, TRUE);
		ShowWindow(hwndTB, SW_SHOWNORMAL);
		UpdateWindow(hwndTB);

		// Start 5sec housekeeping timer (used for memory & battery level 
		// checks). See handling of this in HOUSEKP.CPP
		SetTimer(hwndTB, MINSHELL_HOUSEKEEPING_TIMER, 5 * 1000, NULL);
	}
	return hwndTB;
}

void WINAPI TaskBar_Cleanup()
{
	if(g_hwndTaskBar)
		KillTimer(g_hwndTaskBar, MINSHELL_HOUSEKEEPING_TIMER);
	TaskMan_Destroy();
}

// To ensure that full-screen apps don't overlap the taskbar, be sure to
// register the new system workspace-area, as the whole screen MINUS
// the area occupied by the taskbar
void TaskBar_SetWorkArea(void)
{
	RECT rc;

	// get taskbar-less rect
	GetTaskbarRect(&rc, TRUE);
	SystemParametersInfo(SPI_SETWORKAREA, 0, (void*)&rc, SPIF_SENDCHANGE);

	// To ensure that the desktop window doesn't overlap the taskbar, be sure to
	// resize it to the work-area
	SetWindowPos(g_hwndDesktop, 0, rc.left, rc.top, rc.right-rc.left, rc.bottom-rc.top, SWP_NOACTIVATE | SWP_NOZORDER);
}

// This is the task-bar wndproc. 
LRESULT CALLBACK TaskBarWndProc(HWND hwnd, UINT msg, WPARAM wp, LPARAM lp)
{
	DEBUGMSG(ZONE_TRACEMSGHF, (TEXT("Taskbar Window Msg=%x wp=%x lp=%x\r\n"), msg, wp, lp));

	switch(msg)
	{
		// 5sec housekeeping timer
		case WM_TIMER:
			DoHibernate(); // check free-memory level & notify apps if neccesary
			DoPowerCheck(hwnd); // check battery levels & pop-up warning if reqd
			break;

		case WM_SYSKEYDOWN:
		case WM_KEYDOWN:
		{
			DEBUGMSG(ZONE_TRACEMSG, (TEXT("Taskbar Window WM_KEYDOWN\r\n")));
			// For now we're sending Ctrl-Esc, Alt-Esc, Alt-Tab, Ctrl-Alt-Del/Bksp all to TaskMan
			// A fuller shell would implement a Start-Menu on Alt-Esc for example.
			switch (wp) 
			{
				case VK_DELETE:
				case VK_BACK:
					// Send Ctrl-Alt-Bksp to Taskman. NOTE: GWES doesn't send us Ctrl-Alt-Del
					DEBUGMSG(ZONE_TRACEMSG, (TEXT("Taskbar Window WM_KEYDOWN, VK_BACK or VK_DELETE\r\n")));
					if (GetKeyState(VK_CONTROL) && GetKeyState(VK_MENU)) 
						Show_TaskMan();
					break;

				case VK_TAB:
					// Send Alt-Tab to TaskMan
					DEBUGMSG(ZONE_TRACEMSG, (TEXT("Taskbar Window WM_KEYDOWN, VK_TAB\r\n")));
					if (GetKeyState(VK_MENU)) 
						Show_TaskMan();
					break;
					
				case VK_ESCAPE:
					// Send Ctrl-Esc & Alt-Esc to TaskMan
					DEBUGMSG(ZONE_TRACEMSG, (TEXT("Taskbar Window WM_KEYDOWN, VK_ESCAPE\r\n")));
					if(GetKeyState(VK_CONTROL) || GetKeyState(VK_MENU))
						Show_TaskMan();
					break;

				default:
					return DefWindowProc(hwnd, msg, wp, lp);
			}
		}
		break;
		case WM_HANDLESHELLNOTIFYICON:
			// Private message posted by the callback in minserver.cpp when it
			// gets a Shell_NotifyIcon call. wParam is NIM_ADD/DELETE etc
			// lParam is a PNOTIFYICONDATA (we are responsible for freeing)
			// For now just print a debug message to show we got the data 
			// correctly.
			PNOTIFYICONDATA pnid;
			pnid = (PNOTIFYICONDATA)lp;
			RETAILMSG(1, (L"got Shell_NotifyIcon(nim=%d, nid(hwnd=0x%08x uId=%d uFlags=%d uCBMsg=%d hIcon=0x%08x, szTip=%s\r\n",
				wp, pnid->hWnd, pnid->uID, pnid->uFlags, pnid->uCallbackMessage, pnid->hIcon, (pnid->szTip ? pnid->szTip : L"null")));
			// ----- Insert real processing of this API here -----
			MyFree(pnid);
			break;
			
		case WM_HANDLESHADDTORECENTDOCS:
			// Private message posted by the callback in minserver.cpp when it
			// gets a SHAddToRecentDocs call. wParam is SHARD_PATH
			// lParam is a the path (we are responsible for freeing)
			// For now just print a debug message to show we got the data 
			// correctly
			RETAILMSG(1, (L"got SHAddToRecentDocs(uFlags=%d, path=%s)\r\n", wp, (lp ? (PTSTR)lp : L"null")));
			// ----- Insert real processing of this API here -----
			MyFree((PVOID)lp);
			break;

		default:
			// This window will get GWE messages on window-create/delete etc. 
			// If it wants to display Win9x/NT-like task buttons etc., it 
			// should handle these messages
			return DefWindowProc(hwnd, msg, wp, lp);
	}
	return 0;
}

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
av一本久道久久综合久久鬼色| 久久综合九色欧美综合狠狠| 天堂蜜桃一区二区三区| 国产嫩草影院久久久久| 91精品国产福利| 在线观看一区二区精品视频| 99精品黄色片免费大全| 91一区二区在线| 99精品久久只有精品| 欧美一卡在线观看| 亚洲欧美视频在线观看| 日本一区二区三区电影| 日日夜夜精品视频免费| 99精品欧美一区二区蜜桃免费| 日韩午夜精品电影| 国产午夜精品久久久久久免费视 | 国产农村妇女毛片精品久久麻豆| 香蕉影视欧美成人| 亚洲国产成人av好男人在线观看| 洋洋av久久久久久久一区| 午夜亚洲福利老司机| 亚洲成av人片| 91麻豆蜜桃一区二区三区| 久久久精品中文字幕麻豆发布| 日本一二三四高清不卡| 亚洲日本韩国一区| 五月天亚洲婷婷| 色屁屁一区二区| 欧美一区二区三区不卡| 亚洲图片欧美一区| 91老师国产黑色丝袜在线| 国产三区在线成人av| 久久精品国产一区二区三| 久久精品99久久久| 91麻豆精品国产91久久久久| 久久综合九色欧美综合狠狠| 蜜桃av一区二区在线观看| 国产精品一色哟哟哟| 91在线观看视频| 亚洲国产精品成人综合色在线婷婷 | 中文欧美字幕免费| 国产精品国产精品国产专区不蜜| 亚洲女厕所小便bbb| av亚洲精华国产精华| 久久亚洲精品小早川怜子| 国内一区二区在线| 色婷婷久久99综合精品jk白丝| 国产精品青草久久| av不卡免费电影| 日韩理论片在线| 在线观看免费亚洲| 成人在线一区二区三区| 91免费国产在线观看| 亚洲欧洲精品天堂一级 | 欧美电影精品一区二区| 国产精品人人做人人爽人人添| 国产传媒日韩欧美成人| 欧美日韩国产片| 中文字幕免费一区| 91在线观看视频| 一区二区免费视频| 欧美色涩在线第一页| 国产欧美日韩另类视频免费观看 | 亚洲成人免费在线观看| 欧美日韩国产精品自在自线| 日本va欧美va瓶| 欧美亚洲综合另类| 日韩毛片在线免费观看| 欧美日韩免费电影| 久久精品国产99久久6| 国产丝袜欧美中文另类| av中文字幕一区| 天天av天天翘天天综合网| 欧美v日韩v国产v| 亚洲人成网站在线| 欧美日韩精品免费| 国产精品一区二区三区网站| 国产精品国产自产拍高清av王其| 欧美性大战久久久久久久蜜臀 | 亚洲高清视频在线| 精品福利一二区| 日本不卡一区二区三区高清视频| 91久久线看在观草草青青| 国产精品黄色在线观看| 51精品视频一区二区三区| 国产乱码一区二区三区| 亚洲综合无码一区二区| 欧美三级视频在线播放| 国产成人av电影在线播放| 久久精品一区蜜桃臀影院| 在线亚洲+欧美+日本专区| 久久99久久99精品免视看婷婷| 日韩一卡二卡三卡四卡| 色狠狠一区二区三区香蕉| 久99久精品视频免费观看| 亚洲精品va在线观看| 91麻豆福利精品推荐| 另类专区欧美蜜桃臀第一页| 一区二区三区免费在线观看| 久久亚洲综合色| 4438x成人网最大色成网站| av在线一区二区三区| 久草精品在线观看| 天天亚洲美女在线视频| 一级日本不卡的影视| 国产欧美日韩精品一区| 欧美电视剧在线观看完整版| 欧美三级电影网| 色婷婷av一区| av在线免费不卡| 国产999精品久久| 久久精品噜噜噜成人av农村| 午夜精品123| 亚洲国产综合视频在线观看| 国产精品福利在线播放| 国产精品麻豆网站| 久久久亚洲午夜电影| 精品久久一二三区| 久久综合九色综合欧美98| 精品国产乱码久久久久久久久| 91精品国产综合久久香蕉麻豆| 在线一区二区三区四区| 色爱区综合激月婷婷| 精品国产乱码久久久久久老虎| 欧美一级理论性理论a| 4438成人网| 日韩视频免费直播| 日韩免费高清av| 欧美成人精品二区三区99精品| 日韩一级免费一区| 精品国产a毛片| 2020国产精品自拍| 欧美国产精品中文字幕| 欧美高清在线视频| 中文字幕在线不卡视频| 亚洲婷婷综合久久一本伊一区| 亚洲天天做日日做天天谢日日欢 | 久久综合九色欧美综合狠狠| 精品电影一区二区三区| 国产亚洲一区二区三区在线观看 | 日韩精品乱码av一区二区| 日韩高清一区二区| 狠狠色综合日日| 成人免费黄色大片| 一本色道a无线码一区v| 欧美精品精品一区| 成人免费电影视频| 色天天综合久久久久综合片| 精品污污网站免费看| 亚洲国产精品国自产拍av| 亚洲欧美中日韩| 亚洲五码中文字幕| 韩国理伦片一区二区三区在线播放| 国产成人丝袜美腿| 91久久精品日日躁夜夜躁欧美| 91麻豆精品国产91久久久久久| 国产午夜亚洲精品午夜鲁丝片 | 国产精品欧美久久久久无广告| 亚洲视频免费在线| 日韩成人av影视| 国产精品白丝av| 成人国产亚洲欧美成人综合网| 精品一区在线看| 91在线观看一区二区| 777xxx欧美| 国产精品久久久久久久久免费桃花 | 亚洲视频你懂的| 美女视频第一区二区三区免费观看网站| 国产伦精品一区二区三区在线观看| 日韩和的一区二区| 成熟亚洲日本毛茸茸凸凹| 欧美精品久久99久久在免费线| 欧美国产日产图区| 日本特黄久久久高潮| 色综合久久综合中文综合网| 日韩一区二区三区四区| 亚洲欧美一区二区三区极速播放| 蜜桃久久av一区| 欧美四级电影网| 亚洲欧美在线观看| 国产在线视频一区二区三区| 久久一区二区视频| 日韩黄色免费电影| 色诱视频网站一区| 国产精品美女一区二区| 激情另类小说区图片区视频区| 91高清视频在线| 国产精品乱码一区二区三区软件| 免费成人在线观看视频| 欧美日韩精品欧美日韩精品| 亚洲私人影院在线观看| 成人性生交大片免费看在线播放| 日韩亚洲欧美在线| 视频一区欧美精品| 欧美在线小视频| 一区二区免费看| 日本高清不卡在线观看| 亚洲私人影院在线观看| 成人美女在线视频| 国产精品女同一区二区三区|