⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 shutwm.cpp

📁 本人自己写的widows mobile小工具
💻 CPP
字号:
// ShutWm.cpp : 定义应用程序的入口点。
//

#include "stdafx.h"
#include "ShutWm.h"
#include <windows.h>
#include <commctrl.h>
//#include "pm.h"
#include "winioctl.h"

#define MAX_LOADSTRING		100
#define ID_TRAY				1000
#define WM_TRAY_NOTIFY		(WM_USER + 100)
#define MENU_OFFSCREEN		1
#define MENU_RESET			2
#define MENU_SHUTDOWN		3
#define MENU_EXIT			4
#define MENU_AUTORUN		5

#define IOCTL_HAL_REBOOT   CTL_CODE(FILE_DEVICE_HAL, 15, METHOD_BUFFERED, FILE_ANY_ACCESS)

// 全局变量:
HINSTANCE		g_hInst = NULL;			// 当前实例
HMENU			g_hMenu = NULL;			// 弹出菜单
HICON			g_hIcon = NULL;			// 托盘图标
BOOL			g_bAutoRun = FALSE;		//是否开机启动
TCHAR			g_tszAppPath[MAX_PATH] = {0};	// 程序路径
TCHAR			g_tszLinkPath[MAX_PATH] = _T("\\Windows\\StartUp\\ShutWM.lnk");

// 此代码模块中包含的函数的前向声明:
ATOM				MyRegisterClass(HINSTANCE, LPTSTR);
BOOL				InitInstance(HINSTANCE, int);
LRESULT CALLBACK	WndProc(HWND, UINT, WPARAM, LPARAM);
BOOL				TrayMessage(HWND hwnd, UINT uMsg, UINT uID, HICON hIcon);
BOOL				AppLinkExist();
void				GenKeyEvent(BYTE bVkCode);

extern "C" __declspec(dllimport) BOOL KernelIoControl(   
	DWORD   dwIoControlCode,     
	LPVOID   lpInBuf,     
	DWORD   nInBufSize,     
	LPVOID   lpOutBuf,     
	DWORD   nOutBufSize,     
	LPDWORD   lpBytesReturned);

//extern "C" __declspec(dllimport) void FileSystemPowerFunction();
//extern "C" __declspec(dllimport) void PowerOffSystem();
//extern "C" BOOL ExitWindowsEx(UINT uFlags, DWORD dwReason);


int WINAPI WinMain(HINSTANCE hInstance,
                   HINSTANCE hPrevInstance,
                   LPTSTR    lpCmdLine,
                   int       nCmdShow)
{
	MSG msg;

	// 执行应用程序初始化:
	if (!InitInstance(hInstance, nCmdShow)) 
	{
		return FALSE;
	}

	// 主消息循环:
	while (GetMessage(&msg, NULL, 0, 0)) 
	{
		TranslateMessage(&msg);
		DispatchMessage(&msg);
	}

	return (int)msg.wParam;
}

ATOM MyRegisterClass(HINSTANCE hInstance, LPTSTR szWindowClass)
{	
	WNDCLASS wc;

	wc.style         = CS_HREDRAW | CS_VREDRAW;
	wc.lpfnWndProc   = WndProc;
	wc.cbClsExtra    = 0;
	wc.cbWndExtra    = 0;
	wc.hInstance     = hInstance;
	wc.hIcon         = g_hIcon;
	wc.hCursor       = 0;
	wc.hbrBackground = (HBRUSH)GetStockObject(WHITE_BRUSH);
	wc.lpszMenuName  = 0;
	wc.lpszClassName = szWindowClass;

	return RegisterClass(&wc);
}

