| | |
| | | #define DeviceID 0 |
| | | |
| | | // 托盘图标 ID 与消息宏 |
| | | #define ID_TRAY_OPEN_DIR 2000 // 打开目录 |
| | | #define ID_TRAY_RESTORE 2001 // 恢复窗口 |
| | | #define ID_TRAY_EXIT 2002 // 退出程序 |
| | | #define WM_TRAY_ICON_NOTIFY (WM_USER + 1000) // 托盘图标回调消息 ID |
| | |
| | | strAppName = strAppName.Left(strAppName.ReverseFind('.')); |
| | | |
| | | HKEY hKey; |
| | | LONG lRet = RegOpenKeyEx(HKEY_CURRENT_USER, _T("Software\\Microsoft\\Windows\\CurrentVersion\\Run"), 0, KEY_WRITE, &hKey); |
| | | LONG lRet = RegOpenKeyEx(HKEY_CURRENT_USER, _T("Software\\Microsoft\\Windows\\CurrentVersion\\Run"), 0, KEY_READ | KEY_WRITE, &hKey); |
| | | |
| | | if (lRet != ERROR_SUCCESS) { |
| | | return false; |
| | | } |
| | | |
| | | DWORD dwType = 0; |
| | | TCHAR szValue[MAX_PATH] = { 0 }; |
| | | DWORD dwSize = sizeof(szValue); |
| | | lRet = RegQueryValueEx(hKey, strAppName, 0, &dwType, (LPBYTE)szValue, &dwSize); |
| | | |
| | | if (bEnable) { |
| | | // 设置自启 |
| | | lRet = RegSetValueEx(hKey, strAppName, 0, REG_SZ, (BYTE*)(LPCTSTR)strAppPath, (strAppPath.GetLength() + 1) * sizeof(TCHAR)); |
| | | if (lRet != ERROR_SUCCESS || _tcsicmp(szValue, strAppPath) != 0) { |
| | | // 设置自启 |
| | | lRet = RegSetValueEx(hKey, strAppName, 0, REG_SZ, (BYTE*)(LPCTSTR)strAppPath, (strAppPath.GetLength() + 1) * sizeof(TCHAR)); |
| | | } |
| | | else { |
| | | lRet = ERROR_SUCCESS; |
| | | } |
| | | } |
| | | else { |
| | | // 取消自启 |
| | | lRet = RegDeleteValue(hKey, strAppName); |
| | | if (lRet == ERROR_SUCCESS) { |
| | | // 取消自启 |
| | | lRet = RegDeleteValue(hKey, strAppName); |
| | | } |
| | | else { |
| | | lRet = ERROR_SUCCESS; |
| | | } |
| | | } |
| | | |
| | | RegCloseKey(hKey); |
| | |
| | | ON_WM_DRAWITEM() |
| | | ON_WM_CLOSE() |
| | | ON_MESSAGE(WM_TRAY_ICON_NOTIFY, &CSGMeasurementDlg::OnTrayIconClick) |
| | | ON_COMMAND(ID_TRAY_OPEN_DIR, &CSGMeasurementDlg::OnTrayOpenDir) |
| | | ON_COMMAND(ID_TRAY_RESTORE, &CSGMeasurementDlg::OnTrayRestore) |
| | | ON_COMMAND(ID_TRAY_EXIT, &CSGMeasurementDlg::OnTrayExit) |
| | | ON_BN_CLICKED(IDC_BUTTON_CONNECT, &CSGMeasurementDlg::OnBnClickedButtonConnect) |
| | |
| | | |
| | | // 图标 |
| | | HICON hIcon = nullptr; |
| | | if (id == ID_TRAY_OPEN_DIR) { |
| | | hIcon = AfxGetApp()->LoadIcon(IDI_ICON_OPEN_DIR); |
| | | } |
| | | |
| | | if (id == ID_TRAY_RESTORE) { |
| | | hIcon = AfxGetApp()->LoadIcon(IDI_ICON_RESTORE); |
| | | } |
| | |
| | | |
| | | // 文本 |
| | | CString str; |
| | | if (id == ID_TRAY_OPEN_DIR) { |
| | | str = _T("打开目录"); |
| | | } |
| | | |
| | | if (id == ID_TRAY_RESTORE) { |
| | | str = _T("恢复界面"); |
| | | } |
| | |
| | | // 右键点击弹出菜单 |
| | | CMenu menu; |
| | | menu.CreatePopupMenu(); |
| | | menu.AppendMenu(MF_OWNERDRAW, ID_TRAY_OPEN_DIR, (LPCTSTR)ID_TRAY_OPEN_DIR); |
| | | menu.AppendMenu(MF_OWNERDRAW, ID_TRAY_RESTORE, (LPCTSTR)ID_TRAY_RESTORE); |
| | | menu.AppendMenu(MF_OWNERDRAW, ID_TRAY_EXIT, (LPCTSTR)ID_TRAY_EXIT); |
| | | |
| | | // 加载图标 |
| | | HICON hIconRestore = (HICON)::LoadImage(AfxGetInstanceHandle(), MAKEINTRESOURCE(IDI_ICON_RESTORE), IMAGE_ICON, 16, 16, LR_SHARED); |
| | | HICON hIconExit = (HICON)::LoadImage(AfxGetInstanceHandle(), MAKEINTRESOURCE(IDI_ICON_EXIT), IMAGE_ICON, 16, 16, LR_SHARED); |
| | | |
| | | // 设置图标到菜单项 |
| | | MENUITEMINFO mii = { sizeof(MENUITEMINFO) }; |
| | | mii.fMask = MIIM_BITMAP; |
| | | |
| | | // 恢复菜单项图标 |
| | | // 打开目录菜单项图标 |
| | | mii.hbmpItem = HBMMENU_CALLBACK; |
| | | menu.SetMenuItemInfo(ID_TRAY_OPEN_DIR, &mii); |
| | | |
| | | // 恢复窗口菜单项图标 |
| | | mii.hbmpItem = HBMMENU_CALLBACK; |
| | | menu.SetMenuItemInfo(ID_TRAY_RESTORE, &mii); |
| | | |
| | | // 退出菜单项图标 |
| | | // 退出程序菜单项图标 |
| | | mii.hbmpItem = HBMMENU_CALLBACK; |
| | | menu.SetMenuItemInfo(ID_TRAY_EXIT, &mii); |
| | | |
| | |
| | | return 0; |
| | | } |
| | | |
| | | void CSGMeasurementDlg::OnTrayOpenDir() |
| | | { |
| | | CString strDir = GetAppDirectory(); |
| | | if (PathFileExists(strDir)) { |
| | | ShellExecute(NULL, _T("open"), strDir, NULL, NULL, SW_SHOWDEFAULT); |
| | | AppendLogLineRichStyled(_T("已打开程序目录"), LOG_COLOR_SUCCESS); |
| | | } |
| | | else { |
| | | AppendLogLineRichStyled(_T("目录不存在,无法打开"), LOG_COLOR_ERROR); |
| | | } |
| | | } |
| | | |
| | | void CSGMeasurementDlg::OnTrayRestore() |
| | | { |
| | | ShowWindow(SW_SHOW); // 恢复窗口 |