博文

如何用VC++开发读取网卡MAC地址的程序(2005-06-21 20:08:00)

摘要:在实际的应用系统中,我们往往会需要在程序运行时获取当前机器的网卡的MAC地址,以便作为某种标识之用,如控制程序的合法性等。下文就如何用Microsoft Visual C++ 6.0开发这样的程序演示如何实现其要点。 ---- 这里采用的方法是通过Windows 9x/NT/Win2000中内置的NetApi32.DLL的功能来实现的,首先通过发送NCBENUM命令获取网卡的数目和每个网卡的内部编号,然后对每个网卡标号发送NCBASTAT命令获取其MAC地址。注意:这里的网卡是指捆绑了NetBeui协议的通信协议栈,可以在网卡的属性处查看到。 ---- 请运行VC++,打开一个新的工程,选择创建一个Win32 Console程序,然后按下文输入代码,并请参见其中的注释: #include "stdafx.h" #include < windows.h > #include < wincon.h > #include < stdlib.h > #include < stdio.h > #include < time.h > ---- // 因为是通过NetAPI来获取网卡信息,所以需要包含其题头文件nb30.h #include < nb30.h > typedef struct _ASTAT_ { ADAPTER_STATUS adapt; NAME_BUFFER NameBuff [30]; }ASTAT, * PASTAT; ASTAT Adapter; ---- // 定义一个存放返回网卡信息的变量 ---- // 输入参数:lana_num为网卡编号,一般地,从0开始,但在Windows 2000中并不一定是连续分配的 void getmac_one (int lana_num) { NCB ncb; UCHAR uRetCode; memset( &ncb, 0, sizeof(ncb) ); ncb.ncb_command = NCBRESET; ncb.ncb_lana_num = lana_num; // 指定网卡号 ---- // 首先对选定的网卡发送一个NCBRESET命令,以......

阅读全文(2831) | 评论:0

在对话框中动态显示位图(2005-06-21 20:11:00)

摘要:     在对话框中显示位图分为静态和动态两种方法。静态法就是用VC6.0的资源编辑器,首先在资源视图中引入一张所要显示的位图,然后在对话框中放置一个Picture控件,在其属性对话框的Type下拉框中选择Bitmap,在Image框中输入所引入位图的ID,编译后对话框中就会显示所引入的位图。这种方法有一个明显的缺点,就是位图必须先画好并且程序运行时此位图禁止改变。基于此,下文以建立一个适时显示当前时间的程序为例,来介绍如何在对话框中动态显示位图。 首先建立一个基于对话框的程序,名为MyDialog。 清除掉对话框中的TODO:字样,把“确定”和“取消”两个按钮移到对话框的下边,调整对话框为到合适大小。 打开类视图,右键单击CMyDialogDlg,添加如下成员变量: protected: CRect m_bitmapRect; //位图在对话框中位置 添加画图成员函数: protected: BOOL DrawBitmap(CString strTime,CRect* bitmapRect); //strTime为表示时间的字符串,bitmapRect指明在窗口的什么区域画图。 使用ClassWizard为CMyDialogDlg加入WM_TIMER的消息响应函数OnTimer(), 和WM_DESTROY的消息响应函数OnDestroy()。 在CMyDialogDlg::OnInitDialog()种添加如下代码: SetTimer(1,100,NULL);//设置定时器 CRect rect; GetClientRect(&rect);//获得客户区大小 ScreenToClient(&rect);//将屏幕坐标转化为客户坐标 int width=180,height=45;//要创建的位图的宽度和高度 m_bitmapRect.left=rect.right-25-width; //位图右边界距对话框的右边界25像素 m_bitmapRect.top=rect.top+35;//位图上边界距对话框的上边界35像素 m_bitmapRect.right=m_bitmapRect.left+width; m_bitmapRect.bottom=m_bitma......

阅读全文(3353) | 评论:0

如何显示位图(2005-06-21 20:11:00)

