博文
如何用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( &nc......
在对话框中动态显示位图(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......
如何显示位图(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......
常用代码 (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给弄坏了。)
别怕,......
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......
深入浅出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: 如何用系统查找功能来查......
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[......
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数据库自动添加,但是原来的日志文件中记录的数据就丢失了。
三是:在控制台管理器的数据库选项上右击,选择附加数据库选项,按照提示操作即可。但日志文件在这种方法中可能无法加入。
......
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数据库)(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, _
"dri......