BOOL InitInstance(HINSTANCE hInstance, int nCmdShow)
{
    HWND hWnd = NULL;
    TCHAR szTitle[MAX_LOADSTRING] = _T("ShutWM_sky");		// 标题栏文本
    TCHAR szWindowClass[MAX_LOADSTRING] = _T("ShutWM_yks");	// 主窗口类名

    g_hInst = hInstance; // 将实例句柄存储在全局变量中
	g_hIcon = LoadIcon(hInstance, MAKEINTRESOURCE(IDI_SHUTWM));

    // 在应用程序初始化期间,应调用一次 SHInitExtraControls 以初始化
    // 所有设备特定控件,例如,CAPEDIT 和 SIPPREF。
    //SHInitExtraControls();

    //如果它已经在运行,则将焦点置于窗口上,然后退出
    hWnd = FindWindow(szWindowClass, szTitle);	
    if (hWnd) 
    {
        // 将焦点置于最前面的子窗口
        // “| 0x00000001”用于将所有附属窗口置于前台并
        // 激活这些窗口。
        //SetForegroundWindow((HWND)((ULONG) hWnd | 0x00000001));
        return FALSE;
    } 

    if (!MyRegisterClass(hInstance, szWindowClass))
    {
    	return FALSE;
    }

    hWnd = CreateWindow(szWindowClass, szTitle, ~WS_VISIBLE,
        CW_USEDEFAULT, CW_USEDEFAULT, CW_USEDEFAULT, CW_USEDEFAULT, NULL, NULL, hInstance, NULL);

    if (!hWnd)
    {
        return FALSE;
    }

    return TRUE;
}

LRESULT CALLBACK WndProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam)
{
    //int wmId, wmEvent;
	
    switch (message) 
    {
        case WM_COMMAND:
		{
            //wmId    = LOWORD(wParam); 
            //wmEvent = HIWORD(wParam); 
            // 分析菜单选择:
            switch (LOWORD(wParam))
            {
				case MENU_OFFSCREEN:
				{
					//GenKeyEvent(VK_F22);//锁屏keylock
					GenKeyEvent(VK_OFF);//关屏,会断开AcitveSync
					break;
				}
				case MENU_RESET:
				{
					//SetSystemPowerState(NULL, POWER_STATE_RESET, POWER_FORCE);//可以用
					KernelIoControl(IOCTL_HAL_REBOOT, NULL, 0, NULL, 0, NULL);//可以用
					//FileSystemPowerFunction();//和下面一行一起使用
					//PowerOffSystem();//暂不可以用
					//ExitWindowsEx(EWX_REBOOT, 0);//可以用
					break;
				}
				case MENU_SHUTDOWN:
				{	
					//只是关屏,没有关机
					//SetSystemPowerState(NULL, POWER_STATE_OFF, POWER_FORCE);					
					//ExitWindowsEx(EWX_POWEROFF, 0);
					break;
				}
				case MENU_EXIT:
				{
					SendMessage(hWnd, WM_CLOSE, 0, 0);
					break;
				}					
				case MENU_AUTORUN:
				{
					if (g_bAutoRun)
					{
						if (DeleteFile(g_tszLinkPath))
						{
							g_bAutoRun = FALSE;							
						}						
					} 
					else
					{
						TCHAR tszTempAppPath[MAX_PATH] = {0};
						wsprintf(tszTempAppPath, _T("\"%s\""), g_tszAppPath);
						if (SHCreateShortcut(g_tszLinkPath, tszTempAppPath))
						{
							g_bAutoRun = TRUE;
						}
					}

					CheckMenuItem(g_hMenu, MENU_AUTORUN, g_bAutoRun?MF_CHECKED:MF_UNCHECKED);
					break;
				}
                default:
                {
					return DefWindowProc(hWnd, message, wParam, lParam);
				}
            }

            break;
		}
        case WM_CREATE:	
		{			
			GetModuleFileName(NULL, g_tszAppPath, MAX_PATH);
			g_hMenu = CreatePopupMenu();
			AppendMenu(g_hMenu, MF_STRING, MENU_OFFSCREEN, _T("关屏"));
			AppendMenu(g_hMenu, MF_STRING, MENU_RESET, _T("重启"));
			//AppendMenu(g_hMenu, MF_STRING, MENU_SHUTDOWN, _T("关机"));
			AppendMenu(g_hMenu, MF_STRING, MENU_EXIT, _T("退出"));
			AppendMenu(g_hMenu, MF_SEPARATOR, NULL, _T(""));
			UINT uFlag = MF_STRING;

			if (AppLinkExist())
			{
				g_bAutoRun = TRUE;
				uFlag |= MF_CHECKED;
			}
			else
			{
				g_bAutoRun = FALSE;
				uFlag |= MF_UNCHECKED;
			}

			AppendMenu(g_hMenu, uFlag, MENU_AUTORUN, _T("开机启动"));			
			TrayMessage(hWnd, NIM_ADD, ID_TRAY, g_hIcon);
			break;
		}
        case WM_DESTROY:
		{
			DestroyMenu(g_hMenu);
			TrayMessage(hWnd, NIM_DELETE, ID_TRAY, g_hIcon);
            PostQuitMessage(0);
            break;
		}
		case WM_TRAY_NOTIFY:
		{
			if (ID_TRAY == wParam && WM_LBUTTONUP == lParam)
			{
				TrackPopupMenu(g_hMenu, TPM_BOTTOMALIGN, GetSystemMetrics(SM_CXSCREEN), 
					GetSystemMetrics(SM_CYSCREEN), 0, hWnd, NULL);
			}

			break;
		}
        default:
		{
            return DefWindowProc(hWnd, message, wParam, lParam);
		}
    }

    return 0;
}