摘要://原著:joes Tomas //译者:重庆大学光电工程学院 贾旭滨 //欢迎批评指教,谢谢! 位图文件是分成4部分的。第一部分是位图文件头,它包括位图文件名,位图的大小和位图数据离文件头的偏移量。接下去的是位图信息头,它包括了位图的许多信息,比如位图的宽度,高度和位图使用的颜色数。再后面是颜色表,它可能包含了2个或更多的RGBQUAD结构。最后面是位图图象的数据。 一.位图结构如下: ---- 一、BMP文件结构 ---- 1. BMP文件组成 ---- BMP文件由文件头、位图信息头、颜色信息和图形数据四部分组成。 ---- 2. BMP文件头 ---- BMP文件头数据结构含有BMP文件的类型、文件大小和位图起始位置等信息。 ---- 其结构定义如下: typedef struct tagBITMAPFILEHEADER { WORDbfType; // 位图文件的类型,必须为BM DWORD bfSize; // 位图文件的大小,以字节为单位 WORDbfReserved1; // 位图文件保留字,必须为0 WORDbfReserved2; // 位图文件保留字,必须为0 DWORD bfOffBits; // 位图数据的起始位置,以相对于位图 // 文件头的偏移量表示,以字节为单位 } BITMAPFILEHEADER; ---- 3. 位图信息头 BMP位图信息头数据用于说明位图的尺寸等信息。 typedef struct tagBITMAPINFOHEADER{ DWORD biSize; // 本结构所占用字节数 LONGbiWidth; // 位图的宽度,以像素为单位 LONGbiHeight; // 位图的高度,以像素为单位 WORD biPlanes; // 目标设备的级别,必须为1 WORD biBitCount// 每个像素所需的位数,必须是1(双色), // 4(16色),8(256色)或24(真彩色)之一 DWORD biCompression; // 位图压缩类型,必须是 0(不压缩), // 1(BI_RLE8压缩类型)或2(BI_RLE4压缩类型)之一 DWORD biSizeImage; // 位图的大小,以字节为单位 LONGbiXPelsPerM......

阅读全文(3258) | 评论:0

常用代码&nbsp;(2005-06-21 20:11:00)

摘要:1. oncontextmenu="window.event.returnvalue=false" 将彻底屏蔽鼠标右键   <table border oncontextmenu=return(false)><td>no</table> 可用于Table   2. <body onselectstart="return false"> 取消选取、防止复制   3. onpaste="return false" 不准粘贴   4. oncopy="return false;" oncut="return false;" 防止复制   5. <link rel="Shortcut Icon" href="favicon.ico"> IE地址栏前换成自己的图标   6. <link rel="Bookmark" href="favicon.ico"> 可以在收藏夹中显示出你的图标   如何制作将本站设为首页   你可能已经注意到,现在许多网站的首页上都有这么一个链接“按这里将本站设为首页”(这里的首页指的是浏览器的起始页)。   不但大的ISP,ICP这么做,一些个人主页也推出这一“服务”以招揽网友。     具体是如何实现这个功能的呢?我来帮你剖析一下:     点击那个超链接会显示下载一个名为lspace.reg的文件,下载后双击它,便会修改你的注册表,然后当你再打开浏览器的时候,起始页就 发生了变化。(一听到修改注册表,许多网友就比较"怵",会不会把windows给弄坏了。)     别怕,我们来打开lspace.reg看看(用最普通的notepad记事本就可以打开),发现内容如下:   REGEDIT4  ......

阅读全文(2977) | 评论:0

c/c++头文件一览(转载)(2005-06-21 20:08:00)

摘要:C、传统 C++ #include <assert.h>    //设定插入点 #include <ctype.h>     //字符处理 #include <errno.h>     //定义错误码 #include <float.h>     //浮点数处理 #include <fstream.h>    //文件输入/输出 #include <iomanip.h>    //参数化输入/输出 #include <iostream.h>   //数据流输入/输出 #include <limits.h>    //定义各种数据类型最值常量 #include <locale.h>    //定义本地化函数 #include <math.h>     //定义数学函数 #include <stdio.h>     //定义输入/输出函数 #include <stdlib.h>    //定义杂项函数及内存分配函数 #include <string.h>    //字符串处理 #include <strstrea.h>   //基于数组的输入/输出 #include <time.h>     //定义关于时间的函数 #include <wchar.h>     //宽字符处理及输入/输出 #include <wctype.h>    //宽字符分类 ////////////////////////////////////////////////////////////////////////// 标准 C++ (同上的不再注释) #include <algorithm>    //STL 通用算法 #include <bitset>     //STL 位集容器 #include <cctype> #include <cerrno> #include <clocale> #include <cmath> #include <complex>     //复数类 #include ......

阅读全文(2505) | 评论:0

深入浅出ShellExecute(转载)(2005-06-21 20:14:00)

摘要:Q: 如何打开一个应用程序? ShellExecute(this->m_hWnd,"open","calc.exe","","", SW_SHOW ); 或 ShellExecute(this->m_hWnd,"open","notepad.exe", "c:\MyLog.log","",SW_SHOW ); Q: 如何打开一个同系统程序相关连的文档? ShellExecute(this->m_hWnd,"open", "c:\abc.txt","","",SW_SHOW ); Q: 如何打开一个网页? ShellExecute(this->m_hWnd,"open", "http://www.google.com","","", SW_SHOW ); Q: 如何激活相关程序,发送EMAIL? ShellExecute(this->m_hWnd,"open", "mailto:nishinapp@yahoo.com","","", SW_SHOW ); Q: 如何用系统打印机打印文档? ShellExecute(this->m_hWnd,"print", "c:\abc.txt","","", SW_HIDE); Q: 如何用系统查找功能来查找指定文件? ShellExecute(m_hWnd,"find","d:\nish", NULL,NULL,SW_SHOW); Q: 如何启动一个程序,直到它运行结束? SHELLEXECUTEINFO ShExecInfo = {0}; ShExecInfo.cbSize = sizeof(SHELLEXEC......

阅读全文(5874) | 评论:0

C编程技巧荟萃(2005-06-21 20:14:00)

摘要:转载: /*从键盘中读取字符 功能:按下普通键时,返回其ASCII码 扫描码CODE=0*/ int INKEY(int *code) { int m; while(!bioskey(1))/*可加入无按键时代码*/; *code=bioskey(0); m=*code*255; if(!m) m=*code>>8; *code=*code&255; return m; } /*获取机器日期*/ int DATE(char *s,char type) { char dat[30]; int num; struct tm *tblock; time_t t; t=time(NULL); tblock=localtime(&t); strcpy(dt,asctime(tblock)); strcpy(s,""); switch(type) { case 'N': num=(*tblock).tm_year+1900; itoa(num,s,10); break; case 'Y': num=(*tblock).tm_mon+1; itoa(num,s,10); break; case 'R': num=(*tblock).tm_mday; itoa(num,s,10); break; case 'S': strcpy(dt,asctime(tblock)); MID(s,dt,12,8); break; } } return num; } /*将浮点数转化为字符串*/ /* 参数说明 data:需转换的浮点数;s:输出字符串;len:转换后的长度*/ void f_to_s(double data,char *s,int len) { int dec,sign,i; char *s1,s2[100],s3[100]; s1=0; s2[0]=0; s3[0]=0; s1=fcvt(data,len,&dec,&sign); if (!sign&&data>=1) { MID(s2,s1,dec+1,-1); MID(s3,s1,1,dec); strcpy(s,"+"); strcat(s,s3); strcat(s,"."); strc......

阅读全文(4647) | 评论:1

SQL SERVER中mdf和ldf文件从一个服务器移到另一个服务器的处理方法(2005-06-21 20:13:00)

摘要:目前我知道我有三个方法,可以给大家参考: 一是:在目标服务器上新建一个数据库,将新建文件取与原文件相同的名称后,关闭服务器,往往还需要将计算机注销,然后将原文件覆盖新建的数据库文件,就可以在目标文件上应用了。 二是:把数据库的数据文件(*.mdf)和日志文件(*.ldf)都拷贝到目的服务器,在SQL Server Query Analyzer中用语句进行恢复: >>>>EXEC sp_attach_db @dbname = 'test', >>>>@filename1 = 'd:\mssql7\data\test_data.mdf', >>>>@filename2 = 'd:\mssql7\data\test_log.ldf' >>>>这样就把test数据库附加到SQL Server中,可以照常使用。如果不想用原来的日志文件,可以用如下的命令: >>>>EXEC sp_detach_db @dbname = 'test' >>>>EXEC sp_attach_single_file_db @dbname = 'test', >>>>@physname = 'd:\mssql7\data\test_data.mdf' >>>>这个语句的作用是仅仅加载数据文件,日志文件可以由SQL Server数据库自动添加,但是原来的日志文件中记录的数据就丢失了。 三是:在控制台管理器的数据库选项上右击,选择附加数据库选项,按照提示操作即可。但日志文件在这种方法中可能无法加入。 ......

阅读全文(5082) | 评论:0

VB中数据库的连接方法(2005-06-21 20:09:00)

摘要:目前,绝大多数的数据库参考书都介绍了ODBC的手工配置方法,或者介绍了如何在代码中进行ODBC配置。但这两种方法都有一定的局限性:     不是当程序最终完成并分发到用户手中后,还需要为用户配置ODBC,显得既麻烦又不符合专业软件的要求;就是得编写复杂的更改操作系统注册表文件的程序,十分烦琐。本文从ADO(ActiveX Data Objects)入手,介绍无需配置数据源的几种常用大型数据库连接方法。     本文所述的无“数据源”连接,意义不是不需要数据源,否则连接无从谈起,而是不需要配置注册数据源所进行的连接。ODBC(Open DataBase Connectivity,开放式数据库连接)是用于连接不同数据源的标准编程语言接口。许多文章中介绍,在实现ODBC时,必须首先配置ODBC环境,进行数据源的注册,然后才能在对数据库编程时,对数据源进行连接、访问和操作,并提供了用PB或VB等语言工具实现数据源注册的具体方法。这些方法不但复杂烦琐,而且由于参数内容不一,配置时令人感觉无所适从,不宜把握。     走近ADO      ADO是微软提供的数据库访问技术。它被设计用来同新的数据访问层OLE DB Provider一起协同工作,以提供通用数据访问(Universal Data Access)能力。OLE DB是一个底层的数据访问接口,用它可以访问各种数据源,包括传统的关系型数据库、电子邮件系统及自定义的商业对象等。    ADO提供了一个熟悉的、高层的对OLE DB的Automation封装接口。对那些熟悉RDO的程序员来说,可以把OLE DB看作ODBC驱动程序,如同RDO对象是ODBC驱动程序接口一样,ADO对象是OLE DB的接口。同样,像不同的数据库系统需要它们自己的ODBC驱动程序一样,不同的数据源也要求它们自己的OLE DB提供者(OLE DB provider)。目前,虽然OLE DB提供者比较少,但微软正积极推广该技术,并计划用OLE DB取代ODBC。     微软公司已宣布今后不会对VB......

阅读全文(11482) | 评论:2

远程数据库的访问(VB数据库)(2005-06-21 20:13:00)

摘要:---- 远 程 数 据 对 象(RDO) 是 VB 5.0 中 基 于 ODBC API 的 对 象 模 型, 它 短 小、 快 捷、 强 健, 可 以 访 问 任 何 32 位 ODBC 数 据 源, 如 SQL Server 和 Oracle 数 据 库, 是 访 问 远 程 数 据 库 的 更 新 更 高 级 的 工 具。 ---- 使 用 RDO 的 一 般 方 法 如 下。 ---- 先 声 明 变 量: Public con As rdoConnection, res As rdoResultset ---- 然 后 初 始 化 rdoEngine, 设 置 用 户 和 口 令 等 缺 省 参 数; With rdoEngine .rdoDefaultUser = "sa" '用户为 sa .rdoDefaultPassword = "pass" '口令为 pass .rdoDefaultCursorDriver = rdUseServer .rdoDefaultLoginTimeout = 15 End With ---- 再 连 接 到 要 访 问 的 远 程 数 据 库( 可 使 用 DSN Connection 和 DSN-Less Connection)。 ---- 使 用 DSN Connection 举 例( 连 接 服 务 器 SERVER 上 的 数 据 库 hotel): Set con = rdoEnvironments(0).OpenConnection ("hotel", rdDriverNoPrompt, False) ---- 使 用 DSN-Less Connection 举 例( 连 接 服 务 器 SERVER 上 的 数 据 库 hotel): Set con = rdoEnvironments(0).OpenConnection ("", rdDriverNoPrompt, False, _ "driver={SQL Server}; server=SERVER; database=hotel") ---- 建 立 连 接 后, 既 可 使 用 OpenResultset 方 法 执 ......

阅读全文(2832) | 评论:0