2006年08月23日

一、什么是注册表

        注册表是2000/XP操作系统、硬件设备以及客户应用程序得以正常运行和保存设置的核心“数据库”,也可以说是一个非常巨大的树状分层结构的数据库系统。
        注册表记录了用户安装在计算机上的软件和每个程序的相互关联信息,它包括了计算机的硬件配置,包括自动配置的即插即用的设备和已有的各种设备说明、状态属性以及各种状态信息和数据
        利用一个功能强大的注册表数据库来统一集中地管理系统硬件设施、软件配置等信息,从而方便了管理,增强了系统的稳定性。

二、注册表的功能

        刚才我们看到了,注册表中记录了用户安装在计算机上的软件和每个程序的相关信息,通过它可以控制硬件、软件、用户环境和操作系统界面的数据信息文件。
        相关知识:注册表文件的数据信息保存在system.dat和user.dat中、 利用regedit.exe程序能够存取注册表文件(其实大家可能也知道regedit32.exe,这两个程序是一样的)

三、编辑器说明:
   别说你不知道怎么进注册表啊(哈,在运行里键入regedit就可以了)
   根键:这个称为HKEY…………,某一项的句柄
   项:附加的文件夹和一个或多个值
   子项:在某一个项(父项)下面出现的项(子项)
   值项:带有一个名称和一个值的有序值,每个项都可包括任何数量的值项,值项由三个部分组成:名称、数据类型和数据。
说明:
1、名称:不包括反斜线的字符、数字、代表符和空格的任意组合。同一键中不可有相同的名称
2、数据类型:包括字符串、二进制和双字节等
3、数据:值项的具体值,它的大小可以占用64KB

第二课  总体结构分析

注册表包括以下5个根键

1.HKEY_CLASSES_ROOT
说明:该根键包括启动应用程序所需的全部信息,包括扩展名,应用程序与文档之间的关系,驱动程序名,DDE和OLE信息,类ID编号和应用程序与文档的图标等。

2.HKEY_CURRENT_USER
说明:该根键包括当前登录用户的配置信息,包括环境变量,个人程序以及桌面设置等

3.HKEY_LOCAL_MACHINE
说明:该根键包括本地计算机的系统信息,包括硬件和操作系统信息,安全数据和计算机专用的各类软件设置信息

4.HKEY_USERS
说明:该根键包括计算机的所有用户使用的配置数据,这些数据只有在用户登录系统时才能访问。这些信息告诉系统当前用户使用的图标,激活的程序组,开始菜单的内容以及颜色,字体

5.HKEY_CURRENT_CONFIG
说明:该根键包括当前硬件的配置信息,其中的信息是从HKEY_LOCAL_MACHINE中映射出来的。

第三课   HKEY_CLASSES_ROOT

    我们知道,在这一个根键中记录的是WINDOWS操作系统中所有数据文件的信息内容,主要记录了不同文件的文件扩展名和与之相对应的应用程序。这就是为什么我们双击某一个文档的时候,可以由系统自动调出应用程序的所在了。
    这个根键的子键当大家展开时发现是非常多的,它主要分为两种:一是已经注册的各类文件的扩展名;一是各种文件类型的有关信息。
      下面我们以AVIFILE举例说明一下其下面的子项的含义:

1、CLSID:分类标识,系统可以用这个类标识来识别相同类型的文件

2、Compressors:它下面有两个子项
       auds:用于设置音频数据压缩程序的类标识
       vids:用于设置视频数据压缩程序的类标识

3、defaultlcon:用于设置默认图标,这个大家可以改一下试试

4、RIFFHandlers:在它的下面有两个类标识
        AVI:用于设置AVI文件的类标识
        WAVE:用于设置WAVE文件的类标识

5、protocol:包括了执行程序和编辑程序的路径和文件名
       StdExecute(stdfileediting)_server:用于指定编辑程序
       StdExecute(stdfileediting)_PackageObjects:用于指定后打开AVI包对象的编辑程序
        StdExecute(stdfileediting)_verb:用于设置编辑程序时的工作状态,其中有0、1、2等状态

6、Shell子项:用于设置视频文件的外壳
     open:用于设置打开AVI文件的程序
     play:用于设置播放命令的程序

7、Shellex:包括了视频文件的外壳扩展

第四课  HKEY_CURRENT_USER

哈哈,这贴我要白捡分了

此根键中保存的信息(当前用户的子项信息)与HKEY_USERS_DEFAULT下面的一模一样的。任何对 HKEY_CURRENT_USER根键中的信息的修改都会导致对HKEY_USERS_DEFAULT中子项的修改。

第五课  HKEY_LOCAL_MACHINE

    此根键中存放的是用来控制系统和软件的设置,由于这些设置是针对那些使用Windows系统的用户而设置的,是一个公共配置信息,所以它与具体的用户没多大关系。

1、HARDWARE子项:该子项包括了系统使用的浮点处理器、串口等信息
       ACPI:存放高级电源管理接口数据
       DEVICEMAP:用于存放设备映射
       DESCRIPTION:存放有关系统信息
       RESOURCEMAP:用于存放资源列表

2、SAM子项:哈哈,这部分被保护了,看不到

3、SECURITY子项:该子项只是为将来的高级功能而预留的

4、SOFTWARE子项:该子项中保留的是所有已安装的32位应用程序的信息,各个程序的控制信息分别安装在相应的子项中,由于不同的计算机安装的应用程序互不相同,因此这个子项下面的子项信息也不完全一样。

5、SYSTEM子项:该子项是启动时所需的信息和修复系统时所需要的信息
      currentcontrol:保存了当前驱动程序控制集中的所有信息

第六课  HKEY_USERS

此根键中保存的是默认用户(default),当前登录用户和软件(software) 的信息,其中DEFAULT子项是其中最重要的,它的配置是针对未来将会被创建的新用户的。新用户根据默认用户的配置信息来生成自己的配置文件,该配置文件包括环境、屏幕和声音等多种信息,其中常用的3项有:

1、AppEvents子项:它包括了各种应用事件的列表
      EventLabels:按字母顺序列表
      Schemes:按事件分类列表

2、Control Panel子项:它包括内容与桌面、光标、键盘和鼠标等设置有关

3、Keyboard layout子项:用于键盘的布局(如语言的加载顺序等)
     Preload:语言的加载顺序
     Substitutes:设置可替换的键盘语言布局
     Toggle:用于选择键盘语言

第七课  HKEY_CURRENT_CONFIG

此根键存放的是当前配置的文件信息。

实际上细心的读者已经发现了,五大根键实际上并不是五个,在以前的时候我发过一个贴子,把这个做了总结,今天我再重新发上来

****************************************
我们都知道用regedit或regedit32都可以打开注册表文件,在XP系统下的时候,这两种方法其实都是一样的,当我们打开注册表后看到了类似资源管理器的东西,这里面都有什么呢?
HKEY_CLASSES_ROOT
HKEY_CURRENT_USER
HKEY_LOCAL_MACHINE
HKEY_USERS
HKEY_CURRENT_CONFIG
    看是五个分支,其实就是HKEY_LOCAL_MACHINE、HKEY_USERS这两个才是真正的注册表键,其它都是从某个分支映射出来的,相当于快捷方式或是别名,这样的话看注册表就简单了许多了,现在说一下每个分支的作用:
HKEY_CLASSES_ROOT:
                 列出当前计算机注册的所有COM服务器和与应用程序相关联的所有文件扩展名。
HKEY_CURRENT_USER:
                 保存着当前登录到由这个注册服务的计算机上的用户配置文件。
HKEY_LOCAL_MACHINE:
                保存操作系统及硬件相关信息的配置单元,它是一个公共的配置信息与具体用户无关,其中关键是两个键值
       SOFTWARE:保存着与这台电脑中安装的应用程序相关的设置。
       SYSTEM:WINDOWS所装载的设备驱动程序以及当WINDOWS启动时所需要的各种参数。
HKEY_USERS:
                 包含当前计算机所有用户配置文件。
HKEY_CURRENT_CONFIG:
                  计算机当前会话中的所有硬件配置信息。

第八课   注册表的基本操作

1、创建项和项值
2、更值项的数据
3、删除项、子项或值项
4、查找项、值项或数据

                 具体操作请看演示

**************************说明*****************
注册表中常用的数据类型有5种:
二进制值(reg_binary):多数硬件信息以二进制数据存储,而以十六进制格式显示在注册表编辑器中
字符串值(reg_sz):包括字符串的注册表键,使用字符串数据类型
双字节值(reg_dword):是32位信息常显示成4个字节。它在出错控制功能上用处极大,其数据一般以十六进制格式显示在注册表编辑器中。
多字符串值(reg_multi_sz):允许将一系列项目作为单独的一个值使用。对于多种网络协议、多个项目、设备列表以及其他类似的列表项目来说,可以使用多字符串值
可扩充字符串值(reg_expand_sz):代表一个可扩展的字符串

第九课  注册表破坏的现象及原因

一、注册表破坏后的常见现象

1、无法启动系统
2、无法运行或正常运行合法的应用程序
3、找不到启动系统或运行应用程序所需的文件
4、没有访问应用程序的权限
5、不能正确安装或装入驱动程序
6、不能进行网络连接
7、注册表条目有错误

二、注册表被破坏的原因

1、应用程序错误:这个出现的时候比较多,因为我们知道应用程序或多或少的时候都有错误,都有可能导致不同的后果;另外在系统中安装过多的软件后,有可能出现彼此之间的冲突。

2、驱动程序不兼容:其实我发现好多出在系统自动安装的驱动程序上,如果你本身有驱动程序盘的话,还是用专业的比较好一些

3、硬件问题:这里面好我问题出现在硬件质量上,比如硬盘或内存质量不过关造成读写错误,或超频或CMOS或病毒等

4、误操作:这个大家不知出现了没有,您的误操作可能会导致注册表出现错误,有的时候甚至会很严重的。

第十课  备份注册表

不用问为什么了吧,以防万一,先备份一份,坏了一恢复,OK了

一、手工备份注册表

大家把以下几个文件直接复制到另一个文件夹就可以了
1、在windows\system32\config下有以下几个文件用以保存系统配置:

    SAM、SYSTEM、SOFTWARE、DEFAULT
2、在Documetents and settings\username文件夹中保存用户配置文件:
    NETUSER·DAT

当然对应的LOG文件应该一块保存

二、注册表导出法导出注册表

1、运行regedit.exe
2、在文件中选择导出命令
3、回答文件名和位置,OK了

三、通过系统备份功能进行备份

1、选择开始—程序—附件—系统工具—备份
2、选择高级模式点下一步
3、选择system state(系统状态),在底下文件名中位置中回答路径及文件名
4、点击开始备份

第十一课  恢复注册表

如果说恢复的前题是备份的话,那么上节课的内容一定要学好了,但也不完全都是,我们来说说怎么恢复注册表吧.

1、重新启动系统恢复注册表
      哈哈,这个简单,一重启就可以修正各种在注册表中出现的错误了,但是以硬盘上的注册表的信息正确为前提的。

2、手工恢复注册表
      什么都别说了,把上节中复制出来的文件再弄回去就OK了。

3、注册表导入法恢复

     首先上节中的导出的文件你要有啊,然后……
     A|  运行regedit.exe文件
     B|  文件中的导入
     C|  选择要导入的注册表文件
     D|  点找开就可以了

4、利用高级启动选项恢复注册表

     A|  重启计算机
     B|  启动时按F8键进入高级选项菜单
     C|  选择最后一次正确的配置。
     D|  回车了,OK

5、通过局域网来恢复注册表
     这个我们一般是指连入局域网的某一计算机(我们假设叫songxiang)的注册表被管理员锁了,但有另一台计算机(我们假设叫B)的注册表可以用,现在我们用B来解除A的锁定。
     A|  进入B的注册表
     B|  选择文件中的连接网络注册表
     C|  在查找位置中输入songxiang
     D|  这时注册表中出现了songxiang计算机的注册表
     E|  修改键值:songxiang\HEKY_USERS\S-1-5-21-823518204-688789844-842925246-500\Software\Microsoft\Windows\CurrentVersion\Policies\System下的disableregistrytools值改为0就可以了。
S-1-5-21-823518204-688789844-842925246-500这一大堆数知道什么意思吗,超级管理员。

5、重新安装系统

第十二课   注册表的优化

一、我们为什么要优化注册表

1、在计算机使用过程中可能经常添加或删除应用程序;在上网时遇到恶意网站,向注册表强行添加信息;
2、原来的应用程序卸载后注册表没删除,启动时出现没找到某某应用程序
3、多余注册表的子项可能造成浪费或降低启动速度

二、手工优化注册表

1、清除多余的DLL文件

       大家找到这个项:HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\ShareDLLs,在这个项下存放的是共享的DLL信息,注意看括号里面的数据,它表示共享文件的数目,如果为0,那么删除掉吧

2、安装卸载应用程序的垃圾信息
      这个主要是一些非法卸载应用程序导致的,我们首先要知道什么程序被非法卸载了,这个很好办,你自己现在正使着的你是知道的,其余的就没用了
注册表位置:HKEY_CURRENT_USER\Software
                        HKEY_LOCAL_MACHINE\Software
     看到没用的就全删了就行了

3、系统安装时产生的无用信息:去掉吧,有可能启动变快呢

A|  删除多余时区(我是只留北京时区)
     位置:HKEY_LOCAL_MACHINE\Software\Microsoft\WindowsNT\CurrentVersion\Time Zones
     怎么样,很多吧,如果你只要北京时区的话,那么除了China Standard Time,其余的都删了吧

B|   清除国家列表(我只留中华人民共和国)
      位置:HKEY_LOCAL_MACHINE\Software\Microsoft\Windows\CurrentVersion\Telephony\Country List
       保留86号文件夹,其余删

C|  清除多余的语言代码(我只保留英语—0409和中文—0804)
      位置:HKEY_LOCAL_MACHINE\SYSTEM\CurrnetControlSet\Control\Nls\Locale
     没用的删了吧

D|   删除多余的键盘布局:
    位置:HKEY_LOCAL_MACHINE\SYSTEM\CurrnetControlSet\Control\Keyboard Layouts
    你可以把每个键值都打开看看,不需要的输入法删除即可

E|  删除失效的文件关联
     位置:HKEY_CLASSES_ROOT主键可分为两部分:第一部分用来定义文件类型;第二部分与第一部分一一对应,用于记录打开文件的应用程序。
一般,在打开第二部分的可疑子项后,若该键下的COMMAND下没有内容,就可以删掉了

**********************************************
在以上我只给大家举了一些可优化的位置,其实可优化的位置也很多,比如多余的配色方案和运行中的记录啊等等,这个我就不再多讲了。
其实我们可以通过一些优化软件来进行系统的优化,比如优化大师或超级兔子等,不过不好意思,本人没有用过,所以就不再给大家讲了。
*************************************************

第十三课  个性化设置(桌面设置一)

在以后的课程中,每次我会给大家找出5个实例来进行练习,具体分析呢,希望自己多想一想,不要出现为了例子而做例子的情况,好了现在开始

1、去掉桌面快捷方式上的小键头

位置:HKEY_CLASSES_ROOT\LNKFILE
项    :IsShortcut
操作:删除此项

2、隐藏桌面上的所有图标

位置:HKEY_CURRENT_USER\Software\Windows\CurrentVersion\Policies\Explorer
新建:NoDesktop(双字节)
操作:值设为1

3、修改桌面上“回收站”的名字及图标

位置:HKEY_LOCAL_MACHINE\SOFTWARE\Classes\CLSID\{645FF040-5081-101B-9F08-00AA002F954E}(这个大家也可直接查找“回收站”
修改:(默认)一项随便换个名字就可以了
然后展开此项,选择DEfaultIcon
这时大家看到有3个子项,意思吗一看就明白了
如果想改变图标时,只需将路径和文件名改了即可,比如改为"d:\tt.ico"

4 、去掉桌面上的网上邻居

位置:HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Policies\Explorer
新建:NoNetHood(双字节)
值:   1

5、在桌面上显示系统版本号

位置:HKEY_CURRENT_USER\Control Panel\Desktop
项:PaintDesktopVersion
修改:将值改为1

***********************************************
以上例子在练习过程中需要重启计算机,当然如果想恢复只需要把改的改回来,新建的删掉也就行了

第十四课  个性化设置(桌面设置二)

6、改变窗口按钮字体的颜色

位置:HKEY_CURRENT_USER\Control Pannel\Colors
键值:ButtonText
修改:大家知道PS吧,比如改为红么(255,0,0)

7、屏蔽桌面上的IE图标

位置:HKEY_CURRENT_USER\Software\Windows\CurrentVersion\Policies\Explorer
新建值项:NoInternetIcon
修改:1

8、禁止更改桌面墙纸

位置:HKEY_CURRENT_USER\Software\Windows\CurrentVersion\Policies\Explorer
新建项值:NoChangingWallPaper(双字节)
修改:1

9、设置登录背景

位置:HKEY_USERS\DEFAULT\ControlPanel\Desktop
键值:WallPaper
修改:把背景图片一写就OK了(比如C:\aa.bmp)

***********************以上需重启计算机*********************

10、更改:我的电脑的提示信息

位置:HKEY_LOCAL_MACHINE\SOFTWARE\Classes\CLSID\{20D04FE0-3AEA-1069-A2D8-08002B30309D}
键值:InfoTip
修改:哈,随便打吧,我打成了“这是我的电脑噢"

第十五课  个性化设置(桌面设置三)

11、更改:回收站的提示信息

位置:HKEY_LOCAL_MACHINE\SOFTWARE\Classes\CLSID\{645FF040-5081-101B-9F08-00AA002F954E}
键值:InfoTip
修改:跟上面一样,自己改吧

12、更改IE的提示信息

位置:HKEY_LOCAL_MACHINE\SOFTWARE\Classes\CLSID\{871C5380-42A0-1069-A2EA-08002B30309D}
键值:InfoTip
修改:同上

13、更改网上邻居的提示信息

位置:HKEY_LOCAL_MACHINE\SOFTWARE\Classes\CLSID\{208D2C60-3AEA-1069-A2D7-08002B30309D}
键值:InfoTip
修改:同上

14、更改我的文档的提示信息

位置:HKEY_LOCAL_MACHINE\SOFTWARE\Classes\CLSID\{450D8FBA-AD25-11D0-98A8-0800361B1103}
键值:InfoTip
修改:同上

15、更改任务计划提示信息

位置:HKEY_LOCAL_MACHINE\SOFTWARE\Classes\CLSID\{D6277990-4C6A-11CF-8D87-00AA0060F5BF}
键值:InfoTip
修改:同上

第十六课  个性化设置(桌面设置四)

16、改变桌面图标顺序

位置:HKEY_LOCAL_MACHINE\SOFTWARE\Classes\CLSID\{450D8FBA-AD25-11D0-98A8-0800361B1103}
键值:SortOrderIndex
修改:48(我的文档在第一位)
            54(我的电脑在第一位)

17、禁止帮助提示信息(需重启)

位置:HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Explorer\Advanced
键值:showinfotip
修改:0

18、用真彩色显示图标(需重启)

位置:HKEY_CURRENT_USER\Control Panel\Desktop\WindowMetrics
键值:Shell Icon BPP
修改:32

19、更改图标显示尺寸(需重启)

位置:HKEY_CURRENT_USER\Control Panel\Desktop\WindowMetrics
键值:Shell Icon SIZE
修改:在显示器分辨率为1024*768时可改为:48
            在显示器分辨率为1600*1200时可改为:64

第十七课  个性化设置(修改开始菜单和任务栏一)

20、自动清除“文档”菜单中的历史记录(需重启)

位置:HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Policies\Explorer
新建:CleanReccentDocsOn-Exit             (REG-DWORD)
值:1

21、禁止“文档”的历史记录(需重启)

位置:HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Policies\Explorer
新建:NoReccentDocsHistory             (REG-DWORD)
值:1

22、去掉开始菜单的“文档”项(需重启)

位置:HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Policies\Explorer
新建:NoReccentDocsMenu             (REG-DWORD)
值:1

23、去掉开始菜单的“查找”项(需重启)

位置:HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Policies\Explorer
新建:NoFind             (REG-DWORD)
值:1

24、去掉开始菜单的“运行”项(需重启)

位置:HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Policies\Explorer
新建:NoRun             (REG-DWORD)
值:1

第十八课  个性化设置(修改开始菜单和任务栏二)

25、禁止用户更改“开始”菜单(需重启)

位置:HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Policies\Explorer
新建:NoChangeStartMenu             (REG-DWORD)
值:1

26、禁止显示开始菜单中的windows update项(需重启)

位置:HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Policies\Explorer
新建:NoWindowsUpdate             (REG-DWORD)
值:1

27、屏蔽开始菜单中的“关闭计算机”项(需重启)

位置:HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Policies\Explorer
新建:NoClose             (REG-DWORD)
值:1

28、加快“开始”菜单与“任务栏”的速度

位置:HKEY_CURRENT_USER\Control Panel\Desktop
键值:MenuShowDelay
值:

29、为回收站的右键菜单增加“删除”和“重命名”

位置:HKEY_CLASSES_ROOT\CLSID\{645FF040-5081-101B-9F08-00AA002F954E}\ShellFolder
键值:Attributes
值:70 01 00 20

2006年08月10日

曾经有一位老师在课堂上给我们摆过一次龙门阵,他说:

“作为一个学法律的人,在遇到法律问题的时候,一定要表现出你的专业水准,不能含含混混。怎么说呢,例如。。。。”他接着举了个例子。

“例如我们在火车站站前广场上,一不小心扔了一张纸。这个时候会有一个带红袖标的老大娘走上来,要你交10元罚款。一个没学法律的人要么迅速但无奈的交钱,要么大声嚷嚷想不交。这都不是一个学法律的人的做法。那么一个学法律的人应该怎么做呢?

首先,我们要弄清楚老大娘要你交罚款是什么行为?性质是什么?我们说,这是一种行政处罚行为。行政处罚行为应该遵守《中华人民共和国行政处罚法》的规定。那就让我们严格的按照《处罚法》来走程序吧。

首先,不能因为一个人带着红袖标你就交纳罚款,带红袖标不能证明该人的身份,你要先要求老大娘出示合法的工作证件,在拿过工作证件后,你要仔细审核。审查过程建议1分钟。

然后,你应该要求老大娘告知你作出罚款决定的事实是什么。然后,你在要求她告知你,她是凭什么规定来做出处罚的,具体是哪个文件的哪一条。最后,你再要求她告知你,你现在享有什么权利(这些权利包括了行政处罚法上的申辩权,举报权,申请行政复议权等)。以上任意一环节老大娘不能告知的话,你就严肃的恫吓她:您如果不能告知我的话,那么就违反了行政处罚法的法定程序,而根据《处罚法》第55条的规定,可以对您–这个直接责任人员–进行行政处罚。罚款人反而会被罚。告知过程建议5分钟以上。

估计这时候老大娘会被你的气势震慑而放弃罚款。但如果真的有某个大娘能够流利的回答你以上的所有问题的话,那么你接下来就要乖乖的交罚款吗?不是的。根据法律规定,你这时候有陈述和申辩的权利,所谓陈述,是陈述客观事实。所谓申辩,是说出该处罚决定不当的理由。而行政机关有充分听取你的意见的义务。所以,你还等什么呢?赶快发挥你的辩才吧。

你应该陈述你是否扔纸了,你是以什么物理动作扔纸的。你为什么扔纸,你扔纸是否具有一些阻却违法的原因,譬如正当防卫,自力救济,紧急避险等。

你应该申辩你是否是未14周岁,可以不予处罚,或者未满18周岁,可以从轻或减轻处罚。申辩你在违法后已经采取了主动消除或者减轻违法行为危害后果的行为,或者受他人胁迫可以减轻处罚。申辩你违法行为轻微并及时纠正,没有造成危害后果的,应该不予处罚等等。

总之,绞尽脑汁,挖空心思的不停说话,不停的找理由,让老大娘尽到充分听取你的意见的义务。陈述申辩过程建议:越长越好,直到大娘听烦,取消罚款。

当然,你有可能遇到了一个绝世老大娘。她耐心安静的听取了你的所有意见,直到你再也说不动了为止,并仍然要求你交纳罚款。这时你可以以自己经济困难为由,要求暂缓或者分期缴纳这10元罚款。不过估计这个不会被批准,但至少为你再争取到10分钟以上的时间。

最后,你的一切权利救济手段都穷尽了,在法律上说,你以无回旋余地了,你已经充分展现了一个法律人对法律的驾御能力了,你可以交罚款了。但在交纳之后,你要认真审核老大娘出具的单据。核对处罚单位的公章,单据的格式等,以便尽到一个光荣的合法公民的义务,保障这笔罚款流入国库。如果发现有违法(例如没有公章等)的地方,你要当场翻脸,威胁予以检举,绝地反击,胜的漂亮!

当然,你也可以先和大娘商量,少交罚款,但不开票。如果大娘同意,你立刻指责她违反法律,要求举报。但此行为兵行险着,且属低级手段,作为一个有格调的法律人,建议不采用。

总之,一个法律人要充分享受并争取到法律给你权利。当然,大家不会为了10元钱耗费上大半天的时间,但你要知道怎么玩法律,要知道怎么玩的才叫酷。”

毕业之后,我接触实务的机会不多,但对实务却一直留意着。曾经有一次看过一个报道,说是昆明出现了女体盛,把女孩子的身体当作容器放置食物,然后由食客取食。这是从日本过来的一种“饮食文化”,确实比较恶心,应该取缔。后来果真也被取缔了,但依据乃是当地的卫生部门的两点理由:一两位模特作为工作人员,不能提供健康证;二在工作时未能穿戴整齐,这都违反了《卫生食品法》的规定。

有人认为卫生部门做出的这个处罚依据是搞笑的。女体盛明明是违法道德的行为,侮辱女性,公然挑战社会道德底线,用什么理由不行,偏偏搞这个出来,这不是政府执法无力的明显表现吗?

但我却为这个处罚的出台拍手叫好。因为某个经营行为违反道德而予以取缔,是法律的泛道德倾向。而法律的泛道德化恰恰是现代法律的大忌。因为法律一旦去强制执行某种道德标准的时候,往往就是法律专制的前兆。但是社会的道德又需要法律去支撑,而且执法者也应该有意识的去维护道德底线。这个矛盾怎么解决,往往看出执法者的素质高下。

根据《卫生食品法》的规定取缔女体盛,在法律有明确规定的框架里维护了道德标准,依据的理由看似与道德无关,但却巧妙的在效果上起到了作用,真正是高手所为,技惊四座!颇有美国宪法史上的马伯里诉麦迪逊一案的风采。

所以要玩,咱就玩法律

2006年07月08日

你在孤独、悲伤的日子,请悄悄地念一念我的名字,并且说:这世上有人在怀念我,我活在一个人的心里。(普希金)

你尽可注视别人的脸,但请信任我这颗心。(普希金)

 

“你最可爱”,我说时来不及思索,而思索之后,还是这样说。(普希金)

 

文明可以改变爱情的方式,却永远不能扼杀爱情。(林语堂)

 

未经失恋,不懂爱情;未经失意,不懂人生。(周国平)

 

爱情不可能长期地隐藏,也不可能长期地假装。(拉罗什福科)
  

当我们根据爱的主要效果来判断爱时,它更像是恨而不是爱。(拉罗什福科)

 

爱情和火焰一样,没有不断的运动就不能继续存在,一旦它停止希望和害怕,它的生命也就停止了。(拉罗什福科)

 

在爱情中有两种坚贞不渝:一种是由于我们不断地在我们的爱人那里发现可爱的新特点;另一种则不过是由于我们想获得一种坚贞不渝的名声。(拉罗什福科)

 

当一个女子具有全部的爱情和德性时,她是需要同情的! (拉罗什福科)

 

当我们爱得太厉害的时候,确认别人是否停止了爱是不容易的。 (拉罗什福科)

 

既然在爱或停止爱方面决不是自由的,情人们就没有权利相互抱怨对方的变心和轻浮。(拉罗什福科)

 

当人们厌倦爱时,他们很容易忍受别人的不忠,以解除自己忠诚的义务。(拉罗什福科)

 

如果不是怕别人反感,女人决不会保持完整的严肃。(拉罗什福科)

 

关关雎鸠,在河之洲;窈窕淑女,君子好逑。(《诗经》)

 

曾经沧海难为水,除却巫山不是云。(李商隐)

 

身无彩凤双飞翼,心有灵犀一点通。(李商隐)

 

无可奈何花落去,似曾相识燕归来。(晏殊)

 

月上柳梢头,人约黄昏后。(欧阳修)

 

衣带渐宽终不悔,为伊消得人憔悴。(柳永)

 

但愿人长久,千里共婵娟。(苏轼)

 

十年生死两茫茫,不思量,自难忘。(苏轼)

 

天涯何处无芳草,多情却被无情恼。(苏轼)

 

两情若是长久时,又岂在朝朝暮暮。(秦观)

 

无意苦争春,一任群芳妒,零落成泥碾作尘,只有香如故。(陆游)

 

花自飘零水自流,一种相思,两处闲愁,此情无计可消除,才下眉头,却上心头。(李清照)

 

莫道不消魂,帘卷西风,人比黄花瘦。(李清照)

 

寻寻觅觅,冷冷清清,凄凄惨惨戚戚。(李清照)

 

众里寻他千百度,蓦然回首,那人却在灯火阑珊处。(辛弃疾)

 

往事依稀浑似梦,都随风雨到心头。(巴金)

 

不能够单单为着那一对眼睛,就放弃一切。(巴金)

 

待到山花烂漫时,她在丛中笑。(毛泽东)

 

女人,你的名字是弱者。(莎士比亚)

 

爱情的野心使人倍受痛苦。(莎士比亚)

 

境由爱造,还是爱逐境迁。(莎士比亚)

 

未得之前是请求,既得之后是命令。(莎士比亚)

 

一个使性子的女人,就象翻腾的浊水,纵使口干舌燥,也不愿啜饮一口。(莎士比亚)

 

你以为我贫穷、相貌平平就没有感情吗?我向你起誓:如果上帝赐予我财富和美貌,我会让你难于离开我,就象我现在难于离开你一样。上帝没有这样安排。但我们的精神是平等的。就如同你我走过坟墓,平等的站在上帝面前。(《简爱》)

 

人心和岩石一样,也可以有被水滴穿的孔。(《悲惨世界》)

 

少女的同情和温柔,真有磁石般的力量。(《欧也妮葛朗台》)

 

恋爱是我们第二次脱胎换骨。(《欧也妮葛朗台》)

 

不爱我们的女人犹如失踪者,尽管我们知道再无任何希望,我们仍然期待。等待稍稍一点动静,稍稍一点声响。(《追忆似水年华》)

 

幸福的家庭都相似,不幸的家庭各不同。(《安娜。卡列妮娜》)

 

女人晚熟的爱情,象道旁迷人的野花。(《静静的顿河》)

 

你一有爱,就会想为对方做些什么。(《永别了,武器》)

 

相爱的人不该争吵,因为他们只有两个,与他们作对的是整个世界。(《永别了,武器》)

 

男人可以把世界上无论什么都给女人,只是不容女人有见识。(《飘》)

 

内心的热诚和真纯的愿望,往往是不可以实现的。(《甘地自传》)

 

饱后思味,则浓淡之境都消;色后思淫,则男女之见尽绝。(《菜根谭》)

 

岁月本长,而忙者自促;天地本宽,而鄙者自隘;风花雪月本闲,而扰攘者自冗。(《菜根谭》)

 

竹影扫阶尘不动,月轮穿沼水无痕。(《菜根谭》)

 

异性友情的发展,就象双曲线,无限接近但永不触及。(卢梭)

 

爱慕一个女子,通常爱她现在的样子;爱慕一个少年,通常着眼于他未来的样子。(卢梭)

 

对我所爱的人保持信赖和沉默。(卢梭)

 

希望,不是要比回忆好一些吗?(巴尔扎克)

 

丧失未来的幸福,比丧失已有的幸福更痛苦。(巴尔扎克)

 

女子人前端庄,丈夫面前妖冶,是夫妻关系长期恩爱的秘诀。(巴尔扎克)

 

爱情越热烈、越真诚,就越要含蓄。(巴尔扎克)

 

晚秋季节还能找到春天和夏天错过的鲜花吗?(巴尔扎克)

 

我们恋爱可能不感到快乐,也可能快乐而并非恋爱。(巴尔扎克)

 

爱情抵抗不住繁琐的家务,必须至少有一方品质极坚强。(巴尔扎克)

 

一有人反对,爱情会变得象禁果一样更有价值。(巴尔扎克)

 

能使所爱的人快乐,便是得了报酬。(巴尔扎克)

 

爱情和工作都能使人对外界漠不关心。(巴尔扎克)

 

人们不能象拔牙那样的从心中拔去爱情。(巴尔扎克)

 

一个年轻美貌的女人决不肯让男人对她存有唾手可得之心,把恋慕之情硬压在心头而假作端庄的举动,比最疯狂的情话来得意义更深长。(巴尔扎克)

吸血鬼的雏形

吸血鬼,在英文中为vampire,意思是僵尸、吸取血液的恶魔的意思。作为一个和人类关系密切(吸血鬼通常是隐藏在人群中间的)的恶魔形象,它在开始的几百年的传说里一直带有离奇而恐怖迷幻的色彩。近百年来,随着浪漫主义文学和影视兴起,带有神秘唯美的吸血鬼形象更成为了浓郁而坚持的文化情节——一个从宗教走向感性膜拜的奇特的夜之魔鬼。

血的用途

血,一直被认为是生命力的象征。人在长期的生息过程中了解到血决定着生命的延续,大量地失血会带来死亡。在基督教风行前的日子里,鲜血直接和冥界联系在一起。象希腊神话中幽灵之神赫卡忒(Heate)的侍女半人鸟的恩普萨(Empusa),和为子报仇的拉弥阿(Lamia)等。另外亚当的第一个妻子,女妖利利特(Lilith)在被亚当抛弃后也成为了嗜血的鬼王。
它们与我们现在所说的传统上的吸血鬼来比,应该是异种神,而不是吸血鬼一般的僵尸。但从此可看出人类对和血有关的异灵从很早前就有着种种想象和传说。
人类在想象里杜撰了无数对血有很强烈渴望甚至以血为生的精灵,这样的故事已经持续了几千年。而吸血鬼则是在欧洲文明的抚育下诞生的,在欧洲盛行的犹太人信仰基督教传统,是直接导致吸血迷信产生和蔓延的最大温床。

圣经中的语言

希伯来人对血的崇拜和恐惧形成了一种难耐的情结,一方面血是灵魂和生命的象征,而另一点上他们又把血认为是灾难不祥的标记。就象受蛇诱惑的夏娃,她的后裔从此有了月经,那被认为不洁净的伤口,所以,基督教认为,血同样代表着罪恶。
我对以色列的孩子说,你们不可吃任何活物的血,因为那就是它们的生命,否则你们就会受到惩罚!(摩西律法,《旧约·利未记》)
中世纪的基督教世界里,血仍然被赋予超自然的能力,同时它得到了鬼神学的辅助和渲染,于是吸血鬼迷信正式出现登场——这迷信本身有很大的基督教煽动性,在当时甚至一些巫师和医生认为血有赎罪功能,同时出于对圣母玛丽亚的崇拜,他们开出以处女的纯洁之血作为最好的药方,来治疗和延缓衰老。

吸血鬼和鬼魂的区别

极端的唯心主义强调“逃离身体”,主张人死后生命依然存在,而身体只是物质的躯壳,灵魂则会永生,以等待末日审判的复活。而自杀、被开除教籍等所谓被神驱逐和放弃的人,其灵魂是无法得救的,按照基督教的说法,这些灵魂就是“受难的灵魂”,不属于今生也不属于来世。
鬼魂和吸血鬼的区别就来自于此,鬼魂是不属于肉体躯壳的精神物质,而吸血鬼是附体的幽灵,是被从遗弃的世界里出来的恶灵所占据的身体。故此是属于邪恶而有害的异灵!

 

最初的吸血鬼现象

14世纪时,吸血鬼迷信真正形成了风气,其主要流传地在中部欧洲的东普鲁士(Prusse orientale)、西里西亚(silesie)和波希米亚(Boneme)范围内。
当时欧洲瘟疫流行,这致死的传染病使人们以恐惧的心理将病者在尚未确定生死前就仓促掩埋。这些人临终时痛苦地想挣扎出来,在其过程中肢体流血残损,所以往往看见所谓尸体的活动、流血甚至自我吞食。这在被死亡阴影笼罩的欧洲,借助人们恐慌的心理而快速传播蔓延,由此对僵尸的迷信得到进一步加强。

与吸血鬼密不可分的三个历史人物 1440年,法国的德·莱斯(Gilles de Rais)男爵在英法百年战争中曾是圣女贞德的战友,当他退隐于马什库勒(Machecoul)后,迷恋上炼金术,希望在血里发现点金石,而把三百个儿童放血折磨至死。
瓦拉几亚公国(Valachie)的督军弗拉德四世(Vlad IV)的绰号是“德考”(Dracula),我们可以发现这名字就是我们所熟悉的吸血鬼伯爵最常用的姓名,德考的本意是魔鬼或龙的别称。他拜血作乐的方法更夺取了千万人的生命。

我们最熟悉的,莫过于17世纪匈牙利巴托里(Erzsebet Bathory)伯爵夫人的血腥事件了。经过证明,这个向仆人学习妖术的美丽女人在自己的塞伊特(Csejthe)城堡里虐待杀害了300多名少女,并快乐地喝她们的血,甚至把血装满浴缸沐浴,用这来保持自己永远的青春美丽。
不难看出,以上三个都是在贵族阶层的人物,并且拥有金钱、地位及相当的教养气质,这就是在若干年后以其为蓝本的吸血鬼文学作品出现时,对吸血鬼美丽、优雅、气质、诱惑和强大的雏形、并且充满浓郁的情欲色彩。也在这一外衣下,更激发了人们对于吸血鬼迷信这一古老的形式保持旺盛精力的原因之一。

迷信风气的盛行

18世纪,理性在启蒙运动下得到了胜利,在这一时期各种迷信严重受挫。相反的,吸血鬼迷信风潮在这段时间里却得到空前的发展,而且俨然成为了社会现象,这现象引起了宗教方面的关注。
不少关于吸血鬼的阐述的学术得到出版,并且在另一方面,理性一派对类似的文章大加批判,从而成为论著间漫长激烈地争论。在这情况下,教会不可能保持缄默,塞农(Senones)修道院的院长卡尔梅(Dom Augustin Calrnet)出了一本《论匈牙利、摩尔达维亚等地的附体鬼魂、被开除教籍人、吸血鬼及活尸》的论著。于1746年在巴黎出版,他的本意是驳斥吸血鬼迷信,但书中列举大量有关的例子,引起了人们的争论。
这种论著交战的结果只有两个:第一这类迷信过去在很多地区属于道听途说,而现在则广为人知;第二是所有人都接受了吸血鬼这个词,使“Vampire”得以系统地固定了下来。它的另几种写法是“Vampyr”“Vampyre”“wampire”以及拉丁文里的“Vampirus”。

另外,从当时开始,吸血鬼三个特征也普遍为人所接受:它是一个附体的鬼魂,而不是虚无的幽灵,也不是魔鬼;吸血鬼是在夜里从坟墓、棺材里出来吸食或人的血液得以延续生命的;吸血鬼袭击过的人,死后也会成为吸血鬼。

 

吸血鬼不同的能力和特征

没有影子:属于日尔曼文化的某些地区,人们相信吸血鬼是没有影子的,影子和映像都是灵魂的象征,因而吸血鬼没有灵魂就没有影子和在镜子里的映像。

长而尖利的犬牙:吸血鬼通常通过牙齿切入被害人脖子来吸取鲜血,有些在平时状态能隐藏该特征——这已经变成了吸血鬼最主要的特征之一。应该说这属于文学家的想象,因为早期吸血鬼并不如此,它们不用接触到人,可以通过皮肤的毛孔中来吸血。

能够变身为蝙蝠:目前吸血鬼总是和蝙蝠联系在一起,而且它们的周围通常有蝙蝠围绕,自身也能变成吸血蝙蝠。事实上吸血鬼能变成很多动物,也能变成雾气等非生命体。

以坟墓和棺材作为栖息场所:在白昼吸血鬼往往在棺材或坟墓里休憩,以尸体方式存在。只有在阳光消失后才活动。这是普遍的没有异议的吸血鬼特征,人们认为吸血鬼惧怕阳光。

其他特征:基于现代在艺术领域对吸血鬼的加工美化,它们还具备以下特征。

面貌英俊,体型修长高大,女的则妖娆美丽,它们往往有自己的城堡,而且本身是贵族。这是在中世纪几个历史人物为原形的基础上所衍生的。着黑礼服,并有外黑内红或全黑的披风和斗篷、皮肤惨白,嘴唇红艳,眼睛多为红色且发结很高。手指能变为坚硬的爪子。身体冰冷。有极快的速度,能飞行——有些吸血鬼通晓魔法,并具有不可思议的灵力。力量极大,除了致命弱点外不怕任何攻击,拥有不死之身。有着很高的智慧。
 

吸血鬼的伤害

早期的吸血鬼是纯粹吸取人血的恶鬼,类似于欧洲传说中的狼人。在中世纪以后,尤其是浪漫主义的兴起,吸血鬼因为其独特的存在方式而带有浓郁的性、情欲方面的色彩。其主要攻击方式为吸血,少数存在食人的现象。作为吸血鬼往往能诱惑异性并在不知觉中夺取对方的生命。

“他笑得很暧昧,把一只手放在我的肩上,然后紧抱我,用另一只手抓住我的胸脯。……
我吓坏了,但奇怪得很,我一点也不想反抗他。我怀疑,这是他向我下的魔咒。上帝啊!怜悯我吧!……
我越来越衰弱无力,几乎昏迷过去。我不知道这状况(吸血)还要持续多久……”

“有时候我觉得有只手,轻轻从我的脸滑到脖子。其他时候则是热情的嘴唇在亲吻我,越是靠近胸脯,就越是吻得长久而热烈,但到胸前就停止了。我心跳加速,呼吸急促到要停止,喉咙发出嘶哑的喘息,接着我感觉脖子被勒住,接着便失去了知觉……

吸血鬼攻击时一般不会让被害人感觉疼痛,在很多吸血鬼作品里被害人(男女都有)很多以微笑幸福的表情成为它的食物。吸血鬼攻击的结果也不同,大致有以下几类:

纯粹吸血,被害人被袭击后一般不会死去,也不会变成吸血鬼,但会因失血而虚弱。此方式的衍生是有时候吸血鬼会将被害人的血液吸干而导致人因为大量失血而死去。

代身吸血:在与前一种方式相同的情况下,被害人还会在死后成为吸血鬼,或者如同病毒传播,被吸血鬼攻击的人会在短时间内变为吸血鬼。有说法说类似而成为的僵尸是比较低级的,缺乏自己智慧,成为单纯的嗜血疯子。

 

对付吸血鬼的方法

消灭吸血鬼的方法最好的莫过于用木桩刺穿它的心脏,在俄罗斯用的是山杨木,因为是用来制作十字架的原料。其他国家多用山楂木,暗示耶稣受难时所戴的荆冠,还有用桃花心木和牧师祝福过的匕首。
罗马尼亚人认为这种方法一定要在拂晓十分进行,并且要一下刺中心脏,否则吸血鬼会复活。
此外用木锤、十字架、圣餐中的饼、阳光、银器等,都是对付吸血鬼的武器。吸血鬼是不可见到剧烈阳光的,否则它们会烧焦成为灰烬。同样让吸血鬼吸食了死体的血液也会让吸血鬼衰弱甚至死去。
有趣的是,有关吸血鬼害怕大蒜的传说非常盛行,而根本上这类传说只流行于罗马尼亚地区,圣水对吸血鬼也有非常好的效果。

成为吸血鬼的方法

一般说来每个凡人在死后都可能成为吸血鬼,尤其是被开除教籍的人、自杀者、暴死者、巫师、早夭的孩子、以及死后没有进行基督教葬礼的人,有些人是注定的,如出生时嘴里有牙齿,或头上有胎膜的人,眼珠颜色极深或极浅,长着红棕的头发,类似出卖耶稣的犹大,或者身上有红斑。吸血鬼本身也可以有后代,并且,上代的种种能力和特性都将被继承。
另一类说法是被吸血鬼袭击,就可以直接成为吸血鬼,并不断地蔓延——当然这些是属于比较低级的僵尸而已。也有通过特殊仪式,即签定所谓的魔鬼契约而将自己转为僵尸的做法。
最完美的一种说法是,吸取吸血鬼的血液,可以将自己变成吸血鬼,拥有强大而奇特能力的魔鬼。

2006年07月03日

论坛中有不少帖子是关于字符集与中文的问题,仔细看了下,讲解的都不甚详细,本人学习MySQL亦仅数日,在此将本人看书心得略表一二,望起抛砖引玉之效。

================================

关于中文问题实际上并没有什么复杂的,请注意如下2个细节:

1)只要是gb2312,gbk,utf8等支持多字节编码的字符集都可以储存汉字,当然,gb2312中的汉字数量远少于gbk,而gb2312,gbk等都可在utf8下编码。因此,要想数据表中能储存中文只需数据表的字符集按需任选一种可存储汉字的既可。

在建立数据表时,若数据库的字符集不支持中文集则在create table 后面加上 character set gb2312/gbk/utf8 任选其一既可,否则新建的表会自动采用与数据库相同的字符集的。
MySQL还有一个很棒的地方,可以为列指定字符集,hoho~~我喜欢

总之,用show create table table_name; 查看确保你的数据表的字符集支持中文存储既可

2)至于前台显示、输入中文的问题,由于本人不会php等(所以也不用客户端软件),因此仅就cmd下的client为例作说明,想来在其他客户端也应是如此配置吧,有不对的地方望指教,有遗漏的望大家补充。

很多帖子中说,需要client的字符集与服务器端字符集、数据库字符集等一致,其实无须这么复杂。

在任何的字符集状态下,我们都可以对可存储中文的数据表插入中文,只需要在所要插入的中文前添加一个introducer表明我要对此中文的编码方式既可,请看:
insert into table_name (column_with_chinese) values( _gbk ‘我要插入的中文’);
这个命令中的_gbk即是一个"character set introducer",它表明后面的 ‘我要插入的中文’将采用gbk编码。请大家注意introducer和函数convert()的区别,这个,留给大家自己查阅资料。
这样,无论在任何字符集下,都可以保证正确无误的插入中文,或者是其他任何字符集的文字。

说到这里,可能大家觉得太烦了,每次都要加一个introducer,那么我们再来看看mysql的设置,看看怎么简化它。
用命令show variables like ‘character\_set\_%’;查看当前字符集设定:
+————————–+——–+
| Variable_name            | Value  |
+————————–+——–+
| character_set_client     | latin1 |
| character_set_connection | latin1 |
| character_set_database   | utf8   |
| character_set_filesystem | binary |
| character_set_results    | latin1 |
| character_set_server     | utf8   |
| character_set_system     | utf8   |
+————————–+——–+
(我这里为了演示故意设置成latin1这种不支持多字节的字符集)

很多人会遇到的错误:Data too long for column ‘XXX’ at row 1,其产生的原因在于character_set_connection的字符集设置,如果我们用了introducer,那么该参数无视;若将此参数改为与数据表中文编码方式相同,如gbk,则我们可省略掉introducer的书写,传递到服务端的字符串将自动以该字符集进行编码。

此时,我们用select命令来查看数据表数据,却发现会出现乱码现象,因此,请大家注意character_set_results这个参数,他表示的是服务器段返回给客户端的结果集所采用的字符集,因此,仅需将此设置成gbk:set character_set_results = gbk; 那么我们就可以正常的查看数据表内的中文内容了。

由此可见出现中文问题最关键的两个参数就是以上这两个,有些则其他参数的含义留给各位自行查阅资料。

若大家觉得单独设置字符集太繁琐,那么最简单的工作就是用set names charset_name;一次性设置客户端的所有字符集,这下可就可以偷懒了。

==============================
不过仍需注意的是,若我们同时处理几个不同字符集的内容,那么,呵呵,introducer还是不可少的阿!
问题又来了:多种不同字符集如何同时显示出来呢?回头再想想

==============================
本人研究mysql时间极其短暂,望请各位不吝指教!

2006年06月23日

最近看到好多人在询问mysql 导入导出的问题,于是就简单的总结一些我的使用经验,供大家参考,有不合理的地方欢迎交流!

一、Mysql 数据的导出

   有的站长经常用一种最直接的办法就是拷贝数据库文件夹的办法,这个方法确实简单,但是不提倡,在跨版本或者跨不同字符集系统是很容易出问题。再说了数据库4.1版本有两种存储数据的方式在配置的时候可选,一种是和以前一样的每个数据库存放在单独的文件夹里,另一种叫什么来着我忘了,这种所有的数据库都放在一个文件里,巨大的一个文件!,所以对于后者就不可以用拷贝的方法了,用什么呢?下面介绍:

   就是mysql 自带的工具 mysqldump ,这个工具十分强大,可以导出数据,并且可以导出不同版本的数据、也可以导出用于其他数据库的数据,太牛了。 这个工具实在命令行、cmd下用的 ,如果你的msyql/bin目录没有配置在系统的环境变量里,就先cd到mysql/bin目录。
   
1、    先介绍简单得导出: mysqldump -u 数据库用户名 -p  数据库名称 [表名] > 导出到文件的路径名

   例如:我要导出 test_db 这个数据库  我的数据库用户为 root 没有密码(没有密码就不用加 -p 了):
            mysqldump -u root test_db > c:\test.sql    这样就可以到处test这个数据库了
           如果我要导出 test 数据库中的user 表  用 ajin 这个用户 密码是 123
           mysqldump -u ajin -p test_db user >c:\test_user_table.sql   回车后提示输入密码就可以了

2、 在导出过程中改变数据库默认的字符集
        
   例如: 我要导出 test_db 这个数据库  转换编码为 utf8 (utf8 我最常用的)
  
      mysqldump -u ajin -p –default-character-set=utf8  test_db >c:\test.sql    就可以了  
     转换成其他字符只需替换 utf8 就可以了

3、导出不同版本数据或者导出给数据库用的数据

  例如:我的数据库 Mysql 4.1 的 我要导出一个 默认字符集 utf8 的 4.0版本的数据

    mysqldump -u ajin -p test_db –compatible=mysql40 –default-character-set=utf8 test_db >c:\test.sql   

   就可完成了所谓的降级 –compatible= 可以跟得参数有 mysql323 mysql40 oracle mssql db2 等等

导出就介绍这些常用的,其实还有好多好多。。省略一千字…..

二 数据的导入  

   这个相对就比较简单了,   这个在命令行、cmd下用的 ,如果你的msyql/bin目录没有配置在系统的环境变量里,就先cd到mysql/bin目录。
  
  比如我要导入 test.sql 这个数据到  discuz_db 这个数据库

  mysql -u ajin -p discuz_db <c:\test.sql  回车提示输入密码 ,如果没有密码的用户 就不用加 -p 了

好了就先总结这么多,欢迎大家交流,其中不免会有错误,请多指教~~

2006年06月22日

这篇文章来自是Mukund Pujari的《Some Cool Tips for .NET》,本人给大家翻译总结一下,我英语水平也就那么回事,不合适的地方还是请大家提出来。

1. 如何创建一个可改变大小没有标题栏的窗体?(How to create a form with resizing borders and no title bar?)

form1.Text = string. Empty;
form1.ControlBox = false;


2. 如何在.NET的Windows窗体上启用XP主题集?(How to use XP Themes with Windows Forms using the .NET?)

确认你的控件中FlatStyle属性已经修改为System,再修改Main方法。

static void Main()
{
  Application.EnableVisualStyles();
  Application.DoEvents();
  Application. Run(new Form1());
}


3. 如何为一个窗体设置一个默认按钮?(How to set the default button for a form?)

form1.AcceptButton = button1;

4. 如何为一个窗体设置一个取消按钮?(How to set the Cancel button for a form?)

form1.CancelButton = button1;

5. 如何阻止一个窗体标题显示在任务栏上?(How to prevent a form from being shown in the taskbar?)

设置窗体的ShowIntaskbar属性为False

6. 如何用现有可用字体绑定到ComboBox控件?(How to fill a ComboBox with the available fonts?)

comboBox1.Items.AddRange (FontFamily.Families);

7. 如何禁止TextBox控件默认的邮件菜单?(How to disable the default ContextMenu of a TextBox?)

textBox1.ContextMenu = new ContextMenu ();

8. 如何获取“我的文档”等一些系统文件夹路径?(How to get the path for "My Documents" and other system folders?)

Environment.SpecialFolder中包含了一些系统文件夹信息
MessageBox.Show(Environment.GetFolderPath( Environment.SpecialFolder.Personal ));

9. 如何获取应用程序当前执行的路径?(How to get the path to my running EXE?)

string appPath = Application.ExecutablePath;

10. 如何确定当前运行的系统?(How to determine which operating system is running?)

OperatingSystem os = Environment.OSVersion;
MessageBox.Show(os.Version.ToString());
MessageBox.Show(os.Platform.ToString());

11. 如何从完整的路径中获取文件名?(How to get a file’s name from the complete path string?)

用System.IO.Path.GetFileName 和 System.IO.Path.GetFileNameWithoutExtension(无扩展名)的方法

12. 如何从完整的路径中获取文件扩展名?(How to get a file’s extension from the complete path string?)

用System.IO.Path.GetExtension方法

13. 如何使没有选择日期的DateTimePicker控件为空文本?(How to make the DateTimePicker show empty text if no date is selected?)

dateTimePicker1.CustomFormat = " ";
dateTimePicker1.Format = DateTimePickerFormat.Custom;

14. 如何在Report Viewer中隐藏Crystal Report的状态栏?(How to hide the status bar of Crystal Report in Report Viewer?)

foreach(object obj in this.crystalReportViewer1.Controls)
{     
  if( obj.GetType()== typeof(System.Windows.Forms.StatusBar))
 {     
  StatusBar sBar=(StatusBar)obj;
  sBar.Visible=false;
 }     
}


15. 如何利用Crystal Report程序来生成PDF版本?(How to generate PDF version of Crystal Report programmatically?)

ReportDocument O_Report=new ReportDocument();
ExportOptions exportOpts = new ExportOptions();
PdfRtfWordFormatOptions pdfFormatOpts = new PdfRtfWordFormatOptions ();
DiskFileDestinationOptions diskOpts = new DiskFileDestinationOptions();
exportOpts = O_Report.ExportOptions;
// 设置PDF格式   
exportOpts.ExportFormatType = ExportFormatType.PortableDocFormat;
exportOpts.FormatOptions = pdfFormatOpts;
// 设置文件选项和导出
exportOpts.ExportDestinationType = ExportDestinationType.DiskFile;
diskOpts.DiskFileName = "C://Trial.pdf"; //设置PDF导出路径    
exportOpts.DestinationOptions = diskOpts;
O_Report.Export ();


16.通过代码如何输入多行文本?(How to enter multiline text in textbox through code? )

利用TextBox控件的LINES属性
string [] strAddress = {"Mukund Pujari","Global Transformation Technologies","Pune, India"};
textBox1.MultiLine=true;
textBox1.Lines=strAddress;

或者
textBox1.Text="Line 1\r\nLine2\r\nLine3.";

或者
用"System.Environment.NewLine"来替代换行符号

17. 如何在DataGrid中去掉CheckBox不确定状态?(How to remove the indeterminate status of checkbox in datagrid?)

DataGridTableStyle ts1 = new DataGridTableStyle(); //创建Table样式
ts1.MappingName = "Items"; //分配要应用样式的Data Table
DataGridColumnStyle boolCol = new DataGridBoolColumn(); // 创建CheckBox列
boolCol.MappingName = "ch"; //分配数据列名称
boolCol.AllowNull=false; // 修改AllowNull属性

18. 如何在用一个数据源DataTable绑定两个控件,确保变化不反映在两个控件中?( How to bind two controls to the same DataTable without having changes in one control also change the other control?)

我们在一个Form中放置一个ListBox和一个ComboBox控件,当数据源是一个DataTable而且绑定的ValueMember一致的时候我们选择ListBox中的一个Item时,ComboBox控件中的相同的Item也会被自动选中,我们可以采取建立新的上下文绑定对象来拒绝这样的同步操作
comboBox1.DataSource = dataset.Tables[ "Items" ];
comboBox1.ValueMember = "CustomerID";
comboBox1.DisplayMember = "CustomerID";

listBox1.BindingContext = new BindingContext(); // 设置新的上下文绑定对象
listBox1.DataSource = dataset.Tables[ "Items" ];
listBox1.ValueMember = "CustomerID";
listBox1.DisplayMember = "CustomerID";

19. 一个简单的创建链接字符串的方法。(An easy way to build connection string.)

记事本创建一个New.udl的文件,一个Microsoft 数据链接文件
双击打开,熟悉吧
按照向导创建完成一个数据库链接,测试成功
确定后,链接字符串写入这个文件,用记事本打开就看到了

20. 如何打开客户端E-Mail程序,Windows应用和Web应用?( How to open default E-mail client on your system with all parameters entered in it,like Outlook Express or Eudora, from your .NET windows or Web Application? )

Web Application:
A href="mailto:email@address1.com,email@address2.com?cc=email@address3.com&Subject=Hello&body=Happy New Year"

Windows Application:
引用System.Diagnostics.Process 命名空间
Process process = new Process();
process.StartInfo.FileName = "mailto:email@address1.com,email@address2.com?subject=Hello&cc=email@address3.com
&bcc=email@address4.com&body=Happy New Year" ;
process.Start();

21. VB.NET和C#有什么不同?( What is difference beween VB.NET and C#.NET? )

去微软下载一个文档吧,http://download.microsoft.com/download/6/3/5/6354bf47-c597-4029-89e9-2495e7539ab9/vbcsharpwp.exe

22. How to find whether your system has mouse or the number of buttons, whether it has wheel, or whether the mouse buttons are swapped or size of your monitor and many such information?

23. 如何使Windows Form上的Panel或者Label控件半透明?(How to make a Panel or Label semi-transparent on a Windows Form? )

通过设置控件背景色的alpha值
panel1.BackColor = Color.FromArgb(65, 204, 212, 230);
注意:在设计时手动输入这些值,不要用颜色选取

24. C#程序的主函数写[STA Thread] 属性是什么目的?(What is the purpose of the [STA Thread] attribute for the Main method of a C# program? )

http://community.csdn.net/Expert/topic/4132/4132313.xml?temp=.2285272


25. 如何触发Button的Click事件?(How to trigger a button click event? )

button1.PerformClick();

2006年06月20日

作 者: 缠绵整理
来 源: 力富数字视频网
浏 览 18518


最近在网上无意中看到一篇好文章,解决了许多人的刻不了800多M片子的问题. 相信下片子的兄弟都遇到过没法刻大于700M的片子,只好让片子放在硬盘里占空间,如果硬盘出了问题, 那就只有:(…

现把文章贴出来,希望对NIUGUO的兄弟们有所帮助!!!

光盘超级刻录设置!
1、在开始刻录前首先需要在Nero中进行参数设置,设置方法如下:
单击菜单:文件->参数选项->常规,将“红色标志”调整为90分钟。

2、选中“专家功能”选项页,选中允许超刻功能。

3、从“文件”菜单下选择“刻录镜像文件”,然后单击工具栏上的刻录按钮,在刻录方式下选择“Disk at once”选项。

4、这时Nero会提醒光盘容量不足,不用理会,之后会出现以下提示信息,单击“刻录超烧光盘”按钮开始刻录。接下来只要等待刻录结束即可。

5、注意事项,由于Nero的超烧功能必须在Disk at Once模式下才能使用.

Nero超刻DVDrip的方法

很多论坛会员下载了DVDrip电影后,想很好的收藏保存,但往往电影文件加上字幕文件后,正常的方法刻录一张700M的盘片就放不下了,这时光盘超刻就显得十分重要。在此我写一篇超刻的文章,希望对大家有所帮助。

一:盘片检测

建议如果条件允许的话,购买时尽量选择一些品牌的盘片,因为现在随着刻录机的普及,盘片的选择也逐渐多起来,单张单价在2元左右(因地而异)就可以选择到一些不错地品牌盘片,譬如:Ritek(铼得)、Benq/Acer (宏基)、Unibit (优百特)等等,因为其实制作盘片得厂商就这么几家,很多都时OEM再打商标得,比如:Unibit
(优百特)就是Ritek(铼得)的OEM产品。好的品牌的盘片不怎么会飞盘,保存的时间也比较长,重要一点,不挑刻录机,所以建议以50张或100张为单位一次性购买,可以很好还价。广州现在Unibit (优百特)50片一桶装A级盘片单张价格是1.6元,大家可以参考。

买来盘片之后,要想了解盘片可以超刻多少分钟,多少容量,最简单的方法之一,就是用Nero附带的工具,具体方法如下:

1、首先在刻录机里放进空白的CD-R盘片,然后在【开始】菜单里选择Nero CD Speed程序如图 :

2、选择下拉菜单里盘片超刻测试(如图2)

3、出现测试窗口后,还有盘片的基本资料,包括容量,时间,制造厂商,盘片类型等,选择start开始测试(如图3)

4、刻录机会模拟超刻过程,别担心,不是真的刻录进去,完成后会出现一个提示框,说明盘片可超刻的总时间和比正常多出的时间,并问你要不要保存资料。可选YES保存。(如图4、5)

图五:

5、最后的出图:绿色表示正常刻录的部分,黄色表示可以超刻的部分,下面是具体参数,选close关闭退出。(如图6)

盘片的选择介绍完了,下面介绍如何刻录:
二:刻录
1、打开Nero,如果有跳出下面的画面,请退出精灵(有的汉化说向导)。

2、打开Nero菜单栏上的“烧录器”中的“选择烧录器”。

然后就跳出一个对话框,里面会告诉你,你是刻录机是否已安装正确、是否支持超刻,还有其它一些相关信息。
注意:如果没有显示支持超刻的话,就不要使用超刻,不然就会损坏你的光盘和刻录机;还有你确信你的刻录机支持超刻的话,而上面又没显示支持,那有可能是你的注册码错误,你可以用注册机算出正确的注册码,重新输入后再看看情况。

3、打开Nero菜单栏上的“档案”,选择“偏好设定”,

然后跳出一个对话框,选择“进阶级属性”(有的汉化叫专家设置),打开超刻功能,输入比80分钟大的数字,我一般用99分钟(当然你也可以输入再大点的,但现在市面上最多为800M的超容量刻录盘,可写入时间为90分钟,所以99分钟也就够了)。

4、打开Nero菜单栏上的“档案”,打开新档案,把要刻录的内容拖到空白框里面,然后在Nero菜单栏上的“档案”中选择开始烧录光盘,

跳出一个选项框,现在你要选择“多重区段”中的“无多重区段

然后按“烧录”,进入另一个选项框,把“终结CD(这片CD就不能再烧资料进去!)”这项勾上,在写入方法中选择“光盘一次烧录(DAO)”
注意:只有选中“无多重区段”才能将写入方法激活。
5、上面都做好后,按“烧录”旁边的“新建”后,如果你的资料容量大于703M,过2秒后就会跳出下面的超刻的对话框,你只要选“超烧”就OK了!

2006年06月15日

动态链接库DLL的链接

  应用程序使用DLL可以采用两种方式:一种是隐式链接,另一种是显式链接。在使用DLL之前首先要知道DLL中函数的结构信息。Visual C++6.0在VC\bin目录下提供了一个名为Dumpbin.exe的小程序,用它可以查看DLL文件中的函数结构。另外,Windows系统将遵循下面的搜索顺序来定位DLL: 1.包含EXE文件的目录,2.进程的当前工作目录, 3.Windows系统目录, 4.Windows目录,5.列在Path环境变量中的一系列目录。

  1.隐式链接

  隐式链接就是在程序开始执行时就将DLL文件加载到应用程序当中。实现隐式链接很容易,只要将导入函数关键字_declspec(dllimport)函数名等写到应用程序相应的头文件中就可以了。下面的例子通过隐式链接调用MyDll.dll库中的Min函数。首先生成一个项目为TestDll,在DllTest.h、DllTest.cpp文件中分别输入如下代码:


//Dlltest.h
#pragma comment(lib,"MyDll.lib")
extern "C"_declspec(dllimport) int Max(int a,int b);
extern "C"_declspec(dllimport) int Min(int a,int b);
//TestDll.cpp
#include
#include"Dlltest.h"
void main()
{int a;
a=min(8,10)
printf("比较的结果为%d\n",a);
}


  在创建DllTest.exe文件之前,要先将MyDll.dll和MyDll.lib拷贝到当前工程所在的目录下面,也可以拷贝到windows的System目录下。如果DLL使用的是def文件,要删除TestDll.h文件中关键字extern "C"。TestDll.h文件中的关键字Progam commit是要Visual C+的编译器在link时,链接到MyDll.lib文件,当然,开发人员也可以不使用#pragma comment(lib,"MyDll.lib")语句,而直接在工程的Setting->Link页的Object/Moduls栏填入MyDll.lib既可。

  2.显式链接

  显式链接是应用程序在执行过程中随时可以加载DLL文件,也可以随时卸载DLL文件,这是隐式链接所无法作到的,所以显式链接具有更好的灵活性,对于解释性语言更为合适。不过实现显式链接要麻烦一些。在应用程序中用LoadLibrary或MFC提供的AfxLoadLibrary显式的将自己所做的动态链接库调进来,动态链接库的文件名即是上述两个函数的参数,此后再用GetProcAddress()获取想要引入的函数。自此,你就可以象使用如同在应用程序自定义的函数一样来调用此引入函数了。在应用程序退出之前,应该用FreeLibrary或MFC提供的AfxFreeLibrary释放动态链接库。下面是通过显式链接调用DLL中的Max函数的例子。


#include
#include
void main(void)
{
typedef int(*pMax)(int a,int b);
typedef int(*pMin)(int a,int b);
HINSTANCE hDLL;
PMax Max
HDLL=LoadLibrary("MyDll.dll");//加载动态链接库MyDll.dll文件;
Max=(pMax)GetProcAddress(hDLL,"Max");
A=Max(5,8);
Printf("比较的结果为%d\n",a);
FreeLibrary(hDLL);//卸载MyDll.dll文件;
}

  在上例中使用类型定义关键字typedef,定义指向和DLL中相同的函数原型指针,然后通过LoadLibray()将DLL加载到当前的应用程序中并返回当前DLL文件的句柄,然后通过GetProcAddress()函数获取导入到应用程序中的函数指针,函数调用完毕后,使用FreeLibrary()卸载DLL文件。在编译程序之前,首先要将DLL文件拷贝到工程所在的目录或Windows系统目录下。

  使用显式链接应用程序编译时不需要使用相应的Lib文件。另外,使用GetProcAddress()函数时,可以利用MAKEINTRESOURCE()函数直接使用DLL中函数出现的顺序号,如将GetProcAddress(hDLL,"Min")改为GetProcAddress(hDLL, MAKEINTRESOURCE(2))(函数Min()在DLL中的顺序号是2),这样调用DLL中的函数速度很快,但是要记住函数的使用序号,否则会发生错误。

编程时用ad.h,ad.lib,放在项目当前目录里

在头文件中加入#include "ad.h"

在Project Setting–>Link–>Object/library modules
加入ad.lib

执行时将ad.dll跟你的程序放在同一目录

我们在编写程序,开发软件的过程中如果能利用已有的程序的功能,那么可以大大减轻开发过程中程序员的工作量,同时达到事半功倍的效果。例如在工程中,许多软件需要文字处理功能,虽然MFC提供了一些方法,但是具体实现起来既费事,又有一定的困难,如果我们可以直接使用OFFICE提供的功能,岂不美哉!要实现这一目的,只需要利用微软的ActiveX Automation技术就可以轻松实现。本例主要讲述了自动化的概念,并通过一个操作Word文档的程序来帮助读者朋友理解Visual C++编程中如何实现自动化。

  一、实现方法

  1.自动化的概念

  在Windows程序开发中,自动化是基于COM/DCOM之上的技术:它可以使一个应用程序来操纵另外一个程序中的对象,使用该程序提供的丰富的功能;或者是一个应用程序通过提供一些对象及对象的方法和属性来允许另外一个程序使用它提供的各种功能。其中,根据程序是受惠者还是施惠者这一原则,将提供对象和对象属性方法的应用程序称为自动化服务器端;使用对象属性方法的应用程序叫作自动化的客户端。自动化服务器让其它程序告诉它做些什么,它揭示的函数和数据称为方法(Methods)和属性(Properties)。例如Microsoft Office套件中的成员Word、Excel等都是自动化服务器。根据自动化的客户端和服务器端的不同位置,又可以将自动化分为两类:

  1)如果作为服务器端和客户端的两个不同的应用程序都在同一台计算机上,叫作本地自动化;

  2)如果作为服务器端和客户端的两个不同的应用程序是基于网络的,分别处于不同的计算机上,叫作远程自动化。

  需要读者朋友注意的是,由于利用了COM技术,客户端无法直接获得服务器端的对象来实现对它的访问,它必须通过获取一个指向接口的指针来使用对象提供的功能。这个接口称为IDispatch,它是一个简化的使用多种不同语言的特殊接口(包括象Visual Basic这样不能使用指针的语言)。这部分内容读者可以在下面的程序实现过程中细细体味。

  说到自动化,不能不提一下ActiveX控件,它其实是在进程中装入的极小自动化服务器。这意味着它们的执行速度极快,它们原来被称为OLE自定义控件,用来替代VB和Visual C++中使用的16位的VBX控件。由于ActiveX控件通常被保存为.OCX文件,所以又称它为OCX控件。因为控件是一个小型化的自动化服务器,它们需要在自动化客户端使用,我们又将这时的客户端应用程序称为容器应用程序。ActiveX控件除了属性和方法外,还包含事件(events),当一些事情需要容器应用程序注意时,控件才会触发一个事件,如用户的单击等。

  2.自动化中的数据类型

  在实现自动化编程中,最重要的一个问题是程序员要明白在自动化的客户端和服务器端数据是如何传递的。如何提供一个统一安全的机制来实现数据传递呢?在Visual C++开发平台上,它提供了一个叫VARIANT的数据类型来解决这个问题。该数据类型有两部分组成,第一部分为数据的类型,第二部分才是具体的数据的数值。在VARIANT数据类型的基础上,VC提供了ColeVariant类,它对VARIANT数据类型进行了封装,这意味着在所有使用VARIANT的地方都可以使用ColeVariant类的对象。在操作日期和货币变量时,Visual C++又提供了两个类:ColeCurrency和ColeDateTime,具体的内容,读者可以参考MSDN。

  本实例的代码演示了如何操作Word2000实现自动化,由于我们主要是为了辅助解释说明Visual C++编程中怎样实现自动化,帮助读者对自动化的实现过程有一个感性的认识,所以为了简单起见,该程序的功能是仅仅选择一个Word2000的*.Doc文档,并将它的内容都在该程序的"视"中显示出来。为了达到这个目的,就需要启动Word2000打开用户所选择的文件,进行全选和剪贴板操作,然后将数据粘贴到"视"中。

  在这个例子的具体实现中,我们的应用程序为自动化的客户端,Word2000为自动化的服务器端。首先生成一个新的单文档应用程序,视的基类选择CEditView,由于Office中的许多操作是由VBA语言来实现的,所以我们在使用自动化操作Word2000的过程中,为了清楚Word2000的工作过程,我们要对VBA有所了解,这些知识可以通过在Word中录制宏来实现。录制宏的步骤如下:启动Word2000,选择工具菜单下的录制宏子菜单,为一个新的宏起个名字为Macro1,开始录制宏,这时候窗口出现一个浮动工具条,点击上面的按钮可以停止或暂停宏的录制。下面是实现打开一个Word2000文档、全部选择文档内容并将数据存放到剪贴板上的操作的宏代码:


‘ Sub Macro1()
” 宏在 02-5-1 由 LiuTao 录制

Documents.Open FileName:="基于Visual C.doc", ConfirmConversions:=False, _
ReadOnly:=False, AddToRecentFiles:=False, PasswordDocument:="", _
PasswordTemplate:="", Revert:=False, WritePasswordDocument:="", _
WritePasswordTemplate:="", Format:=wdOpenFormatAuto
Selection.WholeStory
Selection.Copy
End Sub


  查看宏代码可以点击Word2000中工具菜单下的Visual Basic 编辑器。从上面的代码中可以看出对Word2000的这几个操作用到了Documents、Selection这两个自动化服务器端显示出来的对象和它们的方法。

  为了在Visual C++中编程操作Word2000,需要使用微软提供的类型库,这个类型库可以在Msword9.olb文件中找到,Msword9.olb这个文件通常情况下位于Microsoft Office的安装目录下面。利用Visual C++中的Class Wizard可以方便的向应用程序添加新的类型库,在应用程序的项目代码中启动Class Wizard ,选择Add class…. \From a type library …\C:\OFFICE\msword 9.olb,在弹出的对话框中选择_Application,_Documents,Selection,这样就可以为客户端程序中使用到的每个Word2000对象建立相应的C++类。这些类的定义和实现分别在msword9.h和msword9.cpp文件中给出。

  为了使生成程序的项目代码支持自动化,我们需要要在项目中的StdAfx.h的文件末尾添加上下面一行:#include "afxdisp.h";在应用程序的InitInstance函数的开始添加下面的调用:


if (CoInitialize(NULL)!=0)
{
 AfxMessageBox("初始化COM支持库失败!");
 exit(1);
}

 

或者加入这句话也可以:AfxOleInit();
  在操作Word2000的过程中,首先通过ColeDispatchDriver类的成员函数CreateDispatch()创建一个Word2000的Applicaion对象,然后通过COleDispatchDriver的成员函数AttachDispatch()将Documents和Selection对象与Application对象提供的IDispatch接口关联起来,在程序对上述对象使用完毕后,要使用COleDispatchDriver的成员函数ReleaseDispatch()来释放对象和接口之间的连接。

  二、编程步骤

  1、 启动Visual C++6.0,生成一个单文档的应用程序,视图的基类选择CEditView类,将该程序命名为"OperateWord";

  2、 启动Word2000,根据所要执行的Word操作录制宏;

  3、 使用Class Wizard为应用程序的项目代码中添加操作Word2000的类型库Msword9.olb;

  4、 添加代码,编译运行程序。


三、程序代码

////////////////////////////////////////////////////////////////////////////
void COperateWordView::OnShowDoc()
{
 // TODO: Add your command handler code here
 static char BASED_CODE szFilter[]="Word Files(*doc)|*.DOC||";
 CFileDialog fd(true,NULL,NULL,OFN_HIDEREADONLY|OFN_OVERWRITEPROMPT,szFilter,NULL);
 CString strFilePath;//用来保存打开的文件名;
 if(fd.DoModal()==IDOK)
  strFilePath=fd.GetPathName();//获取要打开的Word文档的名字;
  _Application m_App;//定义Word提供的应用程序对象;
 Documents m_Docs;//定义Word提供的文档对象;
 Selection m_Sel;//定义Word提供的选择对象;
 m_Docs.ReleaseDispatch();
 m_Sel.ReleaseDispatch();
 m_App.m_bAutoRelease=true;
 if(!m_App.CreateDispatch("Word.Application"))
 {
  AfxMessageBox("创建Word2000服务失败!");
  exit(1);
 }
 //下面是定义VARIANT变量;
 COleVariant varFilePath(strFilePath);
 COleVariant varstrNull("");
 COleVariant varZero((short)0);
 COleVariant varTrue(short(1),VT_BOOL);
 COleVariant varFalse(short(0),VT_BOOL);
 m_Docs.AttachDispatch(m_App.GetDocuments());
 //将Documents类对象m_Docs和Idispatch接口关联起来;
 m_Docs.Open(varFilePath,varFalse,varFalse,varFalse,
  varstrNull,varstrNull,varFalse,varstrNull,
  varstrNull,varTrue,varTrue,varTrue);
 //打开Word文档;
 m_Sel.AttachDispatch(m_App.GetSelection());
 //将Selection类对象m_Sel和Idispatch接口关联起来;
 m_Sel.WholeStory ();//选择文档中的全部内容;
 m_Sel.Copy();//将数据拷贝到剪贴板
 this->GetEditCtrl( ).Paste ();//将数据粘贴到程序的"视"中;
 m_Docs.ReleaseDispatch();//断开关联;
 m_Sel.ReleaseDispatch();
}


  四、小结

  本实例主要讲述了基于自动化的技术如何操作Word2000,为读者学习自动化客户端程序的开发起到抛砖引玉的作用,读者可以在此基础上,实现对Word2000、Excel2000、PowerPoint2000等服务器端进行更复杂的操作。最后补充一句,如果读者朋友想操作OFFICE98版本的应用程序,只需要引入微软提供的8.0版本的类型库就可以了。