BOOL TrayMessage(HWND hwnd, UINT uMsg, UINT uID, HICON hIcon)
{
	NOTIFYICONDATA nid;
	nid.cbSize = sizeof(NOTIFYICONDATA);
	nid.hWnd = hwnd;
	nid.uID = uID;
	nid.uFlags = NIF_MESSAGE|NIF_ICON;
	nid.uCallbackMessage = WM_TRAY_NOTIFY;
	nid.hIcon = hIcon;
	nid.szTip[0] = '\0';

	return Shell_NotifyIcon(uMsg, &nid);
}

BOOL AppLinkExist()
{
	BOOL bExist = FALSE;
	TCHAR tszLinkPath[MAX_PATH] = {0};
	TCHAR tszTargetPath[MAX_PATH] = {0};
	TCHAR tszTempApppath[MAX_PATH] = {0};
	wsprintf(tszTempApppath, _T("\"%s\""), g_tszAppPath);

	WIN32_FIND_DATA findData;
	HANDLE hFile;
	BOOL bFindFile = FALSE;
	DWORD dwErrorCode = 0;
	SetLastError(dwErrorCode);
	hFile = FindFirstFile(_T("\\Windows\\StartUp\\*.lnk"), &findData);	

	while (INVALID_HANDLE_VALUE != hFile)
	{
		wsprintf(tszLinkPath, _T("%s%s"), _T("\\Windows\\StartUp\\"), findData.cFileName);

		if (SHGetShortcutTarget(tszLinkPath, tszTargetPath, MAX_PATH))
		{
			if (0 == lstrcmp(tszTempApppath, tszTargetPath))
			{
				wcsncpy(g_tszLinkPath, tszLinkPath, MAX_PATH);
				bExist = TRUE;
				break;
			}
		}

		bFindFile = FindNextFile(hFile, &findData);

		if (!bFindFile)
		{
			dwErrorCode = GetLastError();

			if (ERROR_NO_MORE_FILES == dwErrorCode)
			{
				break;
			}
		}		
	}

	FindClose(hFile);

	return bExist;
}

void GenKeyEvent(BYTE bVkCode)
{
	keybd_event(bVkCode, 0, KEYEVENTF_SILENT, 0);
	Sleep(100);
	keybd_event(bVkCode, 0, KEYEVENTF_SILENT | KEYEVENTF_KEYUP, 0);
}



⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -