以文本方式查看主题

-  中文XML论坛 - 专业的XML技术讨论区  (http://bbs.xml.org.cn/index.asp)
--  『 C/C++编程思想 』  (http://bbs.xml.org.cn/list.asp?boardid=61)
----  如何用VC++编程来控制计算机和光驱 ?  (http://bbs.xml.org.cn/dispbbs.asp?boardid=61&rootid=&id=87912)


--  作者:葛靖青001
--  发布时间:11/24/2010 3:16:00 PM

--  如何用VC++编程来控制计算机和光驱 ?
【转自互联网】

对话框的外观如图1所示,其中四个按钮(Button)属性设置见下表,

    ID Caption

    IDC_SHUTDOWNCOMPUTER 关闭计算机……

    IDC_RESTARTCOMPUTER 重新启动计算机

    IDC_OPENCDROM 打开CD-ROM

    IDC_CLOSECDROM 关闭CD-ROM

    (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下通过。


W 3 C h i n a ( since 2003 ) 旗 下 站 点
苏ICP备05006046号《全国人大常委会关于维护互联网安全的决定》《计算机信息网络国际联网安全保护管理办法》
6,062.500ms