原版使用 FTP 下載版本檔,但許多虛擬主機禁止匿名 FTP。改用 HTTP 更通用,適合純文字版本檔傳輸。
if (CWebVersion::Online()) {
CWebVersion webver(_T("www.mysite.com"));
if (webver.ReadVersion(_T("myversion.txt"))) {
// 比對 webver.dwMajorVersion / dwMinorVersion
}
}
CInternetSession session(_T("MySession"));
CHttpConnection* pConn = session.GetHttpConnection(_T("www.dilascia.com"), INTERNET_DEFAULT_HTTP_PORT);
CHttpFile* pFile = pConn->OpenRequest(CHttpConnection::HTTP_VERB_GET, _T("TraceWinVer.txt"));
pFile->SendRequest();
DWORD dwStatus; pFile->QueryInfoStatusCode(dwStatus); // 200=成功, 404=不存在
// Read 讀取內容,sscanf 解析 "Mhi,Mlo,mhi,mlo" 格式
HttpWebRequest* req = dynamic_cast(WebRequest::Create(S"https://www.site.com/ver.txt"));
req->Timeout = 5000;
HttpWebResponse* resp = dynamic_cast(req->GetResponse());
StreamReader* strm = new StreamReader(resp->GetResponseStream(), Encoding::UTF8);
String* content = strm->ReadToEnd(); strm->Close();
PlaySound(_T("woofwoof.wav"), NULL, SND_NODEFAULT); // 檔案播放
PlaySound(_T("AppExit"), NULL, SND_APPLICATION|SND_NODEFAULT); // 系統關聯音效
PlaySound(_T("AppExit"), AfxGetResourceHandle(), SND_RESOURCE); // 資源內嵌 WAVE
資源定義:AppExit WAVE "res\\STExit.wav" (必須為 WAVE 類型)
功能:邏輯音效 ID 管理、註冊表音效關聯、啟用/靜音切換、資源內嵌預設音效。
enum { MYSND_HAPPY, MYSND_UNHAPPY, ... };
BEGIN_SOUND_MAP(MySounds)
DEFINE_SOUND(MYSND_HAPPY, _T("ST_Happy"), _T("SoundTest Happy"))
...
END_SOUND_MAP()
PlaySound(ID)HKCU\AppEvents\Schemes\Apps\AppName\ST_Happy\.currentCSoundMgr SoundMgr(MySounds); // 全域單一實例
if (!SoundMgr.IsRegistered()) SoundMgr.Register();
SoundMgr.PlaySound(MYSND_HAPPY);
m_bEnableSounds:總開關,綁定選單項目m_bUseResourceSounds:是否使用內嵌資源預設音效HKCU\AppEvents\Schemes\Apps\YourApp\LogicalName\.current — 使用者自訂音效檔HKCU\AppEvents\EventNames\LogicalName — GUI 顯示名稱ST_) 避免衝突本文提供 HTTP 版本檢查與 MFC 音效管理兩大實用模組完整原始碼,可直接整合專案。記住:軟體音效設計宜克制,務必提供靜音選項。