用VC++编程控制计算机和光驱

日期:2016-08-07 16:39:48编辑作者:申博亚洲
通常有些程序在初次使用使用时,要进行一些象安装特定字体的设置,之后需要重新启动计算机使之生效;而在一些多媒体软件编程中会用到用程序操纵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下通过。

相关文章

http://www.jinyuankj.com/vc/20160807/36.html

VC++实现对远程计算机屏幕的监视

 在实际工程中,经常有施工现场和控制中心不在一起的情况,在这种情况一般多由工程技术人员往返穿梭其间来实现对远程施工现场的情况了解和 ..

发布日期:2016-08-07 详细>>

工业控制研华板卡的VC编程实现

在论坛中经常有人提出关于研华工业用控制板卡的vc编程方法。此类板卡编程方法比较复杂,根据说明书上面说明我们可以采用两种编程方法,一种 ..

发布日期:2016-08-07 详细>>

使用VC6进行ADO编程,使用SQL SERVER 2000+WINDOWS SERVER 2003+VC6(第四部分)

目的是将SUN等服务器产生的日志文件--文本格式,写入到SQL Server数据库,实现功能为:1 修改源日志格式为以逗号分割字段,写入成一个新的 ..

发布日期:2016-08-07 详细>>

http://www.jinyuankj.com/vc/20160807/41.html

VC实现串行通讯的三种途径

介绍了串行通讯的基本原理,以及在Win98,Win2000环境下实现串行通讯的三种方法,并给出了用Visual C++6 0编写的相应的应用程序。关键词: ..

发布日期:2016-08-07 详细>>

VC++动态链接库编程之DLL典型实例

动态链接库DLL实现了库的共享,体现了代码重用的思想。我们可以把广泛的、具有共性的、能够多次被利用的函数和类定义在库中。这样,在再次 ..

发布日期:2016-08-07 详细>>