首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> C語言 >> VC >> VC 教學

VC++ 常用系統操作 20 例:光碟機控制、關機重啟、字體枚舉、單一實例等

     編輯:VC 教學

多媒體與電源控制

1. 開啟光碟機托架

mciSendString(_T("set cdaudio door open wait"), NULL, 0, NULL);

2. 關閉光碟機托架

mciSendString(_T("set cdaudio door closed wait"), NULL, 0, NULL);

3. 關機 / 重啟 / 登出 (Windows 9x)


OSVERSIONINFO osvi = { sizeof(OSVERSIONINFO) };
GetVersionEx(&osvi);
if (osvi.dwPlatformId == VER_PLATFORM_WIN32_WINDOWS) {
    DWORD dwReserved;
    ExitWindowsEx(EWX_POWEROFF | EWX_FORCE, dwReserved); // 關機
    // EWX_REBOOT 重啟, EWX_LOGOFF 登出
}

4. 顯示系統關機對話框 (NT 系列)


typedef int (CALLBACK* SHUTDOWNDLG)(int);
HINSTANCE hInst = LoadLibrary(_T("shell32.dll"));
if (hInst) {
    SHUTDOWNDLG fn = (SHUTDOWNDLG)GetProcAddress(hInst, (LPCSTR)60);
    if (fn) fn(0);
    FreeLibrary(hInst);
}

系統資訊與介面操作

5. 列舉系統所有字體


LOGFONT lf = {0}; lf.lfCharSet = DEFAULT_CHARSET;
CClientDC dc(this);
::EnumFontFamiliesEx(dc.m_hDC, &lf, (FONTENUMPROC)EnumFontFamProc, (LPARAM)this, 0);

int CALLBACK EnumFontFamProc(LPENUMLOGFONT lpelf, LPNEWTEXTMETRIC, DWORD, LPARAM lParam) {
    CMyDlg* pDlg = (CMyDlg*)lParam;
    pDlg->m_List.AddString(lpelf->elfLogFont.lfFaceName);
    return 1;
}

6. 單一實例應用程式


if (FindWindow(NULL, _T("我的程式標題"))) exit(0); // 簡易版
// 正式專案建議使用具名 Mutex

7. 取得滑鼠游標螢幕座標


CPoint pt; GetCursorPos(&pt);

8. 右鍵選單 (Context Menu) 觸發

回應 WM_CONTEXTMENU 訊息,在 OnContextMenu 中 TrackPopupMenu。

9. 顯示/隱藏選單列


// 隱藏
::ShowMenu(hWnd, FALSE);
// 顯示
::ShowMenu(hWnd, TRUE);

視窗與控制項技巧

10. 視窗置頂/取消置頂


SetWindowPos(hWnd, HWND_TOPMOST, 0,0,0,0, SWP_NOMOVE|SWP_NOSIZE); // 置頂
SetWindowPos(hWnd, HWND_NOTOPMOST, 0,0,0,0, SWP_NOMOVE|SWP_NOSIZE); // 取消

11. 最大化/最小化/還原視窗


ShowWindow(hWnd, SW_MAXIMIZE); // SW_MINIMIZE, SW_RESTORE

12. 取得視窗客戶區矩形


RECT rc; GetClientRect(hWnd, &rc);

13. 畫面截圖 (BitBlt)


HDC hdcSrc = GetDC(hWnd);
HDC hdcMem = CreateCompatibleDC(hdcSrc);
HBITMAP hBmp = CreateCompatibleBitmap(hdcSrc, rc.right, rc.bottom);
SelectObject(hdcMem, hBmp);
BitBlt(hdcMem, 0,0, rc.right, rc.bottom, hdcSrc, 0,0, SRCCOPY);
// hBmp 即為截圖位圖

14. 設定視窗透明度 (Layered Window)


SetWindowLong(hWnd, GWL_EXSTYLE, GetWindowLong(hWnd, GWL_EXSTYLE) | WS_EX_LAYERED);
SetLayeredWindowAttributes(hWnd, 0, 180, LWA_ALPHA); // 0-255

15. 拖放檔案支援 (WM_DROPFILES)


DragAcceptFiles(hWnd, TRUE);
// 在 WM_DROPFILES 中用 DragQueryFile 取得檔案路徑

進階實用片段

16. 取得執行檔圖示 (SHGetFileInfo)

17. 系統版本判斷 (GetVersionEx / VerifyVersionInfo)

18. 註冊表讀寫 (RegOpenKeyEx, RegQueryValueEx, RegSetValueEx)

19. 程式自啟動註冊 (Run 鍵值)

20. 多執行緒同步 (Critical Section, Event, Mutex, Semaphore)

以上 20 項涵蓋 VC++ 桌面開發最常見的系統級操作,建議收藏備查。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved