利用 INI 文件对软件进行注册

本实例主要实现使用 INI 文件对软件的用户信息进行 注册的功能。运行本程序,输入登录名称、登录口令和注 册码,单击“注册”按钮进行注册,如果注册成功,则给 出提示;如果信息已注册,系统给出提示信息

本实例实现时主要用到了系统 API 函数 GetPrivateProfileString 和 WritePrivateProfileString,下面分别对它们 进行详细讲解。
(1)GetPrivateProfileString 函数 该函数主要用来读取 INI 文件的内容,其语法格式如下:


 [DllImport("kernel32")] private static extern int GetPrivateProfileString(string lpAppName,string lpKeyName,string lpDefault,StringBuilder lpReturnedString,int nSize,string lpFileName); 

GetPrivateProfileString 函数语法中的参数及说明如表 21.1 所示。
表 21.1 GetPrivateProfileString 函数语法中的参数及说明
【参数说明】
lpAppName 表示 INI 文件内部根节点的值 lpKeyName 表示根节点下子标记的值 lpDefault 表示当标记值未设定或不存在时的默认值 lpReturnedString 表示返回读取节点的值 nSize 表示读取的节点内容的最大容量 lpFileName 表示文件的全路径

(2)WritePrivateProfileString 函数 该函数主要用于向 INI 文件写入数据,其语法格式如下: [DllImport(“kernel32”)] private static extern long WritePrivateProfileString(string mpAppName,string mpKeyName,string mpDefault,string mpFileName); WritePrivateProfileString 函数语法中的参数及说明如表 21.2 所示。
表 21.2 WritePrivateProfileString 函数语法中的参数及说明
参 数 说 明 mpAppName 表示 INI 文件内部根节点的值 mpKeyName 表示将要修改的标记名称 mpDefault 表示想要修改的内容 mpFileName 表示 INI 文件的全路径


说明:程序中使用 API 函数时,首先需要在命名空间区域添加 System.Runtime.InteropServices 命名空间,下 面遇到类似情况时将不再提示。

设计过程

(1)打开 Visual Studio 2008 开发环境,新建一个 Windows 窗体应用程序,并将其命名为 RegSoftByINI。 (2)更改默认窗体 Form1 的 Name 属性为 Frm_Main,在该窗体中添加 3 个 TextBox 控件,分别用来输入 登录名称、登录口令和注册码;添加两个 Button 控件,分别用来执行注册和清空文本框操作。 (3)程序主要代码如下。 Frm_Main 窗体的后台代码中,首先对 API 函数 GetPrivateProfileString 进行重写,代码如下:

/// <summary> /// 为 INI 文件中指定的节点取得字符串 /// </summary> 
/// <param name="lpAppName">欲在其中查找关键字的节点名称</param> 
/// <param name="lpKeyName">欲获取的项名</param> 
/// <param name="lpDefault">指定的项没有找到时返回的默认值</param> 
/// <param name="lpReturnedString">指定一个字符串缓冲区,长度至少为 nSize</param> 
/// <param name="nSize">指定装载到 lpReturnedString 缓冲区的最大字符数量</param> 
/// <param name="lpFileName">INI 文件名</param> 
/// <returns>复制到 lpReturnedString 缓冲区的字节数量,其中不包括那些 NULL 中止字符</returns> 
[DllImport("kernel32")]
public static extern int GetPrivateProfileString(string lpAppName,string lpKeyName,string lpDefault,StringBuilder lpReturnedString,int nSize,string lpFileName);

对 API 函数 WritePrivateProfileString 进行重写的实现代码如下:

/// <summary> /// 修改 INI 文件中内容 /// </summary> 
/// <param name="lpApplicationName">欲在其中写入的节点名称</param> 
/// <param name="lpKeyName">欲设置的项名</param> 
/// <param name="lpString">要写入的新字符串</param>
/// <param name="lpFileName">INI 文件名</param> 
/// <returns>非零表示成功,零表示失败</returns> 
[DllImport("kernel32")] public static extern int WritePrivateProfileString(string lpApplicationName,string lpKeyName,string lpString,string lpFileName); 

自定义一个返回值类型为 string 的 ReadString 方法,该方法用来从 INI 文件中读取指定节点的内容,其实现 代码如下:

/// <summary> /// 从 INI 文件中读取指定节点的内容 /// </summary> 
/// <param name="section">INI 节点</param> 
/// <param name="key">节点下的项</param> 
/// <param name="def">没有找到内容时返回的默认值</param> 
/// <param name="def">要读取的 INI 文件</param> 
/// <returns>读取的节点内容</returns> 
public string ReadString(string section, string key, string def, string fileName)
 {     
 StringBuilder temp = new StringBuilder(1024);//创建可变字符串对象       GetPrivateProfileString(section, key, def, temp, 1024, fileName);//获取节点内容  
  return temp.ToString();           //返回获取到的节点内容    
}

Frm_Main 窗体加载时,从 INI 文件中获取已注册的内容,并显示在相应的 TextBox 文本框中,代码如下:

private void Frm_Main_Load(object sender, EventArgs e) 
{     
textBox1.Text = ReadString("Regedit", "Name", "", strPath);      //显示登录名称     textBox2.Text = ReadString("Regedit", "Pwd", "", strPath);      //显示登录口令     textBox3.Text = ReadString("Regedit", "RegCode", "", strPath);      //显示注册码 
} 

当用户输入登录名称、登录口令和注册码之后,单击“注册”按钮,首先判断是否已经有相同的信息注册 过,如果已经注册过,弹出提示信息;否则,将用户输入的信息写入到 INI 文件中,从而完成软件的注册功能。 “注册”按钮的 Click 事件代码如下:

private void button1_Click(object sender, EventArgs e)
{
 string strName = ReadString("Regedit", "Name", "", strPath); //获取登录名称
 string strPwd = ReadString("Regedit", "Pwd", "", strPath); //获取登录口令
 string strRegcode = ReadString("Regedit", "RegCode", "", strPath); //获取注册码
 if (strName == textBox1.Text && strPwd == textBox2.Text && strRegcode == textBox3.Text) //判断 INI 文件中是否已经存在相同信息
 {
 MessageBox.Show("此信息已注册过!");
 }
 else
 {
 WritePrivateProfileString("Regedit", "Name", textBox1.Text, strPath); //向 INI 文件中写入登录名称
 WritePrivateProfileString("Regedit", "Pwd", textBox2.Text, strPath); //向 INI 文件中写入登录口令
 WritePrivateProfileString("Regedit", "RegCode", textBox3.Text, strPath); //向 INI 文件中写入注册码
 MessageBox.Show("注册信息已经成功写入 INI 文件!", "信息");
 }
} 
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值