职业IT人-IT人生活圈

 找回密码
 成为会员
搜索
查看: 397|回复: 0

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

[复制链接]
紫衿 发表于 2011-9-27 09:05 | 显示全部楼层 |阅读模式
摘要:关于用VC++编程控制计算机和光驱的深入研究。
aa59892ba9ee7aade7cd40e5.jpg
对话框的外观如图1所示,其中四个按钮(Button)属性设置见下表,
ID Caption
IDC_SHUTDOWNCOMPUTER 关闭计算机……
IDC_RESTARTCOMPUTER 重新启动计算机
IDC_OPENCDROM 打开CD-ROM
IDC_CLOSECDROM 关闭CD-ROM
重新启动计算机
先获取操作系统版本,然后调用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的第一个参数可以实现注销用户、关机、关闭电源等操作。
关闭计算机
此功能是通过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);//显示关机对话框函数的指针
打开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下通过。
您需要登录后才可以回帖 登录 | 成为会员

本版积分规则

QQ|手机版|小黑屋|网站帮助|职业IT人-IT人生活圈 ( 粤ICP备12053935号-1 )|网站地图
本站文章版权归原发布者及原出处所有。内容为作者个人观点,并不代表本站赞同其观点和对其真实性负责,本站只提供参考并不构成任何投资及应用建议。本站是信息平台,网站上部分文章为转载,并不用于任何商业目的,我们已经尽可能的对作者和来源进行了通告,但是能力有限或疏忽造成漏登,请及时联系我们,我们将根据著作权人的要求立即更正或者删除有关内容。

GMT+8, 2024-4-25 19:46 , Processed in 0.134777 second(s), 27 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表