C-sharp对播放器的设计

上传人:美*** 文档编号:243139359 上传时间:2024-09-16 格式:PPT 页数:49 大小:2.32MB
返回 下载 相关 举报
C-sharp对播放器的设计_第1页
第1页 / 共49页
C-sharp对播放器的设计_第2页
第2页 / 共49页
C-sharp对播放器的设计_第3页
第3页 / 共49页
点击查看更多>>
资源描述
单击此处编辑母版标题样式,单击此处编辑母版文本样式,第二级,第三级,第四级,第五级,*,*,第,10,章,播放器的设计,10.1,项目的创建,10.2,动态链接库的设计,10.3,设计播放器窗体,10.4,修改,Program,类,10.5,修改,AssemblyInfo,类,10.6,读者完成部分,知识点链接,L10.1,项目的创建,L10.3,设计播放器窗体,L10.4,修改,Program,类,1.,播放器的介绍,播放器应用程序是模仿,Windows,系统自带的,Media Player,来设计的。其运行的界面如图,10.1,所示,界面中包括菜单栏、工具栏、播放列表以及播放窗口。,菜单栏中的“添加文件”菜单包括“打开文件夹”和“打开文件”子菜单,“外观”菜单包括“播放列表折叠”子菜单。,图,10.1,播放器界面,2,所要掌握的知识点,(,1,)动态链接库、注册表、,COM,互操作和系统,API,函数。,(,2,)程序集。,(,3,)熟悉,FolderBrowserDialog,组件和,SplitContainer,控件的使用。,10.1,项目的创建,播放器应用程序的设计主要是播放器窗体的设计,使用微软提供的,Media Player,COM,组件,同时播放器窗体要引用创建的,动态链接库,“,DLLGetFile,”,此动态链接库用于获取所选择的播放文件。,创建步骤:,1.,创建播放器项目,运行,VS2008,,执行,【,文件,】【,新建,】【,项目,】,命令,在弹出的“新建项目”对话框中选中“,Windows,窗体应用程序”模板,选择项目存放位置并输入项目名称为“,Player,”,单击“确定”按钮完成播放器项目的创建。,2.,创建动态链接库项目,运行,VS2008,,执行,【,文件,】【,新建,】【,项目,】,命令,在弹出的“新建项目”对话框中选中“类库”模板,选择项目存放位置并输入项目名称为“,DLLGetFile,”,单击“确定”按钮完成动态链接库项目的创建。,到此完成了两个项目的创建。,10.2,动态链接库的设计,设计步骤:,1.,添加命名空间,在创建的项目“,DLLGetFile,”中打开类“,Class1,”,因为此类涉及读取文件和窗体类,所以添加命名空间:,using System.Windows.Forms;,using System.IO;,2.,添加读取单个文件的方法,根据指定的路径读取文件名和文件路径并保存在,ListViewItem,实例中,返回此实例。代码如下:,public ListViewItem searchFile(string strFilePath),FileInfo fi = new FileInfo(strFilePath);,string file = fi.Name;,ListViewItem item = new ListViewItem();,item.SubItems.Add(file);/,添加文件名,item.SubItems.Add(fi.FullName);/,添加文件路径,return item;,10.2,动态链接库的设计,3.,添加读取文件夹中可播放文件的方法,根据指定的文件夹路径读取此文件夹下所有可播放文件并保存在,ListViewItem,实例数组中,返回此实例数组。,代码如下,。,4.,生成动态链接库,在解决方案资源管理器中右击项目名“,DLLGetFile,”,单击“生成”选项,如图,10.2,所示,则生成了动态链接库“,DLLGetFile.DLL,”,此文件在项目的“,DLLGetFileDLLGetFile binDebug,”目录下,如图,10.3,所示。,图,10.2,“生成”选项,图,10.3,生成的动态链接库,10.3,设计播放器窗体,设计步骤:,1.,添加控件,在创建的项目“,Player,”中打开窗体“,Form1,”,将此窗体调整到适当大小,从工具箱中拖放,1,个,MenuStrip,、,1,个,ToolStrip,、,1,个,OpenFileDialog,、,1,个,FolderBrowserDialog,和,1,个,Timer,组件到,Form1,窗体中,再从工具箱中拖放,1,个,SplitContainer,控件到,Form1,窗体的工具栏,toolStrip1,下面并覆盖下面整个窗体。在,SplitContainer,控件的右半部放入,1,个,ListView,控件。,10.3,设计播放器窗体,2.,添加,COM,组件,打开工具箱,右击任意处,单击“选择项”选项,在弹出的“选择工具箱项”对话框中单击“,COM,组件”选项卡,选中“,Windows Media Player,”选项,如图,10.4,所示,单击“确定”按钮完成,COM,组件的添加。在工具箱中出现了“,Windows Media Player,”,COM,组件,如图,10.5,所示,将此组件拖放到,SplitContainer,控件的左半部。,图,10.4 “,选择工具箱项”对话框 图,10.5 Windows Media Player,10.3,设计播放器窗体,3.,设置窗体和控件属性,打开窗体,Form1,的属性窗口,其中,Text,设置为“播放器”。,StartPosition,设置为“,CenterScreen,”。,(,1,)菜单栏,menuStrip1,的设置。分别添加“添加文件”、“删除文件”、“部分方式”、“外观”和“帮助”,5,个主菜单。其中在添加文件主菜单中添加“打开文件夹”和“打开文件”两个子菜单,在外观主菜单中添加“播放列表折叠”子菜单。,(,2,)工具栏,toolStrip1,的设置。分别添加两个,toolStripButton,,其中,toolStripButton1,的,Text,设置为“打开文件夹”,,DisplayStyle,设置为“,Image,”,,Image,选择已经准备好的文件夹图片。,toolStripButton2,的,Text,设置为“添加文件”,,DisplayStyle,设置为“,Image,”,,Image,选择已经准备好的文件图片。,(,3,)打开文件对话框,openFileDialog1,的设置。,FileName,设置为“空值”,,Filter,设置为“,mp3,文件,|*.mp3|wma,文件,|*.wma|,所有文件,*,.*|*.*,”,,MultiSelect,设置为“,True,”。,10.3,设计播放器窗体,(,4,),splitContainer1,的设置。,Dock,设置为“,Fill,”。,(,5,),axWindowsMediaPlayer1,的设置。,Dock,设置为“,Fill,”。,(,6,),listView1,的设置。,Dock,设置为“,Fill,”,,BackColor,设置为“,Window,”,,FullRowSelect,和,GridLines,都设置为“,True,”,,View,设置为“,Details,”。单击,Columns,的“,”按钮,在弹出的“,ColumnHeader,集合编辑器”对话框中分别添加,3,个“,ColumnHeader,”,,columnHeader1,的,Text,设置为“序号”、,Width,设置为“,40,”,,columnHeader2,的,Text,设置为“播放文件名”、,Width,设置为“,177,”,,columnHeader3,的,Text,设置为“路径”、,Width,设置为“,0,”。,(,7,)计时器,timer1,的设计。,Enabled,设置为“,True,”,,Interval,设置为“,1000,”。,10.3,设计播放器窗体,4.,引用动态链接库,在这里可以调用动态链接库“,DLLGetFile,”的方法来获取播放文件。切换到代码编辑器“,Form1.cs,”中,在解决方案资源管理器中右击“引用”文件夹,选择添加引用选项,在弹出的“添加引用”对话框中单击“浏览”选项卡,选择,DLLGetFile,项目中生成的“,DLLGetFile.dll,”文件,如图,10.6,所示,单击“确定”按钮完成动态链接库的引用。,图,10.6,引用动态链接库,10.3,设计播放器窗体,5.,添加命名空间,因为涉及读取文件、,注册表,和动态链接库中的方法,所以添加命名空间:,using DLLGetFile;,using System.IO;,using Microsoft.Win32;,6.,添加读取指定文件夹下所有播放文件方法,根据指定的文件夹调用动态链接库中的“,searchDirectoryFile,”方法,读取此文件夹下所有播放文件并加载到,listView1,中。,代码如下,。,10.3,设计播放器窗体,7.,设置,Form1,的构造函数,将,axWindowsMediaPlayer1,设置为自动并且循环播放,在加载窗体时读取注册表“,MyMedia,”键值指定文件夹下的播放文件,如果此键值为空值则读取系统“,MyMusic,”文件夹下的文件。代码如下所示:,public Form1(),InitializeComponent();,this.axWindowsMediaPlayer1.stretchToFit = true; /,自动缩放。,this.axWindowsMediaPlayer1.settings.setMode(loop, true); /,循环播放。,using (RegistryKey userKey = Application.UserAppDataRegistry),if (this.folderBrowserDialog1.SelectedPath = userKey.GetValue(MyMedia) as string) = null),this.folderBrowserDialog1.SelectedPath = Environment.,GetFolderPath(Environment.SpecialFolder.MyMusic); /,系统下的,MyMusic,文件夹,AddFiles();,10.3,设计播放器窗体,8.,添加工具栏中的按钮事件,工具栏的两个按钮分别添加指定文件夹下的所有文件和指定的文件,切换到设计视图,分别双击工具栏中两个按钮,添加代码,,代码如下所示,。,9.,添加定时器的,Tick,事件,定时器,timer1,用于每隔一定的时间判断所播放的状态,如果在准备新媒体或者在播放时在显示播放列表的,listView1,中让正在播放的文件处于选中状态,并将所播放的文件名显示在窗体的标题栏中。如果播放准备就绪则开始播放。在,timer1,的事件窗体中双击“,Tick,”,添加事件代码,,代码如下,。,10.3,设计播放器窗体,10.,添加播放所选择的播放文件事件代码,在播放列表中当双击某个播放文件时则播放此文件,是根据播放列表中的播放文件索引值来定位,axWindowsMediaPlayer1,中对应的播放文件索引值来实现。切换到设计视图,在,listView1,的事件窗口中双击“,MouseDoubleClick,”,添加事件代码,代码如下:,private void listView1_MouseDoubleClick(object sender, MouseEventArgs e)/,播放所选择的播放文件,if (this.listView1.SelectedItems.Count 0),int iSel = this.listView1.SelectedItems0.Index;,this.Text = this.listView1.SelectedItems0.SubItems1.Text.Trim();,if (iSel = this.axWindowsMediaPlayer1.currentPlaylist.count),this.axWindowsMediaPlayer1.Ctlcontrols.playItem(this.axWindowsMediaPlayer1.,currentPlaylist.get_Item(iSel);,10.3,设计播放器窗体,11.,添加播放列表折叠事件代码,外观菜单中的“播放列表折叠”子菜单用于隐藏或显示播放列表。切换到设计视图,双击“播放列表折叠”子菜单,添加事件代码,代码如下:,private void,播放列表折叠,ToolStripMenuItem_Click(object sender, EventArgs e),this.splitContainer1.Panel2Collapsed = !this.splitContainer1.Panel2Collapsed;,if (this.splitContainer1.Panel2Collapsed),播放列表折叠,ToolStripMenuItem.Text = ,播放列表展开,;,else,播放列表折叠,ToolStripMenuItem.Text = ,播放列表折叠,;,10.3,设计播放器窗体,12.,添加菜单栏中“打开文件夹”和“打开文件”事件及事件代码,切换到设计视图,分别双击“打开文件夹”和“打开文件”子菜单项,添加事件代码,代码如下:,private void,打开文件夹,ToolStripMenuItem_Click(object sender, EventArgs e),toolStripButton1_Click(null,null);,private void,打开文件,ToolStripMenuItem_Click(object sender, EventArgs e),toolStripButton2_Click(null, null);,13.,添加关闭窗口事件及事件代码,当关闭窗口时将所打开文件夹的路径保存在“,MyMedia,”键中。打开,Form1,的事件窗口,双击“,FormClosing,”,添加事件代码,代码如下:,private void Form1_FormClosing(object sender, FormClosingEventArgs e) /,关闭窗体,using (RegistryKey subKey = Application.UserAppDataRegistry), subKey.SetValue(MyMedia, this.folderBrowserDialog1.SelectedPath); /,写到注册表中,10.3,设计播放器窗体,14.,运行程序,按,【Ctrl+F5】,组合键运行程序,添加播放文件,运行结果如图,10.1,所示。,说明,:,(,1,),FolderBrowserDialog,组件。图标为“ ”,用于浏览和选择文件夹的模式对话框。也可以从,FolderBrowserDialog,组件内创建新文件夹。使用,ShowDialog,方法可在运行时显示,FolderBrowserDialog,组件。设置,RootFolder,属性可确定将出现在对话框树视图内的顶级文件夹和任何子文件夹。在显示对话框后,就可以使用,SelectedPath,属性获取所选文件夹的路径了。若要选择文件而不是文件夹,应使用,OpenFileDialog,组件。,10.3,设计播放器窗体,(,2,),SplitContainer,控件。图标为“,”,,SplitContainer,控件看做是一个复合体,是由一个可移动的拆分条分隔的两个面板。当鼠标指针悬停在该拆分条上时,指针将相应地改变形状以显示该拆分条是可移动的。,SplitContainer,控件常用的属性、方法和事件如表,10.1,所示。,10.4,修改,Program,类,项目中,Program,类中“,Main,”方法是应用程序的入口点,在这里改写,Program,类是为了实现当播放器在播放时,如果再运行此播放器应用程序则将此播放器窗口置最前端,而不再运行一个播放器应用程序。此类中调用了系统内的,API,函数,“,ShowWindow,”和“,SetForegroundWindow,”分别用于显示窗口和将窗口置最前端。,修改步骤:,1.,添加命名空间,打开,Program,类,因为涉及调用系统内的,API,函数、操作注册表和应用,Mutex,类,所以添加命名空间:,using System.Runtime.InteropServices;,using Microsoft.Win32;,using System.Threading;,10.4,修改,Program,类,2.,引用系统内置的,API,函数,添加代码,代码如下:,namespace Player,static class Program,/*,显示已经运行程序的主界面,*,/,DllImport(user32.dll, EntryPoint = ShowWindow),static extern bool ShowWindow(IntPtr handle, int flags); /,显示窗口,DllImport(user32.dll, EntryPoint = SetForegroundWindow),static extern bool SetForegroundWindow(IntPtr handle); /,将窗口置最前,/ ,/,应用程序的主入口点,/ ,STAThread,static void Main(),Application.EnableVisualStyles();,Application.SetCompatibleTextRenderingDefault(false);,Application.Run(new Form1();,10.4,修改,Program,类,3.,修改,Main,方法,修改后的,Main,方法代码如下,。,4.,运行程序,按,【Ctrl+F5】,组合键运行程序后,再按,【Ctrl+F5】,组合键运行程序,弹出如图,10.7,所示的对话框,单击“确定”按钮后弹出播放器界面。,图,10.7,系统提示对话框,10.5,修改,AssemblyInfo,类,修改步骤:,1.,修改,AssemblyInfo.cs,类,打开,AssemblyInfo.cs,,修改代码,,代码如下,。,2.,按,【Ctrl+F5】,组合键运行程序,右击“,CH10PlayerPlayerbinDebug,”目录下的“,Player.exe,”,执行“属性”菜单命令,单击“版本”选项卡,如图,10.8,所示。,图,10.8 “,版本”选项卡,10.6,读者完成部分,(,1,)完善“删除文件”主菜单,其中包括“删除重复文件”、“删除错误文件”、“删除选择文件”和“删除全部文件”子菜单。,(,2,)完善“播放方式”主菜单,其中包括“顺序播放”、“单曲循环”、“全部循环”和“随机播放”子菜单。,L10.1,项目的创建,L1. COM,与,COM+,1. COM,所谓,COM,(,Componet Object Model,,组件对象模型),是一种说明如何建立可动态互变组件的规范,此规范提供了为保证能够互操作,客户和组件应遵循的一些二进制和网络标准。通过这种标准将可以在任意两个组件之间进行通信而不用考虑其所处的操作环境是否相同、使用的开发语言是否一致以及是否运行于同一台计算机。,COM,是一种技术标准,其商业品牌则称为,ActiveX,。,COM,的优点:,(,1,)用户一般希望能够定制所用的应用程序,而组件技术从本质上讲就是可被定制的,因而用户可以用更能满足他们需要的某个组件来替换原来的那个。,(,2,)由于组件是相对应用程序独立的部件,我们可以在不同的程序中使用同一个组件而不会产生任何问题,软件的可重用性将大大得到增强。,(,3,)随着网络带宽及其重要性的提高,分布式网络应用程序毫无疑问成为软件市场上越来越重要的卖点。组件架构可以使得开发这类应用程序的过程得以简化。,L1. COM,与,COM+,2. COM+,COM+,不再局限于,COM,的组件技术,它更加注重于分布式网络应用的设计和实现。,COM+,继承了,COM,几乎全部的优势,同时又避免了,COM,实现方面的一些不足,把,COM,、,DCOM,和,MTS,的编程模型结合起来,继承了它们的绝大多数特性,在原有的特性上增加了新的功能。,COM+,的新的优点:,(,1,)真正的异步通信。,COM+,底层提供了队列组件服务,这使客户和组件有可能在不同的时间点上协同工作,,COM+,应用无须增加代码就可以获得这样的特性。,(,2,)事件服务。新的事件机制使事件源和事件接收方实现事件功能更加灵活,利用系统服务简化了事件模型,避免了,COM,可连接对象机制的琐碎细节。,(,3,)可伸缩性。,COM+,的可伸缩性来源于多个方面,动态负载平衡以及内存数据库、对象池等系统服务都为,COM+,的可伸缩性提供了技术基础,,COM+,的可伸缩性原理上与多层结构的可伸缩特性一致。,(,4,)可管理和可配置性。管理和配置是应用系统开发完成后的行为,在软件维护成本不断增加的今天,,COM+,应用将有助于软件厂商和用户减少这方面的投入。,(,5,)易于开发。,COM+,应用开发的复杂性和难易程度将决定,COM+,的成功与否,虽然,COM+,开发模型比以前的,COM,组件开发更为简化,但真正提高开发效率仍需要借助于一些优秀的开发工具。,L1. COM,与,COM+,【,例,EX10_1】,设计,WinForm,应用程序用于统计第一季度的销售情况,调用,Excel,并将数据保存在此表格中。,设计步骤:,(,1,)新建,WinForm,项目,新建,WinForm,项目并命名为“,EX10_1,”。,(,2,)添加控件并设置属性,在,Form1,的设计视图中将此窗体调整到适当的大小并将 “,Text,”属性设为“第一季度销售统计”。从工具箱中拖放,2,个,Button,、,2,个,ComboBox,、,3,个,Label,和,1,个,TextBox,控件到窗体中,按如图,10.10,所示布局控件。,button1,、,button2,、,label1,、,label2,和,label3,的,Text,属性值分别设置为“添加销售额”、“弹出统计表”、“地区”、“月份”和“销售额”。,comboBox1,的,Items,分别添加“南京”、“上海”、“天津”和“北京”。,comboBox2,的,Items,分别添加“一月份”、“二月份”和“三月份”。,L1. COM,与,COM+,(,3,)引用,COM,组件,打开“解决方案资源管理器”,右击“引用”文件夹,单击“添加引用”,在弹出的“添加引用”对话框中选择“,COM,”选项卡,选中“,Microsoft Excel XXX Object Library,”并单击“确定”按钮将该组件引用到项目中。其中,XXX,为版本号。如图,10.9,所示。,图,10.9,引用,COM,组件,L1. COM,与,COM+,(,4,)添加命名空间,因为涉及对,Excel,的操作,所以添加如下命名空间:,using Microsoft.Office.Interop.Excel;,(,5,)定义数组和添加方法,定义数组用于记录各个地区不同月份的销售额,并添加填充表格范围的方法等一些方法。添加代码,,代码如下所示,。,(,6,)添加事件及及其事件代码,分别双击“添加销售额”和“弹出统计表”按钮,其事件,代码如下所示,。,L1. COM,与,COM+,(,7,)运行程序,按,【Ctrl+F5】,组合键运行程序,分别选择各个地区不同月份,输入销售额并单击“添加销售额”按钮,如图,10.10,所示,单击“弹出统计表”按钮,弹出,Excel,结果,如图,10.11,所示。,图,10.10,输入销售额 图,10.11,弹出的,Excel,表格,返回,L2.,动态链接库,使用,DLL,还可以方便地建立支持多语种的应用程序。可以把多语种应用程序中所使用的语种相关的函数做到,DLL,中,只要不同语种的应用程序所调用的函数都具有相同的接口,就可以通过简单地更换,DLL,来实现多语种支持。,【,例,EX10_2】,设计动态链接库和,WinForm,应用程序用于简单的计算数据。,设计步骤:,1.,创建动态链接库项目,运行,VS2008,,依次执行,【,文件,】【,新建,】【,项目,】,命令,在弹出的“新建项目”对话框中选中“类库”模板,选择项目存放位置并输入项目名称为“,EX10_2_DLL,”,单击“确定”按钮完成动态链接库项目的创建。,2.,修改类名称,在“解决方案资源管理器”中将“,Class1.cs,”类修改为“,Count.cs,”。,L2.,动态链接库,3.,添加方法,打开,Count,类,分别添加加、减、乘、除四个方法,方法代码如下所示:,namespace EX10_2_DLL,public class Count,public double Add(double a,double b),return a + b;,public double Minus(double a,double b),return a,b;,public double Multiply(double a, double b),return a * b;,public double Divide(double a, double b),return a / b;,L2.,动态链接库,4.,生成动态链接库,在“解决方案资源管理器”中右击项目名“,EX10_2_DLL,”,选择“生成”选项完成动态链接库的生成。生成的动态链接库在“,EX10_2_DLLEX10_2_DLLbinDebug,”中。,5.,新建,WinForm,项目,新建,WinForm,项目并命名为“,EX10_2,”。,6.,添加控件并设置属性,在,Form1,的设计视图中将此窗体调整到适当的大小并将 “,Text,”属性设为“简单计算器”。从工具箱中拖放,1,个,Button,、,1,个,ComboBox,和,2,个,TextBox,控件到窗体中,按如图,10.12,所示布局控件。,button1,的,Text,属性值设置为“,=,”。,comboBox1,的,Items,分别添加“,+,”、“,”、“,*,”和“,/,”。,L2.,动态链接库,7.,添加引用和命名空间,在“解决方案资源管理器”中右击“引用”文件夹,选择“添加引用”选项,在弹出的“添加引用”对话框中选中“浏览”选项卡,选中刚生成的“,EX10_2_DLL,”动态链接库,单击“确定”按钮完成引用。在“,Form1.cs,”中添加命名空间:,using EX10_2_DLL;,8.,添加事件及代码,切换到设计视图,双击“,=,”按钮,添加代码,,代码如下,。,L2.,动态链接库,9.,运行程序,按,【Ctrl+F5】,组合键运行程序,输入数据并选择运算符,单击“,=,”按钮,结果如图,10.12,所示。,图,10.12,简单计算器,返回,L10.3,设计播放器窗体,L1.,注册表,1.,注册表介绍,注册表(,Registry,)是,Microsoft Windows,中的一个重要的数据库,用于存储系统和应用程序的设置信息。早在,Windows 3.0,推出,OLE,技术的时候,注册表就已经出现。随后推出的,Windows NT,是第一个从系统级别广泛使用注册表的操作系统。但是,从,Microsoft Windows 95,开始,注册表才真正成为,Windows,用户经常接触的内容,并在其后的操作系统中继续沿用至今。,L1.,注册表,2.,打开注册表,如果是,Windows 2000/XP,操作系统,执行,【,开始,】【,运行,】,菜单命令,在弹出的“运行”对话框中输入“,regedit,”,回车或者单击“确定”按钮打开注册表。打开的注册表如图,10.13,所示。,另外一种方法就是在,Windows,目录下找到,regedit.exe,,直接双击也可以打开。,图,10.13,注册表编辑器,L1.,注册表,3.,存放位置,Windows 2000/XP,注册表文件按功能来分,也是由系统注册表文件和用户注册表文件两类组成的。注册表文件存放系统的所有设置信息,系统设置和缺省用户配置数据存放在系统,系统文件夹,SYSTEM32CONFIG,文件夹下的,6,个文件,,DEFAULT,、,SAM,、,SECURITY,、,SOFTWARE,、,USERDIFF,和,SYSTEM,中,而用户的配置信息存放在系统所在磁盘的, Documents and Setting,文件夹,包括,NTUSER.DAT,、,NTUSER.INI,及,ntuser.dat.LOG,日志文件。,4.,注册表结构,注册表由键(或称“项”)、子键(子项)和值项构成。一个键就是分支中的一个文件夹,而子键就是这个文件夹中的子文件夹,子键同样是一个键。一个值项则是一个键的当前定义,由名称、数据类型以及分配的值组成。一个键可以有一个或多个值,每个值的名称各不相同,如果一个值的名称为空,则该值为该键的默认值。,L1.,注册表,注册表的数据类型主要有四种,如表,10.2,所示。,注册表中的所有信息都是分类保存的,“主键”是各个大的信息分类名称。注册表中的所有信息均被分类存放在相应主键中。操作系统不同,相应的主键也不相同,其中,,Windows 9x,、,Windows NT,、,Windows Me,操作系统中有,6,个主键,而,Windows 2000,、,Windows 2003,和,Windows XP,操作系统中则有,5,个主键。,(,1,),HKEY_CLASSES_ROOT,主键,(,2,),HKEY_CURRENT_USER,主键,(,3,),HEKY_LOCAL_MACHINE,主键,(,4,),HKEY_USERS,主键,(,5,),HKEY_CURRENT_CONFIG,主键,(,6,),HKEY_PERFORMANCE_DATA,L1.,注册表,5. Registry,类,由,Registry,类公开的基或根,RegistryKey,实例描绘注册表中的子项和值的基本存储机制。所有的项都是只读的,因为注册表依赖于它们的存在。由,Registry,公开的成员如表,10.3,所示,一旦标识了希望在其下存储,/,检索注册表中信息的根项后,可以使用,RegistryKey,类添加或移除子项和操作给定项的值。,L1.,注册表,Registry,类型公开,2,个成员方法,如表,10.4,所示。,【,例,EX10_3】,设计一个让用户试用一定次数的,WinForm,程序,如果超过试用的次数,则不允许再试用本软件,这样的程序可以通过将软件的试用次数写入注册表来实现。,设计步骤:,(,1,)新建,WinForm,项目,新建,WinForm,项目并命名为“,EX10_3,”。,(,2,)添加控件并设置属性,在,Form1,的设计视图中将此窗体调整到适当的大小并将 “,Text,”属性设为“读写注册表”。,L1.,注册表,(,3,)添加命名空间,因为要读写注册表,所有要添加命名空间:,using Microsoft.Win32;,(,4,)添加事件及其代码,切换到设计视图,双击窗体,添加代码,,代码如下所示,。,(,5,)运行程序,按,【Ctrl+F5】,快捷键运行程序,当第一次运行程序时在注册表“,HKEY_LOCAL_MACHINESOFTWARE,”中新建了“,yan,”键并设置值项为“,0,”,弹出如图,10.14,的对话框,每次运行程序都会提示使用次数,当使用了,30,次时弹出如图,10.15,所示的对话框。,图,10.14,提示使用次数图,10.15,警告使用次数已到,L1.,注册表,使用次数保存在注册表的位置如图,10.16,所示。,图,10.16,使用次数保存的位置,返回,L10.4,修改,Program,类,L1. API,函数,下面是一个调用,API,函数的例子:,Dllimport(kernel32.dll, entrypoint=movefile, setlasterror=true,charset=charset.unicode,exactspelling=true,callingconvention=callingconvention.stdcall),public static extern bool movefile(string src, string dst);,说明,:,(,1,),DllImport,只能放置在方法声明上。,(,2,),DllImport,具有单个定位参数:指定包含被导入方法的,dll,名称的,dllName,参数。,L1. API,函数,(,3,),DllImport,具有五个命名参数:,CallingConvention,参数指示入口点的调用约定。如果未指定,CallingConvention,,则使用默认值,CallingConvention.Winapi,。,CharSet,参数指示用在入口点中的字符集。如果未指定,CharSet,,则使用默认值,CharSet.Auto,。,EntryPoint,参数给出,dll,中入口点的名称。如果未指定,EntryPoint,,则使用方法本身的名称。在,C#,中,可以在,entrypoint,域通过名字和序号声明一个动态链接库函数,如果在方法定义中使用的函数名与,dll,入口点相同,不需要在,entrypoint,域显示声明函数。否则必须使用下列属性格式指示一个名字和序号。,Dllimport(dllname, entrypoint=functionname,Dllimport(dllname, entrypoint=#123 /,值得注意的是,必须在数字序号前加“,#,”,ExactSpelling,参数指示,EntryPoint,是否必须与指示的入口点的拼写完全匹配。如果未指定,ExactSpelling,,则使用默认值,false,。,PreserveSig,参数指示方法的签名应当被保留还是被转换。当签名被转换时,它被转换为一个具有,HRESULT,返回值和该返回值的一个名为,retval,的附加输出参数的签名。如果未指定,PreserveSig,,则使用默认值,true,。,SetLastError,参数指示方法是否保留,Win32,上一错误,。如果未指定,SetLastError,,则使用默认值,false,。,L1. API,函数,(,4,)它是一次性属性类。,(,5,)此外,用,DllImport,属性修饰的方法必须具有,extern,修饰符。,下面是一个用,msgbox,替换,messagebox,名字的例子:,using system.runtime.interopservices;,public class win32,dllimport(user32.dll, entrypoint=messagebox,public static extern int msgbox(int hwnd, string text, string caption, uint type);,L1. API,函数,【,例,EX10_4】,设计,WinForm,程序调用系统,API,函数读取内存使用情况。,设计步骤:,1.,新建,WinForm,项目,新建,WinForm,项目并命名为“,EX10_4,”。,2.,添加控件并设置属性,在,Form1,的设计视图中将此窗体调整到适当的大小并将 “,Text,”属性设为“调用系统,API,函数”。从工具箱中拖放,1,个,GroupBox,和,7,个,Label,控件到窗体中,如图,10.17,布局控件。,groupBox,的,Text,属性值设置为“内存使用情况”。,3.,添加命名空间,因为要调用系统,API,函数,所有要添加命名空间:,using System.Runtime.InteropServices;,L1. API,函数,4.,添加事件及代码,因为要读取系统内存使用信息,所以要调用,API,函数“,GlobalMemoryStatus,”,在这里定义内存的信息结构“,MEMORY_INFO,”用于存储内存信息。切换到设计视图,双击窗体,添加代码,,代码如下所示,。,5.,运行程序,按,【Ctrl+F5】,快捷键运行程序,结果如图,10.17,所示。,图,10.17,内存使用情况,返回,
展开阅读全文
相关资源
正为您匹配相似的精品文档
相关搜索

最新文档


当前位置:首页 > 图纸专区 > 小学资料


copyright@ 2023-2025  zhuangpeitu.com 装配图网版权所有   联系电话:18123376007

备案号:ICP2024067431-1 川公网安备51140202000466号


本站为文档C2C交易模式,即用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。装配图网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知装配图网,我们立即给予删除!