BOOL TRecvDlg::EndRecvFile(BOOL manual_suspend) { if (fileObj->hThread) { HANDLE hThread = fileObj->hThread; fileObj->hThread = 0; // 中断の合図 WaitForSingleObject(hThread, INFINITE); ::CloseHandle(hThread); } fileObj->lastTick = fileObj->conInfo->lastTick = ::GetTickCount(); SetTransferButtonText(); int target = ShareMng::GetFileInfoNo(shareInfo, fileObj->fileInfo); FileInfo *fileInfo = fileObj->fileInfo; BOOL isSingleTrans = fileObj->startTick == fileObj->conInfo->startTick; ::closesocket(fileObj->conInfo->sd); delete [] fileObj->recvBuf; delete fileObj->conInfo; fileObj->conInfo = NULL; if (fileObj->status == FS_COMPLETE) { for (int cnt=0; cnt < shareInfo->fileCnt; cnt++) { if (shareInfo->fileInfo[cnt]->IsSelected() && shareInfo->fileInfo[cnt] != fileInfo) { FreeDecodeShareMsgFile(shareInfo, target); return SaveFile(); } } } int ret = manual_suspend ? IDCANCEL : RecvTransEndDlg(fileObj, this).Exec(); if (ret == EXEC_BUTTON || ret == FOLDER_BUTTON && fileObj->isDir && isSingleTrans) { char buf[MAX_BUF]; MakePath(buf, fileObj->saveDir, fileInfo->Fname()); ShellExecuteU8(NULL, NULL, buf, 0, 0, SW_SHOW); } else if (ret == FOLDER_BUTTON) ShellExecuteU8(NULL, NULL, fileObj->saveDir, 0, 0, SW_SHOW); if (ret == IDOK || ret == FOLDER_BUTTON || ret == EXEC_BUTTON) FreeDecodeShareMsgFile(shareInfo, target); SetFileButton(this, FILE_BUTTON, shareInfo); EvSize(SIZE_RESTORED, 0, 0); if (ret == IDRETRY) PostMessage(WM_COMMAND, FILE_BUTTON, 0); return TRUE; }
BOOL TAboutDlg::EvCommand(WORD wNotifyCode, WORD wID, LPARAM hWndCtl) { switch (wID) { case IDOK: case IDCANCEL: EndDialog(TRUE); return TRUE; case IPMSG_ICON: case IPMSGWEB_BUTTON: if (wID == IPMSGWEB_BUTTON || wNotifyCode == 1) ShellExecuteU8(NULL, NULL, GetLoadStrU8(IDS_IPMSGURL), NULL, NULL, SW_SHOW); return TRUE; } return FALSE; }
BOOL TLaunchDlg::EvCommand(WORD wNotifyCode, WORD wID, LPARAM hwndCtl) { switch (wID) { case IDOK: case IDCANCEL: EndDialog(wID); return TRUE; case LAUNCH_BUTTON: //ShellExecuteU8(NULL, NULL, GetLoadStr(IDS_TRAYURL), 0, 0, SW_SHOW); ShellExecuteU8(NULL, "open", "rundll32.exe", NOTIFY_SETTINGS, 0, SW_SHOW); EndDialog(wID); return TRUE; } return FALSE; }
BOOL TUninstDlg::UnInstall(void) { // 現在、起動中の ipmsg を終了 int st = TerminateIPMsg(); if (st == 1) return FALSE; if (st == 2) { if (!IsWinVista() || TIsUserAnAdmin() || !TIsEnableUAC()) { MessageBox(GetLoadStr(IDS_CANTTERMINATE), UNINSTALL_STR); return FALSE; } if (MessageBox(GetLoadStr(IDS_REQUIREADMIN_TERM), "", MB_OKCANCEL|MB_ICONINFORMATION) != IDOK) return FALSE; return RunAsAdmin(hWnd); } if (!runasWnd && MessageBox(GetLoadStr(IDS_START), UNINSTALL_STR, MB_OKCANCEL|MB_ICONINFORMATION) != IDOK) return FALSE; // 公開鍵削除 if (IsDlgButtonChecked(DELPUBKEY_CHECK)) { BOOL need_admin = FALSE; char contName[MAX_PATH_U8], userName[MAX_PATH_U8]; DWORD size = sizeof(userName); ::GetUserName(userName, &size); ::wsprintf(contName, "ipmsg.rsa2048.%s", userName); if (!DeleteKeySet(MS_ENHANCED_PROV, contName, CRYPT_MACHINE_KEYSET) || !DeleteKeySet(MS_ENHANCED_PROV, contName, 0)) need_admin = TRUE; ::wsprintf(contName, "ipmsg.rsa1024.%s", userName); if (!DeleteKeySet(MS_ENHANCED_PROV, contName, CRYPT_MACHINE_KEYSET) || !DeleteKeySet(MS_ENHANCED_PROV, contName, 0)) need_admin = TRUE; ::wsprintf(contName, "ipmsg.rsa512.%s", userName); if (!DeleteKeySet(MS_DEF_PROV, contName, CRYPT_MACHINE_KEYSET) || !DeleteKeySet(MS_DEF_PROV, contName, 0)) need_admin = TRUE; if (need_admin) { if (IsWinVista() && !TIsUserAnAdmin() && TIsEnableUAC()) { if (MessageBox(GetLoadStr(IDS_REQUIREADMIN_PUBKEY), "", MB_OKCANCEL|MB_ICONINFORMATION) != IDOK) return FALSE; return RunAsAdmin(hWnd); } } } // スタートアップ&デスクトップから削除 TRegistry reg(HKEY_CURRENT_USER); if (reg.OpenKey(REGSTR_SHELLFOLDERS)) { char buf[MAX_PATH_U8]; char *regStr[] = { REGSTR_STARTUP, REGSTR_PROGRAMS, REGSTR_DESKTOP, NULL }; for (int i=0; regStr[i]; i++) { if (reg.GetStr(regStr[i], buf, sizeof(buf))) { if (i == 0) RemoveSameLink(buf); ::wsprintf(buf + strlen(buf), "\\%s", IPMSG_SHORTCUT_NAME); DeleteLink(buf); } } reg.CloseKey(); } // レジストリからユーザー設定情報を削除 if (reg.ChangeApp(HSTOOLS_STR)) reg.DeleteChildTree(GetLoadStr(IDS_REGIPMSG)); // レジストリからアプリケーション情報を削除 char setupDir[MAX_PATH_U8]; // セットアップディレクトリ情報を保存 GetDlgItemTextU8(RESETUP_EDIT, setupDir, sizeof(setupDir)); reg.ChangeTopKey(HKEY_LOCAL_MACHINE); if (reg.OpenKey(REGSTR_PATH_APPPATHS)) { if (reg.OpenKey(IPMSG_EXENAME)) { reg.GetStr(REGSTR_PATH, setupDir, sizeof(setupDir)); reg.CloseKey(); } reg.DeleteKey(IPMSG_EXENAME); reg.CloseKey(); } // レジストリからアンインストール情報を削除 if (reg.OpenKey(REGSTR_PATH_UNINSTALL)) { reg.DeleteKey(IPMSG_NAME); reg.CloseKey(); } // 終了メッセージ MessageBox(GetLoadStr(IDS_UNINSTCOMPLETE)); // インストールディレクトリを開く if (GetDriveTypeEx(setupDir) != DRIVE_REMOTE) ShellExecuteU8(NULL, NULL, setupDir, 0, 0, SW_SHOW); ::PostQuitMessage(0); return TRUE; }