📄 shortcut.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 + -