SWM
通常有些程式在初次使用使用時,要進行一些象安裝特定字型的設定,之後需要重新啟動電腦使之生效;而在一些多媒體軟體編程中會用到用程式操縱CD_ROM的開與關的情況。為了說明在VC中實現這兩項功能的方法,我們建立一個基於對話方塊、名為Control的工程。對話方塊的外觀1所示,其中四個按鈕(Button)屬性設定見下表,
ID Caption
IDC_SHUTDOWNCOMPUTER 關閉電腦...
IDC_RESTARTCOMPUTER 重新啟動電腦
IDC_OPENCDROM 開啟CD-ROM
IDC_CLOSECDROM 關閉CD-ROM
圖1 IDD_CONTROL_DIALOG對話方塊
(1) 重新啟動電腦
先擷取作業系統版本,然後調用ExitWindowsEx函數重新啟動電腦。為IDC_RESTARTCOMPUTER按鈕添加BN_CLICKED訊息處理函數如下:
void CControlDlg::OnRestartcomputer()
{
OSVERSIONINFO OsVersionInfo;//包含作業系統版本資訊的資料結構
OsVersionInfo.dwOSVersionInfoSize= sizeof(OSVERSIONINFO);
GetVersionEx(&OsVersionInfo);//擷取作業系統版本資訊
if( OsVersionInfo.dwPlatformId == VER_PLATFORM_WIN32_WINDOWS
{//Windows98,調用ExitWindowsEx()函數重新啟動電腦
DWORD dwReserved ;
ExitWindowsEx(EWX_LOGOFF,dwReserved);
}
}
實際上,通過改變函數ExitWindowsEx的第一個參數可以實現登出使用者、關機、關閉電源等操作。
(2)關閉電腦
此功能是通過shell32.dll中一個索引號為60的API函數調用,顯示"關閉Windows"交談視窗實現的。
具體方法為IDC_SHUTDOWNCOMPUTER按鈕添加BN_CLICKED訊息處理函數:
void CControlDlg::OnShutdowncomputer()
{
HINSTANCE hInst=LoadLibrary("shell32.dll";//裝入shell32.dll
SHUTDOWNDLG ShutDownDialog;//指向shell32庫中顯示關機對話方塊函數的指標
if(hInst!=NULL)
{ //獲得函數的地址並調用之
ShutDownDialog=(SHUTDOWNDLG)GetProcAddress(hInst,(LPSTR)60);//
(*ShutDownDialog)(0);
}
}
函數中的SHUTDOWNDLG定義如下:
typedef int (CALLBACK *SHUTDOWNDLG)(int);//顯示關機對話方塊函數的指標
(3)開啟CD_ROM與關閉CD_ROM
方法是先向工程中加入多媒體組件。選擇Project|Add to Project|Components And Controls功能表項目,在彈出的Components And Controls Gallery對話方塊中選擇Visual C++ Components檔案夾,然後選擇Windows Multimedia library項,按Insert按鈕。在之後的訊息框中按"是"。這樣,在工程中加入了了多媒體組件,在stdafx.h檔案中加入了兩行語句:
#include
// CG: The following line was added by the Windows Multimedia component.
#pragma comment(lib, "winmm.lib"
然後分別為IDC_OPENCDROM和IDC_CLOSECDROM按鈕添加BN_CLICKED訊息處理函數如下:
void CControlDlg::OnOpencdrom() //開啟光碟機
{
mciSendString("Set cdAudio door open wait", NULL, 0, NULL);
}
void CControlDlg::OnClosecdrom() //關閉光碟機
{
mciSendString("Set cdAudio door closed wait", NULL, 0, NULL);
}
本程式在中文Windows 98、Visual C++6.0下通過。