`
isiqi
  • 浏览: 16649505 次
  • 性别: Icon_minigender_1
  • 来自: 济南
社区版块
存档分类
最新评论

第一个Win32程序(自动检测光驱)

阅读更多

vc 6.0建立以一个Win32 hello world 程序,代码如下

//TestWin32.cpp:Definestheentrypointfortheapplication.
//

#include
"stdafx.h"
#include
"resource.h"
#include
"dbt.h"
#include
"windows.h"
#defineMAX_LOADSTRING100

//GlobalVariables:
HINSTANCEhInst;//currentinstance
TCHARszTitle[MAX_LOADSTRING];//Thetitlebartext
TCHARszWindowClass[MAX_LOADSTRING];//Thetitlebartext

//Fowarddeclarationsoffunctionsincludedinthiscodemodule:
ATOMMyRegisterClass(HINSTANCEhInstance);
BOOLInitInstance(HINSTANCE,
int);
LRESULTCALLBACKWndProc(HWND,UINT,WPARAM,LPARAM);
LRESULTCALLBACKAbout(HWND,UINT,WPARAM,LPARAM);
//检测光驱
charchFirstDriveFromMask(ULONGunitmask);
charchFirstDriveFromMask(ULONGunitmask)
...{
chari;
for(i=0;i<26;++i)//假设不会超过26个逻辑驱动器
...{
if(unitmask&0x1)//看该驱动器的状态是否发生了变化
break;
unitmask
=unitmask>>1;
}

return(i+'A');
}

//
intAPIENTRYWinMain(HINSTANCEhInstance,
HINSTANCEhPrevInstance,
LPSTRlpCmdLine,
intnCmdShow)
...{
//TODO:Placecodehere.
MSGmsg;
HACCELhAccelTable;

//Initializeglobalstrings
LoadString(hInstance,IDS_APP_TITLE,szTitle,MAX_LOADSTRING);
LoadString(hInstance,IDC_TESTWIN32,szWindowClass,MAX_LOADSTRING);
MyRegisterClass(hInstance);

//Performapplicationinitialization:
if(!InitInstance(hInstance,nCmdShow))
...{
returnFALSE;
}


hAccelTable
=LoadAccelerators(hInstance,(LPCTSTR)IDC_TESTWIN32);

//Mainmessageloop:
while(GetMessage(&msg,NULL,0,0))
...{
if(!TranslateAccelerator(msg.hwnd,hAccelTable,&msg))
...{
TranslateMessage(
&msg);
DispatchMessage(
&msg);
}

}


returnmsg.wParam;
}




//
//FUNCTION:MyRegisterClass()
//
//PURPOSE:Registersthewindowclass.
//
//COMMENTS:
//
//Thisfunctionanditsusageisonlynecessaryifyouwantthiscode
//tobecompatiblewithWin32systemspriortothe'RegisterClassEx'
//functionthatwasaddedtoWindows95.Itisimportanttocallthisfunction
//sothattheapplicationwillget'wellformed'smalliconsassociated
//withit.
//
ATOMMyRegisterClass(HINSTANCEhInstance)
...{
WNDCLASSEXwcex;

wcex.cbSize
=sizeof(WNDCLASSEX);

wcex.style
=CS_HREDRAW|CS_VREDRAW;
wcex.lpfnWndProc
=(WNDPROC)WndProc;
wcex.cbClsExtra
=0;
wcex.cbWndExtra
=0;
wcex.hInstance
=hInstance;
wcex.hIcon
=LoadIcon(hInstance,(LPCTSTR)IDI_TESTWIN32);
wcex.hCursor
=LoadCursor(NULL,IDC_ARROW);
wcex.hbrBackground
=(HBRUSH)(COLOR_WINDOW+1);
wcex.lpszMenuName
=(LPCSTR)IDC_TESTWIN32;
wcex.lpszClassName
=szWindowClass;
wcex.hIconSm
=LoadIcon(wcex.hInstance,(LPCTSTR)IDI_SMALL);

returnRegisterClassEx(&wcex);
}


//
//FUNCTION:InitInstance(HANDLE,int)
//
//PURPOSE:Savesinstancehandleandcreatesmainwindow
//
//COMMENTS:
//
//Inthisfunction,wesavetheinstancehandleinaglobalvariableand
//createanddisplaythemainprogramwindow.
//
BOOLInitInstance(HINSTANCEhInstance,intnCmdShow)
...{
HWNDhWnd;

hInst
=hInstance;//Storeinstancehandleinourglobalvariable

hWnd
=CreateWindow(szWindowClass,szTitle,WS_OVERLAPPEDWINDOW,
CW_USEDEFAULT,
0,CW_USEDEFAULT,0,NULL,NULL,hInstance,NULL);

if(!hWnd)
...{
returnFALSE;
}


ShowWindow(hWnd,nCmdShow);
UpdateWindow(hWnd);

returnTRUE;
}


//
//FUNCTION:WndProc(HWND,unsigned,WORD,LONG)
//
//PURPOSE:Processesmessagesforthemainwindow.
//
//WM_COMMAND-processtheapplicationmenu
//WM_PAINT-Paintthemainwindow
//WM_DESTROY-postaquitmessageandreturn
//
//
LRESULTCALLBACKWndProc(HWNDhWnd,UINTmessage,WPARAMwParam,LPARAMlParam)
...{
//
BOOLfRet=TRUE;//返回值
//通过响应WM_DEVICECHANGE消息得到的设备事件信息结构
PDEV_BROADCAST_HDRlpdb=(PDEV_BROADCAST_HDR)lParam;

//
intwmId,wmEvent;
PAINTSTRUCTps;
HDChdc;
TCHARszHello[MAX_LOADSTRING];
LoadString(hInst,IDS_HELLO,szHello,MAX_LOADSTRING);

switch(message)
...{

/**//*caseWM_INITDIALOG:
fRet=TRUE;
break;
*/

//对WM_DEVICECHANGE消息进行处理

caseWM_DEVICECHANGE:
charszMsg[80];//对话框中要表示的字符串
switch(wParam)
...{
//当一个设备变得被插入并变得可用时,
//系统会发送广播事件DBT_DEVICEARRIVAL
caseDBT_DEVICEARRIVAL:
//判断CDROM碟片是否已经插入到光驱中
if(lpdb->dbch_devicetype==DBT_DEVTYP_VOLUME)...{
PDEV_BROADCAST_VOLUMElpdbv
=(PDEV_BROADCAST_VOLUME)lpdb;
//判断是否有CDROM碟片
if(lpdbv->dbcv_flags&DBTF_MEDIA)
...{
//显示消息,获取光驱的逻辑驱动器号
wsprintf(szMsg,"驱动器%c:已经可用 ",chFirstDriveFromMask(lpdbv->dbcv_unitmask));
MessageBox(hWnd,szMsg,
"光驱自动监测",MB_OK|MB_ICONINFORMATION);
}

}

break;
//当一个设备变得被移走并变得不可用时,
//系统会发送广播事件DBT_DEVICEREMOVECOMPLETE
caseDBT_DEVICEREMOVECOMPLETE:
//判断CDROM碟片是否从光驱中移走
if(lpdb->dbch_devicetype==DBT_DEVTYP_VOLUME)...{
PDEV_BROADCAST_VOLUMElpdbv
=(PDEV_BROADCAST_VOLUME)lpdb;
if(lpdbv->dbcv_flags&DBTF_MEDIA)
...{
//显示消息,获取光驱的逻辑驱动器号
wsprintf(szMsg,"驱动器%c:已经弹出 ",chFirstDriveFromMask(lpdbv->dbcv_unitmask));
MessageBox(hWnd,szMsg,
"光驱自动监测",MB_OK|MB_ICONINFORMATION);
}

}

break;
}

//

caseWM_COMMAND:
wmId
=LOWORD(wParam);
wmEvent
=HIWORD(wParam);
//Parsethemenuselections:
switch(wmId)
...{
caseIDM_ABOUT:
DialogBox(hInst,(LPCTSTR)IDD_ABOUTBOX,hWnd,(DLGPROC)About);
break;
caseIDM_EXIT:
DestroyWindow(hWnd);
break;
default:
returnDefWindowProc(hWnd,message,wParam,lParam);
}

break;
caseWM_PAINT:
hdc
=BeginPaint(hWnd,&ps);
//TODO:Addanydrawingcodehere...
RECTrt;
GetClientRect(hWnd,
&rt);
DrawText(hdc,szHello,strlen(szHello),
&rt,DT_CENTER);
EndPaint(hWnd,
&ps);
break;
caseWM_DESTROY:
PostQuitMessage(
0);
break;
default:
fRet
=FALSE;
returnDefWindowProc(hWnd,message,wParam,lParam);
}

//禁止光驱的AutoPlay功能以下代码在windowsserver2003上不启作用,要用注册表的方法

/**//*
staticUINTuMsgQueryCancelAutoPlay=RegisterWindowMessage("QueryCancelAutoPlay");
if(message==uMsgQueryCancelAutoPlay)
{
intn=MessageBox(hWnd,"你想禁止AutoPlay功能吗?",NULL,MB_YESNO|MB_ICONQUESTION);
//1代表取消AutoPlay
//0t代表允许AutoPlay
SetWindowLong(hWnd,message,(n==IDYES)?1:0);
fRet=(n==IDYES)?1:0;
}
*/

return0;
}


//Mesagehandlerforaboutbox.
LRESULTCALLBACKAbout(HWNDhDlg,UINTmessage,WPARAMwParam,LPARAMlParam)
...{
switch(message)
...{
caseWM_INITDIALOG:
returnTRUE;

caseWM_COMMAND:
if(LOWORD(wParam)==IDOK||LOWORD(wParam)==IDCANCEL)
...{
EndDialog(hDlg,LOWORD(wParam));
returnTRUE;
}

break;
}

returnFALSE;
}

分享到:
评论

相关推荐

    新泰WIN98SE超级全自动安装光盘终极版2.0正式版.ra

    在那个年代,操作系统安装通常需要用户手动进行一系列设置和选择,而“全自动安装”意味着该光盘包含了自动执行这些步骤的脚本或程序,如自动分区、格式化硬盘、复制系统文件、配置硬件驱动等。这大大降低了安装系统...

    Win7系统光驱老自动弹出解决方案.docx

    ### Win7系统光驱老自动弹出解决方案 #### 背景介绍 在Windows 7操作系统中,有时候用户会遇到光驱无缘无故自动弹出的情况。这种情况不仅令人感到困惑,还可能对日常工作造成一定的干扰。本文将详细介绍如何解决Win...

    Win8.1系统设备管理器光驱图标有黄色感叹号的解决方法.docx

    4. **重启计算机**:完成以上操作后,重启计算机,系统会自动检测并尝试重新安装驱动程序。 ### 解决方法二:清理注册表中的相关项目 如果上述方法未能解决问题,则可以尝试清理注册表中可能存在问题的键值: 1. **...

    Macbook air安装win7

    - 重启后,系统会自动检测并安装必要的驱动程序。如果自动安装失败,可以通过访问苹果官网下载适用于Macbook Air的Windows 7驱动程序手动安装。 6. **安装Boot Camp支持软件**: - 安装完成后,运行Boot Camp安装...

    win7网卡驱动怎么安装?win7网卡驱动安装方法.docx

    这些工具通常具有自动检测功能,可以帮你快速找到并安装合适的驱动程序。 1. **下载并安装驱动精灵**:访问官方网站或其他可靠来源下载最新版本的驱动精灵软件,并按照提示进行安装。 2. **运行软件**:打开驱动...

    Win7pe优盘写入工具 v1.3.zip

    打开程序后点击上方的浏览选择要写入的iso文件,如果程序没有自动识别出优盘,点击第二个浏览选择优盘,完成后开始写入。 Win7pe优盘写入工具写入方式介绍: 直接写入:使用ultraiso直接解压到优盘,通常写入较慢 ...

    (转) winpe安装win7.doc

    2. **设置CMOS**:在计算机的BIOS设置中,调整启动顺序,将光驱设为第一启动设备。 #### 二、下载Win7 ISO安装文件 1. **下载Win7 ISO文件**:根据需要选择合适的Win7版本,通常ISO文件大小约为3GB左右。 2. **...

    Win7 USB 安装 Linux

    2. **选择USB驱动器**: 在Rufus界面中,它会自动检测到连接的USB设备。确认无误后,点击"选择"按钮。 3. **设置引导类型**: 在"分区方案和目标系统类型"部分,选择"GPT分区表"(如果你的电脑支持UEFI启动)或者"MBR...

    vc++ 应用源码包_1

    另外有只打开一个应用程序、CRichEdit的使用、最小到托盘、自动检测在线用户(多播组)等。 freeeim_FreeEIM_企业即时通讯软件源代码2010年8月份最新版 FTP、HTTP 多线程断点续传下载文件 源码 gdiplus应用实例 ...

    MACbook装WIN7

    - 安装完成后,插入Boot Camp创建的驱动程序USB,Windows会自动检测并安装必要的驱动,包括声卡、显卡、无线网卡等。 - 通过Boot Camp控制面板,你可以调整Windows和macOS之间的启动选项。 7. **系统切换**: - ...

    第一部分 界面设计

    第一部分 界面设计 实例001 如何实现程序闪屏效果 实例002 如何实现程序窗口闪烁 实例003 如何制作吸附窗口程序 实例004 如何制作透明程序窗口 实例005 如何制作半透明程序窗口 实例006 如何制作不规则程序...

    大量批处理实用程序例程

    查找行中第一个数字串.cmd 检测IP格式是否正确.cmd 每6行拼接为一行.cmd 理解字符截取功能.cmd 生成0-99之间的随机数列.cmd 用指定字符替换指定内容.cmd 用某行内容替换特定字符.cmd 统计重复次数并排序.cmd 计算...

    mbr,gpt,smart,ata以及atapi的AutoTestToolC#

    描述中提到的C#工厂厂测笔记本程序第一版,显然是一个用于检测硬盘和分区信息的工具,它可以读取MBR和GPT分区信息,以及SMART监控数据。由于程序可能需要直接与硬件交互,因此需要以管理员权限运行以获得足够的权限...

    金蝶_K3_WISE_V12.3详细安装步骤安装教程安装配置指南

    - **操作系统支持**:支持多个版本的Windows Server操作系统,包括32位和64位版本。 - **数据库引擎**:支持SQL Server 2005 Standard/Enterprise版本。 #### 六、中间层服务部件安装 中间层服务部件负责处理客户端...

    vc++ 应用源码包_2

    另外有只打开一个应用程序、CRichEdit的使用、最小到托盘、自动检测在线用户(多播组)等。 freeeim_FreeEIM_企业即时通讯软件源代码2010年8月份最新版 FTP、HTTP 多线程断点续传下载文件 源码 gdiplus应用实例 ...

    vc++ 应用源码包_6

    另外有只打开一个应用程序、CRichEdit的使用、最小到托盘、自动检测在线用户(多播组)等。 freeeim_FreeEIM_企业即时通讯软件源代码2010年8月份最新版 FTP、HTTP 多线程断点续传下载文件 源码 gdiplus应用实例 ...

    vc++ 应用源码包_5

    另外有只打开一个应用程序、CRichEdit的使用、最小到托盘、自动检测在线用户(多播组)等。 freeeim_FreeEIM_企业即时通讯软件源代码2010年8月份最新版 FTP、HTTP 多线程断点续传下载文件 源码 gdiplus应用实例 ...

    vc++ 应用源码包_3

    另外有只打开一个应用程序、CRichEdit的使用、最小到托盘、自动检测在线用户(多播组)等。 freeeim_FreeEIM_企业即时通讯软件源代码2010年8月份最新版 FTP、HTTP 多线程断点续传下载文件 源码 gdiplus应用实例 ...

    vc++ 开发实例源码包

    另外有只打开一个应用程序、CRichEdit的使用、最小到托盘、自动检测在线用户(多播组)等。 FreeBird2011Dlg.h 主对话框类头文件 MultiGroup.h 多播组类头文件 UserLink.h 用户链表类头文件 ListenSocket.h 侦听接口...

Global site tag (gtag.js) - Google Analytics