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

📄 shortcut.cpp

📁 Cele Task - 强大的工作管理员
💻 CPP
字号:



////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
// 预处理
#include "Main.h"
#include "Shortcut.h"

#define REG_RButtonKey TEXT("Software\\Microsoft\\Home\\Keys\\113")
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////



////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
// 处理右键按钮
VOID CShortcut::OnRButton()
{
	DWORD dwResult;
	if (CMainWnd::IsMenuChecked(IDM_Tools_Task))
	{
		dwResult = CReg::DelKey(REG_RButtonKey);
	}
	else
	{
		dwResult = CReg::Open(REG_RButtonKey);
		if (dwResult == ERROR_SUCCESS)
		{
			TCHAR tzText[MAX_PATH];

			CMainWnd::GetMenuText(IDM_Tools_Task, tzText);
			CReg::SetString(NULL, tzText);

			GetModuleFileName(NULL, tzText, MAX_PATH);
			dwResult = CReg::SetString(TEXT("Open"), tzText);

			CReg::Close();
		}
	}

	ShowResult(dwResult);
}
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////



////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
// 右键按钮是否存在
BOOL CShortcut::Exist()
{
	TCHAR tzText[MAX_PATH];
	TCHAR tzPath[MAX_PATH];		

	_ReturnValIf(CReg::Open(REG_RButtonKey) != ERROR_SUCCESS, FALSE)

	CReg::GetString(TEXT("Open"), tzText);
	GetModuleFileName(NULL, tzPath, MAX_PATH);

	CReg::Close();
		
	return (lstrcmpi(tzText, tzPath) == 0);
}
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////



////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
// 处理快捷方式
VOID CShortcut::OnShortcut(UINT uCmd, PCTSTR ptzArgs, UINT uIcon)
{
	BOOL bResult;
	TCHAR tzPath[MAX_PATH];

	GetPath(uCmd, tzPath);
	if (CMainWnd::IsMenuChecked(uCmd))
	{
		bResult = DeleteFile(tzPath);
	}
	else
	{
		bResult = Create(tzPath, ptzArgs, uIcon);
	}

	ShowResult(bResult ? ERROR_SUCCESS : GetLastError());
}
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////



////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
// 快捷方式是否存在
BOOL CShortcut::Exist(UINT uCmd)
{
	HANDLE hFind;
	TCHAR tzPath[MAX_PATH];
	WIN32_FIND_DATA fdFind;

	return ((hFind = FindFirstFile(GetPath(uCmd, tzPath), &fdFind)) != INVALID_HANDLE_VALUE) && FindClose(hFind);
}
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////



////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
// 获取路径
PTSTR CShortcut::GetPath(UINT uCmd, PTSTR ptzPath)
{
	TCHAR tzDir[MAX_PATH];
	TCHAR tzName[MAX_PATH];

	CMainWnd::GetMenuText(uCmd, tzName);
	SHGetSpecialFolderPath(NULL, tzDir, CSIDL_STARTMENU, FALSE);
	wsprintf(ptzPath, TEXT("%s\\%s.lnk"), tzDir, tzName);

	return ptzPath;
}
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////



////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
// 创建快捷方式
BOOL CShortcut::Create(PCTSTR ptzPath, PCTSTR ptzArgs, UINT uIcon)
{
	DWORD dwSize;
	HANDLE hFile;
	TCHAR tzPath[MAX_PATH];
	CHAR szLink[MAX_PATH * 2];
	TCHAR tzLink[MAX_PATH * 2];

	// 生成快捷方式文件内容
	dwSize = wsprintf(tzLink, TEXT("%u#\"%s\"%s"), GetModuleFileName(NULL, tzPath, MAX_PATH) + 2, tzPath, ptzArgs);
	if (uIcon)
	{
		wsprintf(tzLink + dwSize, TEXT("?%s,-%u"), tzPath, uIcon);
	}

	// 创建文件
	hFile = _CreateFileForWrite(ptzPath);
	_ReturnValIf(hFile == INVALID_HANDLE_VALUE, FALSE);

	WriteFile(hFile, szLink, _WStrToAStr(szLink, tzLink), &dwSize, NULL);

	return CloseHandle(hFile);
}
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////



////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
// 显示结果
VOID CShortcut::ShowResult(DWORD dwResult)
{
	if (dwResult == ERROR_SUCCESS)
	{
		CMainWnd::MsgBox(STR_SuccessMsg);
	}
	else
	{
		TCHAR tzText[MAX_PATH];
		wsprintf(tzText, STR_UnknownErr, dwResult);
		CMainWnd::ErrBox(tzText);
	}
}
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////

⌨️ 快捷键说明

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