獲取有關顯示器、鼠標及系統的配置信息
發表于:2007-07-14來源:作者:點擊數:
標簽:
問題 有時, 程序員 希望能夠確定用戶目前正在使用的是什么配置,此信息應該包括驅動器的數目和類型,以及 用戶是否使用鼠標。當然,最好能夠確定用戶使用的顯示器的類型以及顯示器的分辨率。 方法 確定所有的信息需要好幾步。首先可以利用 Windows API 函數
問題
有時,
程序員希望能夠確定用戶目前正在使用的是什么配置,此信息應該包括驅動器的數目和類型,以及 用戶是否使用鼠標。當然,最好能夠確定用戶使用的顯示器的類型以及顯示器的分辨率。
方法
確定所有的信息需要好幾步。首先可以利用 Windows API 函數 GetDriveType 來確定機器安裝了哪些 驅動器以及它們是什么類型(硬盤,CD-ROM,軟盤,或
網絡驅動器)。
使用 Windows API 函數 GetSystemMetrics 可以獲取信息的第二部分(是否有鼠標及顯示器的大?。?。 此函數會返回給程序員大量的信息,在本節中我們只使用其中的一部分。
步驟
按照下列步驟實現一個例子程序。運行此例子程序,從菜單 SysInfo 中選擇菜單項 Drivers,將彈出一 個對話框。對話框包含所有可能的驅動器盤符(A-Z)以及對應的驅動器類型。類型是下列中的一個:
不確定的:此驅動器可能在系統中不存在。
可移動驅動器:通常為軟盤驅動器。
固定驅動器:通常為硬盤。
網絡驅動器:通常為網絡驅動器,但某些類型的 CD-ROM 驅動器也歸為此類。
CD-ROM:通常為 CD-ROM 驅動器。
虛擬驅動器:通常指用內存虛擬的驅動器。
1.在 Visual C++ 中,利用 AppWizard 創建新的項目文件,并命名此項目文件為 LD12.MAK.利用 AppStudio,在菜單 IDR_WAINFRAME 中添加新的菜單 SysInfo.在 SysInfo 中添加新的菜單項 &Drivers,其 ID 為 ID_DRIVER_INFO.
2.在 AppStudio 中,創建新的對話框 IDD_DIALOG1.添加 26 個靜態文本域,標題為驅動器盤符(A:, B:,C:等等).與其對齊,添加另外 26 個靜態文本域。與驅動器盤符同順序,ID 分別賦為 1001,1002 等 等。
3.在 AppStudio 中,選擇 ClassWizard,然后選擇 New Class 來創建新的對話框類。新類命名為 CDriveDlg,并接受其他所有缺省值。為消息 WM_INI
TDIALOG 添加一個函數(命名為 OnInitDialog)。
4.在 OnInitDialog 中,添加下列代碼:
BOOL CDriveDlg::OnInitDialog()
{
CDialog::OnInitDialog();
char buf[10];
for(int i=0;i<26;i++)
{
sprintf(buf,"%c:\\",'A'+i);
WORD type=GetDriveType(buf);
switch(type)
{
case DRIVE_UNKNOWN:
GetDlgItem(1001+i)->SetWindowText("不能識別的驅動器");
break;
case DRIVE_NO_ROOT_DIR:
GetDlgItem(1001+i)->SetWindowText("不確定的驅動器");
break;
case DRIVE_REMOVABLE:
GetDlgItem(1001+i)->SetWindowText("可移動的驅動器");
break;
case DRIVE_FIXED:
GetDlgItem(1001+i)->SetWindowText("固定的驅動器");
break;
case DRIVE_REMOTE:
GetDlgItem(1001+i)->SetWindowText("網絡驅動器");
break;
case DRIVE_CDROM:
GetDlgItem(1001+i)->SetWindowText("CD-ROM驅動器");
break;
case DRIVE_RAMDISK:
GetDlgItem(1001+i)->SetWindowText("虛擬驅動器");
break;
default:
GetDlgItem(1001+i)->SetWindowText("");
break;
}
}
return TRUE; // return TRUE unless you set the focus to a control
}
5.啟動 ClassWizard.從下拉列表中選擇對象 CMainFrame,從對象列表中選擇 ID_DRIVE_INFO,選擇 消息 COMMAND.點擊按鈕 Add Function,新函數命名為 OnDriveInfo,在 CMainFrame 的函數 OnDriveInfo 中添加下列代碼:
void CMainFrame::OnDriveInfo()
{
CDriveDlg dlg;
dlg.DoModal();
}
6.在文件 MAINFRAME.CPP 頂部的 include 文件列表中添加下面一行:
#include "DriveDlg.h"
7.編譯并運行此例子程序。
用法
函數 GetDriveType 通常用來確定安裝的驅動器類型。盡管此函數可能被某些 CD-ROM 驅動器、網 絡驅動器以及軟件模擬驅動器所“欺騙”,但仍是一個確定當前系統中哪一個驅動器符可用的理想方法。這 些驅動器符接著就可以用在應用程序中。
函數 GetSystemmetrics 通常用來獲取多種有關系統及其
性能的信息。在本節中只使用此 API 函 數獲取某些有用的信息。程序員可以使用此函數來將窗口置與于屏幕的中央,同時也可以使對話框和顯示 的信息居中。
步驟
按照下列步驟實現一個例子程序。運行此例子程序,從菜單 SysInfo 中選擇菜單項 Screen_Mouse, 將彈出一個對話框,顯示用戶是否安裝了鼠標以及當前屏幕的分辨率。
1.在 Visual C++ 中,利用AppStudio,在菜單 SysInfo 中添加新的菜單項&Screen_Mouse,其對 話框 ID 為 ID_SCREEN_MOUSE.
2.在 AppStudio 中,創建新的對話框 IDD_DIALOG2.添加 3 個靜態文本域,標題分別為 Mouse Present:、Screen Width 以及 Screen Height.與其對齊,添加另外 3 個靜態文本域。與之同順序, ID 分別賦為 ID_MOUSE,ID_SCREN_WIDTH,ID_SCREEN_HEIGHT。
3.在 AppStudio 中,選擇 ClassWizard,然后選擇 New Class 來創建新的對話框類。新類命名為 CScreenMouseDlg,并接受其他所有缺省值。為消息 WM_INITDIALOG 添加一個函數(命名為 OnInitDialog)。
4.在 OnInitDialog 中,添加下列代碼:
BOOL CScreenMouseDlg::OnInitDialog()
{
CDialog::OnInitDialog();
char buf[10];
if(GetSystemMetrics(SM_MOUSEPRESENT)!=0)
GetDlgItem(ID_MOUSE)->SetWindowText("是");
else
GetDlgItem(ID_MOUSE)->SetWindowText("否");
_ltoa(GetSystemMetrics(SM_CXSCREEN),buf,10);
GetDlgItem(ID_SCREEN_WIDTH)->SetWindowText(buf);
_ltoa(GetSystemMetrics(SM_CYSCREEN),buf,10);
GetDlgItem(ID_SCREEN_HEIGHT)->SetWindowText(buf);
return TRUE; // return TRUE unless you set the focus to a control
}
5.啟動 ClassWizard.從下拉列表中選擇對象 CMainFrame,從對象列表中選擇 ID_SCREEN_MOUSE, 選擇消息 COMMAND.點擊按鈕 Add Function,新函數命名為 OnScreenMouse,在函數 OnScreenMouse 中添加下列代碼:
void CMainFrame::OnScreenMouse()
{
CScreenMouseDlg dlg;
dlg.DoModal();
}
6.在文件 MAINFRAME.CPP 頂部的 include 文件列表中添加下面一行:
#include "ScreenMouseDlg.h"
7.編譯并運行此例子程序。
原文轉自:http://www.anti-gravitydesign.com