﻿<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:trackback="http://madskills.com/public/xml/rss/module/trackback/" xmlns:wfw="http://wellformedweb.org/CommentAPI/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/"><channel><title>C++博客-Hello World！</title><link>http://www.cppblog.com/lizao2/</link><description>程序员那点事儿</description><language>zh-cn</language><lastBuildDate>Sun, 08 Mar 2026 07:53:34 GMT</lastBuildDate><pubDate>Sun, 08 Mar 2026 07:53:34 GMT</pubDate><ttl>60</ttl><item><title>centos安装rocketmq</title><link>http://www.cppblog.com/lizao2/archive/2017/08/25/215193.html</link><dc:creator>hello wold!</dc:creator><author>hello wold!</author><pubDate>Fri, 25 Aug 2017 03:12:00 GMT</pubDate><guid>http://www.cppblog.com/lizao2/archive/2017/08/25/215193.html</guid><wfw:comment>http://www.cppblog.com/lizao2/comments/215193.html</wfw:comment><comments>http://www.cppblog.com/lizao2/archive/2017/08/25/215193.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/lizao2/comments/commentRss/215193.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/lizao2/services/trackbacks/215193.html</trackback:ping><description><![CDATA[<h1><span style="font-weight: normal;"><font face="宋体"><span style="font-size: 14pt; color: red;">附一个rocketmq各语言客户端仓库：</span></font></span><span style="font-weight: normal; font-size: 14pt; color: red;">https://github.com/apache/incubator-rocketmq-externals，我用go客户端，但是master分支的go没有producer，在go-client-develop分支有，尚未合并入主干。</span></h1>  <h2>1<span style="font-variant-numeric: normal; font-weight: normal; font-stretch: normal; font-size: 7pt; line-height: normal; font-family: &quot;Times New Roman&quot;;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span><span style="font-family:宋体;">安装</span>jdk</h2>  <p>1<span style="font-family:宋体;">、</span>http://www.oracle.com/technetwork/java/javase/downloads/jdk8-downloads-2133151.html<span style="font-family:宋体;">挑一个</span>jdk<span style="font-family:宋体;">下载下来。因为需要</span>accept license<span style="font-family:宋体;">，不能</span>wget<span style="font-family:宋体;">直接下载</span></p>  <p>2<span style="font-family:宋体;">、</span>tar zxvf xxxx</p>  <p>3<span style="font-family:宋体;">、</span>mkdir /usr/local/jdk/jre-xx</p>  <p>4<span style="font-family:宋体;">、</span>mv xxx /usr/local/jdk/jre-xx</p>  <p><span style="font-family:宋体;">修改环境变量</span></p>  <p align="left"><span style="background:#FAFAFC"># vi /etc/profile</span></p>  <p style="background:#E5E5E5;"><span style="font-size:10.0pt; font-family:宋体;">#set java env</span></p>  <p style="background:#E5E5E5;"><span style="font-size:10.0pt; font-family:宋体;">JAVA_HOME=/usr/local/jdk/</span></p>  <p style="background:#E5E5E5;"><span style="font-size:10.0pt; font-family:宋体;">JRE_HOME=/usr/local/jdk/jre</span></p>  <p style="background:#E5E5E5;"><span style="font-size:10.0pt; font-family:宋体;">CLASS_PATH=.:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar:$JAVA_HOME/lib</span></p>  <p style="background:#E5E5E5;"><span style="font-size:10.0pt; font-family:宋体;">PATH=$PATH:$JAVA_HOME/bin:$JRE_HOME/bin</span></p>  <p style="background:#E5E5E5;"><span style="font-size:10.0pt; font-family:宋体;">export JAVA_HOME JRE_HOME CLASS_PATH PATH</span></p>  <p><span style=" font-family:&quot;Tahoma&quot;,&quot;sans-serif&quot;;color:#333333;background:#FAFAFC"># source /etc/profile</span></p>  <p><span style="font-family:宋体; color:#333333;background:#FAFAFC">验证</span><span style="font-family:&quot;Tahoma&quot;,&quot;sans-serif&quot;;color:#333333;background:#FAFAFC">java</span></p>  <p style="background:#E5E5E5;"><span style="font-size:10.0pt; font-family:宋体;">#java -version</span></p>  <p style="background:#E5E5E5;"><span style="font-size:10.0pt; font-family:宋体;">java version "1.8.0_144"</span></p>  <p style="background:#E5E5E5;"><span style="font-size:10.0pt; font-family:宋体;">Java(TM) SE Runtime Environment (build 1.8.0_144-b01)</span></p>  <p style="background:#E5E5E5;"><span style="font-size:10.0pt; font-family:宋体;">Java HotSpot(TM) 64-Bit Server VM (build 25.144-b01, mixed mode)</span></p>  <h2>2<span style="font-variant-numeric: normal; font-weight: normal; font-stretch: normal; font-size: 7pt; line-height: normal; font-family: &quot;Times New Roman&quot;;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span><span style="font-family:宋体;">安装</span>mvn</h2>  <p align="left">1<span style="font-family:宋体;">、</span>wget http://mirrors.hust.edu.cn/apache/maven/maven-3/3.5.0/binaries/apache-maven-3.5.0-bin.tar.gz</p>  <p>2<span style="font-family:宋体;">、</span>tar zxvf apache-maven-3.5.0-bin.tar.gz</p>  <p>3<span style="font-family:宋体;">、</span>mv apache-maven-3.5.0-bin.tar.gz /usr/local/apache-maven</p>  <p>4<span style="font-family:宋体;">、</span># vi /etc/profile</p>  <p style="background:#E5E5E5;">export M2_HOME=/usr/local/apache-maven</p>  <p style="background:#E5E5E5;">export PATH=$PATH:<span style="font-size:10.0pt;">$M2_HOME/bin</span></p>  <p><span style="background:white"># source&nbsp;/etc/profile</span></p>  <p>5<span style="font-family:宋体;">、验证是否安装成功</span></p>  <p># mvn -version</p>  <p align="left" style="background: #e5e5e5;">Apache Maven 3.5.0 (ff8f5e7444045639af65f6095c62210b5713f426; 2017-04-04T03:39:06+08:00)</p>  <p align="left" style="background: #e5e5e5;">Maven home: /usr/local/apache-maven</p>  <p align="left" style="background: #e5e5e5;">Java version: 1.8.0_144, vendor: Oracle Corporation</p>  <p align="left" style="background: #e5e5e5;">Java home: /usr/local/jdk/jre</p>  <p align="left" style="background: #e5e5e5;">Default locale: zh_CN, platform encoding: UTF-8</p>  <p align="left" style="background: #e5e5e5;">OS name: "linux", version: "2.6.32-358.el6.x86_64", arch: "amd64", family: "unix"</p>  <p>6<span style="font-family:宋体;">、配置</span>maven<span style="font-family: 宋体;">国内镜像</span></p>  <p><span style="font-family:宋体;">修改</span>maven<span style="font-family:宋体;">根目录下的</span>conf<span style="font-family: 宋体;">文件夹中的</span>setting.xml<span style="font-family:宋体;">文件，内容如下：</span></p>  <p align="left" style="background: #e5e5e5;"><code>&nbsp;</code>&lt;mirrors&gt;</p>  <p align="left" style="background: #e5e5e5;">&nbsp;&nbsp;&nbsp; &lt;mirror&gt;</p>  <p align="left" style="background: #e5e5e5;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;id&gt;alimaven&lt;/id&gt;</p>  <p align="left" style="background: #e5e5e5;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;name&gt;aliyun maven&lt;/name&gt;</p>  <p align="left" style="background: #e5e5e5;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;url&gt;http://maven.aliyun.com/nexus/content/groups/public/&lt;/url&gt;</p>  <p align="left" style="background: #e5e5e5;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;mirrorOf&gt;central&lt;/mirrorOf&gt;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </p>  <p align="left" style="background: #e5e5e5;">&nbsp;&nbsp;&nbsp; &lt;/mirror&gt;</p>  <p align="left" style="background: #e5e5e5;">&nbsp; &lt;/mirrors&gt;</p>  <p>&nbsp;</p>  <h2>3<span style="font-variant-numeric: normal; font-weight: normal; font-stretch: normal; font-size: 7pt; line-height: normal; font-family: &quot;Times New Roman&quot;;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span><span style="font-family:宋体;">安装</span>rocketmq</h2>  <h3><span style="font-size:18.5pt;font-family:&quot;Segoe UI&quot;,&quot;sans-serif&quot;; color:#494E52">Clone &amp; Build</span></h3>  <pre style="background:#FAFAFA"><code><span style="font-family:Consolas; color:#494E52">&nbsp; &gt; git clone https://github.com/apache/incubator-rocketmq.git</span></code></pre><pre style="background:#FAFAFA"><code><span style="font-family:Consolas; color:#494E52">&nbsp; &gt; </span></code><span style="font-family:Consolas;color:#B58900">cd </span><code><span style="font-family:Consolas;color:#494E52">incubator-rocketmq</span></code></pre><pre style="background:#FAFAFA"><code><span style="font-family:Consolas; color:#494E52">&nbsp; &gt; mvn -Prelease-all -DskipTests clean install -U</span></code></pre><pre style="background:#FAFAFA"><code><span style="font-family:Consolas; color:#494E52">&nbsp; &gt; </span></code><span style="font-family:Consolas;color:#B58900">cd </span><code><span style="font-family:Consolas;color:#494E52">distribution/target/apache-rocketmq</span></code></pre><pre style="background:#FAFAFA"><code><span style="color:red">如果服务器内存不够，可以修改</span></code><code><span style="font-family:Consolas;color:red">runserver.sh</span></code><code><span style="color:red">脚本（</span></code><code><span style="font-family:Consolas;color:red">mqnamesrv</span></code><code><span style="color:red">文件中通过</span></code><code><span style="font-family:Consolas;color:red">runserver.sh</span></code><code><span style="color:red">脚本调用</span></code><code><span style="font-family:Consolas;color:red">Name Server</span></code><code><span style="color:red">的主函数</span></code><code><span style="font-family:Consolas;color:red">com.alibaba.rocketmq.namesrv.NamesrvStartup</span></code><code><span style="color:red">启动</span></code><code><span style="font-family:Consolas;color:red">Name Server</span></code><code><span style="color:red">）中的</span></code><code><span style="font-family:Consolas;color:red">JAVA_OPT_1</span></code><code><span style="color:red">参数</span></code><code></code></pre>  <h3><span style="font-size:18.5pt;font-family:&quot;Segoe UI&quot;,&quot;sans-serif&quot;; color:#494E52">Start Name Server</span></h3>  <pre style="background:#FAFAFA"><code><span style="font-family:Consolas; color:#494E52">&nbsp; &gt; nohup sh bin/mqnamesrv &amp;</span></code></pre><pre style="background:#FAFAFA"><code><span style="font-family:Consolas; color:#494E52">&nbsp; &gt; tail -f ~/logs/rocketmqlogs/namesrv.log</span></code></pre><pre style="background:#FAFAFA"><code><span style="font-family:Consolas; color:#494E52">&nbsp; The Name Server boot success...</span></code></pre>  <h3><span style="font-size:18.5pt;font-family:&quot;Segoe UI&quot;,&quot;sans-serif&quot;; color:#494E52">Start Broker</span></h3>  <pre style="background:#FAFAFA"><code><span style="font-family:Consolas; color:#494E52">&nbsp; &gt; nohup sh bin/mqbroker -n localhost:9876 &amp;</span></code></pre><pre style="background:#FAFAFA"><code><span style="font-family:Consolas; color:#494E52">&nbsp; &gt; tail -f ~/logs/rocketmqlogs/broker.log </span></code></pre><pre style="background:#FAFAFA"><code><span style="font-family:Consolas; color:#494E52">&nbsp;&nbsp;The broker[%s, 172.30.30.233:10911] boot success...</span></code></pre>  <h3><span style="font-size:18.5pt;font-family:&quot;Segoe UI&quot;,&quot;sans-serif&quot;; color:#494E52">Send &amp; Receive Messages</span></h3>  <p style="margin-top:0cm;margin-right:0cm;margin-bottom:15.6pt;margin-left: 0cm;background:white"><span style="font-size:16.5pt;font-family: &quot;Segoe UI&quot;,&quot;sans-serif&quot;;color:#494E52">Before sending/receiving messages, we need to tell clients the location of name servers. RocketMQ provides multiple ways to achieve this. For simplicity, we use environment variable&nbsp;</span><code><span style="font-size:12.5pt;font-family:Consolas;color:#494E52;border:solid #F2F3F3 1.0pt;padding:0cm;background:#FAFAFA">NAMESRV_ADDR</span></code></p>  <pre style="background:#FAFAFA"><code><span style="font-family:Consolas; color:#494E52">&nbsp;&gt; </span></code><span style="font-family:Consolas;color:#B58900">export </span><span style="font-family:Consolas;color:#22B3EB">NAMESRV_ADDR</span><span style="font-family:Consolas;color:#859900">=</span><code><span style="font-family:Consolas;color:#494E52">localhost:9876</span></code></pre><pre style="background:#FAFAFA"><code><span style="font-family:Consolas; color:#494E52"> &gt; sh bin/tools.sh org.apache.rocketmq.example.quickstart.Producer</span></code></pre><pre style="background:#FAFAFA"><code><span style="font-family:Consolas; color:#494E52"> SendResult </span></code><span style="font-family:Consolas;color:#859900">[</span><span style="font-family:Consolas;color:#22B3EB">sendStatus</span><span style="font-family:Consolas;color:#859900">=</span><code><span style="font-family:Consolas;color:#494E52">SEND_OK, </span></code><span style="font-family:Consolas;color:#22B3EB">msgId</span><span style="font-family:Consolas;color:#859900">=</span><code><span style="font-family:Consolas;color:#494E52"> ...</span></code></pre><pre style="background:#FAFAFA"><code>&nbsp;</code></pre><pre style="background: #FAFAFA"><code><span style="font-family:Consolas;color:#494E52"> &gt; sh bin/tools.sh org.apache.rocketmq.example.quickstart.Consumer</span></code></pre><pre style="background:#FAFAFA"><code><span style="font-family:Consolas; color:#494E52"> ConsumeMessageThread_%d Receive New Messages: </span></code><span style="font-family:Consolas;color:#859900">[</span><code><span style="font-family:Consolas;color:#494E52">MessageExt...</span></code></pre>  <h3><span style="font-size:18.5pt;font-family:&quot;Segoe UI&quot;,&quot;sans-serif&quot;; color:#494E52">Shutdown Servers</span></h3>  <pre style="background:#FAFAFA"><span style="font-family:Consolas;color:#586E75">&gt; </span><code><span style="font-family:Consolas;color:#494E52">sh bin/mqshutdown broker</span></code></pre><pre style="background:#FAFAFA"><code><span style="font-family:Consolas; color:#494E52">The mqbroker</span></code><span style="font-family:Consolas;color:#859900">(</span><code><span style="font-family:Consolas;color:#494E52">36695</span></code><span style="font-family:Consolas;color:#859900">)</span><code><span style="font-family:Consolas;color:#494E52"> is running...</span></code></pre><pre style="background:#FAFAFA"><code><span style="font-family:Consolas; color:#494E52">Send shutdown request to mqbroker</span></code><span style="font-family:Consolas;color:#859900">(</span><code><span style="font-family:Consolas;color:#494E52">36695</span></code><span style="font-family:Consolas;color:#859900">)</span><code><span style="font-family:Consolas;color:#494E52"> OK</span></code></pre><pre style="background:#FAFAFA"><code>&nbsp;</code></pre><pre style="background: #FAFAFA"><span style="font-family:Consolas; color:#586E75">&gt; </span><code><span style="font-family: Consolas;color:#494E52">sh bin/mqshutdown namesrv</span></code></pre><pre style="background:#FAFAFA"><code><span style="font-family:Consolas; color:#494E52">The mqnamesrv</span></code><span style="font-family:Consolas;color:#859900">(</span><code><span style="font-family:Consolas;color:#494E52">36664</span></code><span style="font-family:Consolas;color:#859900">)</span><code><span style="font-family:Consolas;color:#494E52"> is running...</span></code></pre><pre style="background:#FAFAFA"><code><span style="font-family:Consolas; color:#494E52">Send shutdown request to mqnamesrv</span></code><span style="font-family:Consolas;color:#859900">(</span><code><span style="font-family:Consolas;color:#494E52">36664</span></code><span style="font-family:Consolas;color:#859900">)</span><code><span style="font-family:Consolas;color:#494E52"> OK</span></code></pre>  <h3><span style="font-size:18.5pt;font-family:&quot;Segoe UI&quot;,&quot;sans-serif&quot;; color:#494E52">More</span></h3>  <pre style="background:#FAFAFA"><code><span style="font-family:Consolas">https://rocketmq.incubator.apache.org/docs/quick-start/</span></code></pre><img src ="http://www.cppblog.com/lizao2/aggbug/215193.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/lizao2/" target="_blank">hello wold!</a> 2017-08-25 11:12 <a href="http://www.cppblog.com/lizao2/archive/2017/08/25/215193.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>远程时感觉远程的ALT键被按下怎么办？</title><link>http://www.cppblog.com/lizao2/archive/2017/05/13/214933.html</link><dc:creator>hello wold!</dc:creator><author>hello wold!</author><pubDate>Sat, 13 May 2017 10:15:00 GMT</pubDate><guid>http://www.cppblog.com/lizao2/archive/2017/05/13/214933.html</guid><wfw:comment>http://www.cppblog.com/lizao2/comments/214933.html</wfw:comment><comments>http://www.cppblog.com/lizao2/archive/2017/05/13/214933.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/lizao2/comments/commentRss/214933.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/lizao2/services/trackbacks/214933.html</trackback:ping><description><![CDATA[ 用teamviewer远程，发现远程的alt键被按下似的。
怎么办？

先建立好远程，然后鼠标在本地桌面位置，按住ALT键，然后鼠标挪到远程桌面，送开alt键。就搞定了。

其他弹不起来的按键也一样<img src ="http://www.cppblog.com/lizao2/aggbug/214933.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/lizao2/" target="_blank">hello wold!</a> 2017-05-13 18:15 <a href="http://www.cppblog.com/lizao2/archive/2017/05/13/214933.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>centos安装youcompleteme及简单使用</title><link>http://www.cppblog.com/lizao2/archive/2017/05/08/214916.html</link><dc:creator>hello wold!</dc:creator><author>hello wold!</author><pubDate>Mon, 08 May 2017 01:47:00 GMT</pubDate><guid>http://www.cppblog.com/lizao2/archive/2017/05/08/214916.html</guid><wfw:comment>http://www.cppblog.com/lizao2/comments/214916.html</wfw:comment><comments>http://www.cppblog.com/lizao2/archive/2017/05/08/214916.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/lizao2/comments/commentRss/214916.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/lizao2/services/trackbacks/214916.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp; 摘要: -.YoucompleteMe还有很多强大的功能，有兴趣可以继续探索。我们需要以下几步&nbsp;先检查一下自己的虚拟机中是否有安装python，用vim试一下1&nbsp;:echo has('python')&nbsp;如果得到结果为1 就说明有（其实有没有都无所谓，再执行一遍安装命令绝对没错）&nbsp;yum install python&nbsp;&nbsp;安装vundle，vundl...&nbsp;&nbsp;<a href='http://www.cppblog.com/lizao2/archive/2017/05/08/214916.html'>阅读全文</a><img src ="http://www.cppblog.com/lizao2/aggbug/214916.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/lizao2/" target="_blank">hello wold!</a> 2017-05-08 09:47 <a href="http://www.cppblog.com/lizao2/archive/2017/05/08/214916.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>jsoncpp</title><link>http://www.cppblog.com/lizao2/archive/2013/03/09/198316.html</link><dc:creator>hello wold!</dc:creator><author>hello wold!</author><pubDate>Sat, 09 Mar 2013 08:01:00 GMT</pubDate><guid>http://www.cppblog.com/lizao2/archive/2013/03/09/198316.html</guid><wfw:comment>http://www.cppblog.com/lizao2/comments/198316.html</wfw:comment><comments>http://www.cppblog.com/lizao2/archive/2013/03/09/198316.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/lizao2/comments/commentRss/198316.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/lizao2/services/trackbacks/198316.html</trackback:ping><description><![CDATA[<div>本来写了一篇文章，结果双击了插入代码后，前面那个小方块，然后弹出&nbsp; 正在上载。。。等半天也没反应，后面的东西也无法操作。最后白写了<br /><br />没心情再写了，浪费时间，以后尽量不用这破博客记录东西了。<br />简单记录下<br /><br />jsoncpp中<br /><br />Json::Value value;<br />Json::Reader reader;<br />string str = {\"aa\":{\"bb\":\"cc\"}, \"bb\":\"dd\"};<br />reader.parse(str, value);<br />value["aa"].asString(); //这个会崩溃，原因 aa是object，不是string<br />value["bb"].asString(); //这个ok<br />value["cc"] = "aa"; //这个创建cc，<br />string str2 = value["dd"].asString(); //这个，返回null，然后会添加dd节点。<br /><br />仅作为个人记录，代码写的很不规范，请高手勿喷。如果有错误，欢迎指正！</div><img src ="http://www.cppblog.com/lizao2/aggbug/198316.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/lizao2/" target="_blank">hello wold!</a> 2013-03-09 16:01 <a href="http://www.cppblog.com/lizao2/archive/2013/03/09/198316.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>c++之WMI编程</title><link>http://www.cppblog.com/lizao2/archive/2013/01/24/197548.html</link><dc:creator>hello wold!</dc:creator><author>hello wold!</author><pubDate>Thu, 24 Jan 2013 13:54:00 GMT</pubDate><guid>http://www.cppblog.com/lizao2/archive/2013/01/24/197548.html</guid><wfw:comment>http://www.cppblog.com/lizao2/comments/197548.html</wfw:comment><comments>http://www.cppblog.com/lizao2/archive/2013/01/24/197548.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/lizao2/comments/commentRss/197548.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/lizao2/services/trackbacks/197548.html</trackback:ping><description><![CDATA[<p align="left" style="text-indent: 28pt; "><span style="font-size: 10pt; font-family: Courier; ">文章来源：</span>
<a href="http://wenku.baidu.com/view/64d5a356ad02de80d4d840a0.html"><span style="font-size: 10pt; font-family: Courier; ">http://wenku.baidu.com/view/64d5a356ad02de80d4d840a0.html</span></a>&nbsp;<br /><span style="font-size: 10pt; font-family: Courier; ">大家平时在用类似鲁大师之类软件的时候，会看到鲁大师之类的软件能够获取到PC机的硬件的详细信息，有时候自己在写软件的时候也需要获取PC硬件的详细信息，这个时候你会发现有的硬件信息通过系统的API函数无法获取到或者获取的不准确。所以这个时候就要通过WMI编程来获取硬件信息了。WMI是windows操作系统用来管理软件和硬件的核心。其它的不再多讲了，下面来看最主要的，通过WMI获取硬件信息。</span></p>
<p align="left" style="text-indent: 28pt; "><span style="font-size: 10pt; font-family: Courier; ">整体来说，通过WMI获取计算机硬件信息有以下几个步骤</span></p>
<p align="left" style="margin-left: 36pt; text-indent: -36pt; "><span style="font-size: 10pt; font-family: Courier; ">1、<span style="font-size: 7pt; font-family: 'Times New Roman'; ">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span></span><span style="font-size: 10pt; font-family: Courier; ">用</span><span style="font-size: 9.5pt; font-family: 'Segoe UI'; "><a href="http://msdn.microsoft.com/en-us/library/ms695279(v=vs.85)"><strong><span style="color: #1364c4; text-decoration: none; font-size: 10pt; font-family: Courier; ">CoInitializeEx</span></strong></a></span><span style="font-size: 10pt; font-family: Courier; ">函数初始化COM参数。因为WMI中的类都是基于COM技术的。</span></p>
<p align="left" style="margin-left: 36pt; text-indent: -36pt; "><span style="font-size: 10pt; font-family: Courier; ">2、<span style="font-size: 7pt; font-family: 'Times New Roman'; ">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span></span><span style="font-size: 10pt; font-family: Courier; ">用</span><span style="font-size: 9.5pt; font-family: 'Segoe UI'; "><a href="http://msdn.microsoft.com/en-us/library/ms693736(v=vs.85)"><strong><span style="color: #1364c4; text-decoration: none; font-size: 10pt; font-family: Courier; ">CoInitializeSecurity</span></strong></a></span><span style="font-size: 10pt; font-family: Courier; ">函数初始化COM进程的安全，因为WMI的进程和应用程序进程不在同一个级别。</span></p>
<p align="left" style="margin-left: 36pt; text-indent: -36pt; "><span style="font-size: 10pt; font-family: Courier; ">3、<span style="font-size: 7pt; font-family: 'Times New Roman'; ">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span></span><span style="font-size: 10pt; font-family: Courier; ">获取</span><span style="font-size: 9.5pt; font-family: 'Segoe UI'; "><a href="http://msdn.microsoft.com/en-us/library/aa392093(v=vs.85)"><strong><span style="color: #1364c4; text-decoration: none; font-size: 10pt; font-family: Courier; ">IWbemServices</span></strong></a></span><span style="font-size: 10pt; font-family: Courier; ">指针，通过函数</span><span style="font-size: 9.5pt; font-family: 'Segoe UI'; "><a href="http://msdn.microsoft.com/en-us/library/aa391769(v=vs.85)"><strong><span style="color: #1364c4; text-decoration: none; font-size: 10pt; font-family: Courier; ">IWbemLocator::ConnectServer</span></strong></a></span><span style="font-size: 10pt; font-family: Courier; ">获取。</span></p>
<p align="left" style="margin-left: 36pt; text-indent: -36pt; "><span style="font-size: 10pt; font-family: Courier; ">4、<span style="font-size: 7pt; font-family: 'Times New Roman'; ">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span></span><span style="font-size: 10pt; font-family: Courier; ">通过</span><strong><span style="font-size: 10pt; font-family: Courier; color: #1364c4; ">CoSetProxyBlanket</span></strong><span style="font-size: 10pt; font-family: Courier; ">设置IWbemServices代理安全，使WMI服务可以模拟客户端。</span></p>
<p align="left" style="margin-left: 36pt; text-indent: -36pt; "><span style="font-size: 10pt; font-family: Courier; ">5、<span style="font-size: 7pt; font-family: 'Times New Roman'; ">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span></span><span style="font-size: 10pt; font-family: Courier; ">使用</span><span style="font-size: 9.5pt; font-family: 'Segoe UI'; "><a href="http://msdn.microsoft.com/en-us/library/aa392093(v=vs.85)"><strong><span style="color: #1364c4; text-decoration: none; font-size: 10pt; font-family: Courier; ">IWbemServices</span></strong></a></span><span style="font-size: 10pt; font-family: Courier; ">进行WMI查询，主要使用WQL语句。</span></p>
<p align="left" style="margin-left: 36pt; text-indent: -36pt; "><span style="font-size: 10pt; font-family: Courier; ">6、<span style="font-size: 7pt; font-family: 'Times New Roman'; ">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span></span><span style="font-size: 10pt; font-family: Courier; ">清理COM对象。</span></p>
<p align="left" style="margin-left: 44.25pt; text-indent: -44.25pt; "><span style="font-size: 10pt; font-family: Courier; ">例子，<span style="font-size: 7pt; font-family: 'Times New Roman'; ">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span></span><span style="font-size: 10pt; font-family: Courier; ">查询操作系统信息的一个例子</span><span style="font-size: 14pt; font-family: 楷体; "><br /></span></p><div style="background-color:#eeeeee;font-size:13px;border:1px solid #CCCCCC;padding-right: 5px;padding-bottom: 4px;padding-left: 4px;padding-top: 4px;width: 98%;word-break:break-all"><!--<br /><br />Code highlighting produced by Actipro CodeHighlighter (freeware)<br />http://www.CodeHighlighter.com/<br /><br />--><span style="color: #008080; ">&nbsp; 1</span>&nbsp;#include&nbsp;"stdafx.h"<br /><span style="color: #008080; ">&nbsp;&nbsp;2</span>&nbsp;#include&nbsp;&lt;iostream&gt;<br /><span style="color: #008080; ">&nbsp;&nbsp;3</span>&nbsp;<span style="color: #0000FF; ">using</span>&nbsp;<span style="color: #0000FF; ">namespace</span>&nbsp;std;<br /><span style="color: #008080; ">&nbsp;&nbsp;4</span>&nbsp;#include&nbsp;&lt;comdef.h&gt;<br /><span style="color: #008080; ">&nbsp;&nbsp;5</span>&nbsp;#include&nbsp;&lt;Wbemidl.h&gt;<br /><span style="color: #008080; ">&nbsp;&nbsp;6</span>&nbsp;#&nbsp;pragma&nbsp;comment(lib,&nbsp;"wbemuuid.lib")<br /><span style="color: #008080; ">&nbsp;&nbsp;7</span>&nbsp;<span style="color: #0000FF; ">int</span>&nbsp;_tmain(<span style="color: #0000FF; ">int</span>&nbsp;argc,&nbsp;_TCHAR*&nbsp;argv[])<br /><span style="color: #008080; ">&nbsp;&nbsp;8</span>&nbsp;{<br /><span style="color: #008080; ">&nbsp;&nbsp;9</span>&nbsp;<br /><span style="color: #008080; ">&nbsp;10</span>&nbsp;<br /><span style="color: #008080; ">&nbsp;11</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;HRESULT&nbsp;hres;<br /><span style="color: #008080; ">&nbsp;12</span>&nbsp;<br /><span style="color: #008080; ">&nbsp;13</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #008000; ">//</span><span style="color: #008000; ">&nbsp;Initialize&nbsp;COM.</span><span style="color: #008000; "><br /></span><span style="color: #008080; ">&nbsp;14</span>&nbsp;<span style="color: #008000; "></span>&nbsp;&nbsp;&nbsp;&nbsp;hres&nbsp;=&nbsp;&nbsp;CoInitializeEx(0,&nbsp;COINIT_MULTITHREADED);&nbsp;<br /><span style="color: #008080; ">&nbsp;15</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">if</span>&nbsp;(FAILED(hres))<br /><span style="color: #008080; ">&nbsp;16</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br /><span style="color: #008080; ">&nbsp;17</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;cout&nbsp;&lt;&lt;&nbsp;"Failed&nbsp;to&nbsp;initialize&nbsp;COM&nbsp;library.&nbsp;"&nbsp;<br /><span style="color: #008080; ">&nbsp;18</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;&lt;&nbsp;"Error&nbsp;code&nbsp;=&nbsp;0x"&nbsp;<br /><span style="color: #008080; ">&nbsp;19</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;&lt;&nbsp;hex&nbsp;&lt;&lt;&nbsp;hres&nbsp;&lt;&lt;&nbsp;endl;<br /><span style="color: #008080; ">&nbsp;20</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">return</span>&nbsp;1;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #008000; ">//</span><span style="color: #008000; ">&nbsp;Program&nbsp;has&nbsp;failed.</span><span style="color: #008000; "><br /></span><span style="color: #008080; ">&nbsp;21</span>&nbsp;<span style="color: #008000; "></span>&nbsp;&nbsp;&nbsp;&nbsp;}<br /><span style="color: #008080; ">&nbsp;22</span>&nbsp;<br /><span style="color: #008080; ">&nbsp;23</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #008000; ">//</span><span style="color: #008000; ">&nbsp;Initialize&nbsp;</span><span style="color: #008000; "><br /></span><span style="color: #008080; ">&nbsp;24</span>&nbsp;<span style="color: #008000; "></span>&nbsp;&nbsp;&nbsp;&nbsp;hres&nbsp;=&nbsp;&nbsp;CoInitializeSecurity(<br /><span style="color: #008080; ">&nbsp;25</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;NULL,&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br /><span style="color: #008080; ">&nbsp;26</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;-1,&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #008000; ">//</span><span style="color: #008000; ">&nbsp;COM&nbsp;negotiates&nbsp;service&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000; "><br /></span><span style="color: #008080; ">&nbsp;27</span>&nbsp;<span style="color: #008000; "></span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;NULL,&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #008000; ">//</span><span style="color: #008000; ">&nbsp;Authentication&nbsp;services</span><span style="color: #008000; "><br /></span><span style="color: #008080; ">&nbsp;28</span>&nbsp;<span style="color: #008000; "></span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;NULL,&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #008000; ">//</span><span style="color: #008000; ">&nbsp;Reserved</span><span style="color: #008000; "><br /></span><span style="color: #008080; ">&nbsp;29</span>&nbsp;<span style="color: #008000; "></span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;RPC_C_AUTHN_LEVEL_DEFAULT,&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #008000; ">//</span><span style="color: #008000; ">&nbsp;authentication</span><span style="color: #008000; "><br /></span><span style="color: #008080; ">&nbsp;30</span>&nbsp;<span style="color: #008000; "></span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;RPC_C_IMP_LEVEL_IMPERSONATE,&nbsp;&nbsp;<span style="color: #008000; ">//</span><span style="color: #008000; ">&nbsp;Impersonation</span><span style="color: #008000; "><br /></span><span style="color: #008080; ">&nbsp;31</span>&nbsp;<span style="color: #008000; "></span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;NULL,&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #008000; ">//</span><span style="color: #008000; ">&nbsp;Authentication&nbsp;info&nbsp;</span><span style="color: #008000; "><br /></span><span style="color: #008080; ">&nbsp;32</span>&nbsp;<span style="color: #008000; "></span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;EOAC_NONE,&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #008000; ">//</span><span style="color: #008000; ">&nbsp;Additional&nbsp;capabilities</span><span style="color: #008000; "><br /></span><span style="color: #008080; ">&nbsp;33</span>&nbsp;<span style="color: #008000; "></span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;NULL&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #008000; ">//</span><span style="color: #008000; ">&nbsp;Reserved</span><span style="color: #008000; "><br /></span><span style="color: #008080; ">&nbsp;34</span>&nbsp;<span style="color: #008000; "></span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;);<br /><span style="color: #008080; ">&nbsp;35</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">if</span>&nbsp;(FAILED(hres))<br /><span style="color: #008080; ">&nbsp;36</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br /><span style="color: #008080; ">&nbsp;37</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;cout&nbsp;&lt;&lt;&nbsp;"Failed&nbsp;to&nbsp;initialize&nbsp;security.&nbsp;"&nbsp;<br /><span style="color: #008080; ">&nbsp;38</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;&lt;&nbsp;"Error&nbsp;code&nbsp;=&nbsp;0x"&nbsp;<br /><span style="color: #008080; ">&nbsp;39</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;&lt;&nbsp;hex&nbsp;&lt;&lt;&nbsp;hres&nbsp;&lt;&lt;&nbsp;endl;<br /><span style="color: #008080; ">&nbsp;40</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;CoUninitialize();<br /><span style="color: #008080; ">&nbsp;41</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">return</span>&nbsp;1;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #008000; ">//</span><span style="color: #008000; ">&nbsp;Program&nbsp;has&nbsp;failed.</span><span style="color: #008000; "><br /></span><span style="color: #008080; ">&nbsp;42</span>&nbsp;<span style="color: #008000; "></span>&nbsp;&nbsp;&nbsp;&nbsp;}<br /><span style="color: #008080; ">&nbsp;43</span>&nbsp;<br /><span style="color: #008080; ">&nbsp;44</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #008000; ">//</span><span style="color: #008000; ">&nbsp;Obtain&nbsp;the&nbsp;initial&nbsp;locator&nbsp;to&nbsp;Windows&nbsp;Management<br /></span><span style="color: #008080; ">&nbsp;45</span>&nbsp;<span style="color: #008000; ">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000; ">//</span><span style="color: #008000; ">&nbsp;on&nbsp;a&nbsp;particular&nbsp;host&nbsp;computer.</span><span style="color: #008000; "><br /></span><span style="color: #008080; ">&nbsp;46</span>&nbsp;<span style="color: #008000; "></span>&nbsp;&nbsp;&nbsp;&nbsp;IWbemLocator&nbsp;*pLoc&nbsp;=&nbsp;0;<br /><span style="color: #008080; ">&nbsp;47</span>&nbsp;<br /><span style="color: #008080; ">&nbsp;48</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;hres&nbsp;=&nbsp;CoCreateInstance(<br /><span style="color: #008080; ">&nbsp;49</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;CLSID_WbemLocator,&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br /><span style="color: #008080; ">&nbsp;50</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;0,&nbsp;<br /><span style="color: #008080; ">&nbsp;51</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;CLSCTX_INPROC_SERVER,&nbsp;<br /><span style="color: #008080; ">&nbsp;52</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;IID_IWbemLocator,&nbsp;(LPVOID&nbsp;*)&nbsp;&amp;pLoc);<br /><span style="color: #008080; ">&nbsp;53</span>&nbsp;<br /><span style="color: #008080; ">&nbsp;54</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">if</span>&nbsp;(FAILED(hres))<br /><span style="color: #008080; ">&nbsp;55</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br /><span style="color: #008080; ">&nbsp;56</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;cout&nbsp;&lt;&lt;&nbsp;"Failed&nbsp;to&nbsp;create&nbsp;IWbemLocator&nbsp;object.&nbsp;"<br /><span style="color: #008080; ">&nbsp;57</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;&lt;&nbsp;"Error&nbsp;code&nbsp;=&nbsp;0x"<br /><span style="color: #008080; ">&nbsp;58</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;&lt;&nbsp;hex&nbsp;&lt;&lt;&nbsp;hres&nbsp;&lt;&lt;&nbsp;endl;<br /><span style="color: #008080; ">&nbsp;59</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;CoUninitialize();<br /><span style="color: #008080; ">&nbsp;60</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">return</span>&nbsp;1;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #008000; ">//</span><span style="color: #008000; ">&nbsp;Program&nbsp;has&nbsp;failed.</span><span style="color: #008000; "><br /></span><span style="color: #008080; ">&nbsp;61</span>&nbsp;<span style="color: #008000; "></span>&nbsp;&nbsp;&nbsp;&nbsp;}<br /><span style="color: #008080; ">&nbsp;62</span>&nbsp;<br /><span style="color: #008080; ">&nbsp;63</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;IWbemServices&nbsp;*pSvc&nbsp;=&nbsp;0;<br /><span style="color: #008080; ">&nbsp;64</span>&nbsp;<br /><span style="color: #008080; ">&nbsp;65</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #008000; ">//</span><span style="color: #008000; ">&nbsp;Connect&nbsp;to&nbsp;the&nbsp;root\cimv2&nbsp;namespace&nbsp;with&nbsp;the<br /></span><span style="color: #008080; ">&nbsp;66</span>&nbsp;<span style="color: #008000; ">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000; ">//</span><span style="color: #008000; ">&nbsp;current&nbsp;user&nbsp;and&nbsp;obtain&nbsp;pointer&nbsp;pSvc<br /></span><span style="color: #008080; ">&nbsp;67</span>&nbsp;<span style="color: #008000; ">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000; ">//</span><span style="color: #008000; ">&nbsp;to&nbsp;make&nbsp;IWbemServices&nbsp;calls.</span><span style="color: #008000; "><br /></span><span style="color: #008080; ">&nbsp;68</span>&nbsp;<span style="color: #008000; "></span><br /><span style="color: #008080; ">&nbsp;69</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;hres&nbsp;=&nbsp;pLoc-&gt;ConnectServer(<br /><span style="color: #008080; ">&nbsp;70</span>&nbsp;<br /><span style="color: #008080; ">&nbsp;71</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;_bstr_t(L"ROOT\\CIMV2"),&nbsp;<span style="color: #008000; ">//</span><span style="color: #008000; ">&nbsp;WMI&nbsp;namespace</span><span style="color: #008000; "><br /></span><span style="color: #008080; ">&nbsp;72</span>&nbsp;<span style="color: #008000; "></span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;NULL,&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #008000; ">//</span><span style="color: #008000; ">&nbsp;User&nbsp;name</span><span style="color: #008000; "><br /></span><span style="color: #008080; ">&nbsp;73</span>&nbsp;<span style="color: #008000; "></span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;NULL,&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #008000; ">//</span><span style="color: #008000; ">&nbsp;User&nbsp;password</span><span style="color: #008000; "><br /></span><span style="color: #008080; ">&nbsp;74</span>&nbsp;<span style="color: #008000; "></span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;0,&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #008000; ">//</span><span style="color: #008000; ">&nbsp;Locale</span><span style="color: #008000; "><br /></span><span style="color: #008080; ">&nbsp;75</span>&nbsp;<span style="color: #008000; "></span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;NULL,&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #008000; ">//</span><span style="color: #008000; ">&nbsp;Security&nbsp;flags&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000; "><br /></span><span style="color: #008080; ">&nbsp;76</span>&nbsp;<span style="color: #008000; "></span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;0,&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #008000; ">//</span><span style="color: #008000; ">&nbsp;Authority&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000; "><br /></span><span style="color: #008080; ">&nbsp;77</span>&nbsp;<span style="color: #008000; "></span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;0,&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #008000; ">//</span><span style="color: #008000; ">&nbsp;Context&nbsp;object</span><span style="color: #008000; "><br /></span><span style="color: #008080; ">&nbsp;78</span>&nbsp;<span style="color: #008000; "></span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&amp;pSvc&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #008000; ">//</span><span style="color: #008000; ">&nbsp;IWbemServices&nbsp;proxy</span><span style="color: #008000; "><br /></span><span style="color: #008080; ">&nbsp;79</span>&nbsp;<span style="color: #008000; "></span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;);&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br /><span style="color: #008080; ">&nbsp;80</span>&nbsp;<br /><span style="color: #008080; ">&nbsp;81</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">if</span>&nbsp;(FAILED(hres))<br /><span style="color: #008080; ">&nbsp;82</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br /><span style="color: #008080; ">&nbsp;83</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;cout&nbsp;&lt;&lt;&nbsp;"Could&nbsp;not&nbsp;connect.&nbsp;Error&nbsp;code&nbsp;=&nbsp;0x"&nbsp;<br /><span style="color: #008080; ">&nbsp;84</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;&lt;&nbsp;hex&nbsp;&lt;&lt;&nbsp;hres&nbsp;&lt;&lt;&nbsp;endl;<br /><span style="color: #008080; ">&nbsp;85</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;pLoc-&gt;Release();&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br /><span style="color: #008080; ">&nbsp;86</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;CoUninitialize();<br /><span style="color: #008080; ">&nbsp;87</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">return</span>&nbsp;1;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #008000; ">//</span><span style="color: #008000; ">&nbsp;Program&nbsp;has&nbsp;failed.</span><span style="color: #008000; "><br /></span><span style="color: #008080; ">&nbsp;88</span>&nbsp;<span style="color: #008000; "></span>&nbsp;&nbsp;&nbsp;&nbsp;}<br /><span style="color: #008080; ">&nbsp;89</span>&nbsp;<br /><span style="color: #008080; ">&nbsp;90</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;cout&nbsp;&lt;&lt;&nbsp;"Connected&nbsp;to&nbsp;ROOT\\CIMV2&nbsp;WMI&nbsp;namespace"&nbsp;&lt;&lt;&nbsp;endl;<br /><span style="color: #008080; ">&nbsp;91</span>&nbsp;<br /><span style="color: #008080; ">&nbsp;92</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #008000; ">//</span><span style="color: #008000; ">&nbsp;Set&nbsp;the&nbsp;IWbemServices&nbsp;proxy&nbsp;so&nbsp;that&nbsp;impersonation<br /></span><span style="color: #008080; ">&nbsp;93</span>&nbsp;<span style="color: #008000; ">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000; ">//</span><span style="color: #008000; ">&nbsp;of&nbsp;the&nbsp;user&nbsp;(client)&nbsp;occurs.</span><span style="color: #008000; "><br /></span><span style="color: #008080; ">&nbsp;94</span>&nbsp;<span style="color: #008000; "></span>&nbsp;&nbsp;&nbsp;&nbsp;hres&nbsp;=&nbsp;CoSetProxyBlanket(<br /><span style="color: #008080; ">&nbsp;95</span>&nbsp;<br /><span style="color: #008080; ">&nbsp;96</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;pSvc,&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #008000; ">//</span><span style="color: #008000; ">&nbsp;the&nbsp;proxy&nbsp;to&nbsp;set</span><span style="color: #008000; "><br /></span><span style="color: #008080; ">&nbsp;97</span>&nbsp;<span style="color: #008000; "></span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;RPC_C_AUTHN_WINNT,&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #008000; ">//</span><span style="color: #008000; ">&nbsp;authentication&nbsp;service</span><span style="color: #008000; "><br /></span><span style="color: #008080; ">&nbsp;98</span>&nbsp;<span style="color: #008000; "></span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;RPC_C_AUTHZ_NONE,&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #008000; ">//</span><span style="color: #008000; ">&nbsp;authorization&nbsp;service</span><span style="color: #008000; "><br /></span><span style="color: #008080; ">&nbsp;99</span>&nbsp;<span style="color: #008000; "></span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;NULL,&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #008000; ">//</span><span style="color: #008000; ">&nbsp;Server&nbsp;principal&nbsp;name</span><span style="color: #008000; "><br /></span><span style="color: #008080; ">100</span>&nbsp;<span style="color: #008000; "></span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;RPC_C_AUTHN_LEVEL_CALL,&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #008000; ">//</span><span style="color: #008000; ">&nbsp;authentication&nbsp;level</span><span style="color: #008000; "><br /></span><span style="color: #008080; ">101</span>&nbsp;<span style="color: #008000; "></span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;RPC_C_IMP_LEVEL_IMPERSONATE,&nbsp;&nbsp;<span style="color: #008000; ">//</span><span style="color: #008000; ">&nbsp;impersonation&nbsp;level</span><span style="color: #008000; "><br /></span><span style="color: #008080; ">102</span>&nbsp;<span style="color: #008000; "></span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;NULL,&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #008000; ">//</span><span style="color: #008000; ">&nbsp;client&nbsp;identity&nbsp;</span><span style="color: #008000; "><br /></span><span style="color: #008080; ">103</span>&nbsp;<span style="color: #008000; "></span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;EOAC_NONE&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #008000; ">//</span><span style="color: #008000; ">&nbsp;proxy&nbsp;capabilities&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000; "><br /></span><span style="color: #008080; ">104</span>&nbsp;<span style="color: #008000; "></span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;);<br /><span style="color: #008080; ">105</span>&nbsp;<br /><span style="color: #008080; ">106</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">if</span>&nbsp;(FAILED(hres))<br /><span style="color: #008080; ">107</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br /><span style="color: #008080; ">108</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;cout&nbsp;&lt;&lt;&nbsp;"Could&nbsp;not&nbsp;set&nbsp;proxy&nbsp;blanket.&nbsp;Error&nbsp;code&nbsp;=&nbsp;0x"&nbsp;<br /><span style="color: #008080; ">109</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;&lt;&nbsp;hex&nbsp;&lt;&lt;&nbsp;hres&nbsp;&lt;&lt;&nbsp;endl;<br /><span style="color: #008080; ">110</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;pSvc-&gt;Release();<br /><span style="color: #008080; ">111</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;pLoc-&gt;Release();&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br /><span style="color: #008080; ">112</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;CoUninitialize();<br /><span style="color: #008080; ">113</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">return</span>&nbsp;1;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #008000; ">//</span><span style="color: #008000; ">&nbsp;Program&nbsp;has&nbsp;failed.</span><span style="color: #008000; "><br /></span><span style="color: #008080; ">114</span>&nbsp;<span style="color: #008000; "></span>&nbsp;&nbsp;&nbsp;&nbsp;}<br /><span style="color: #008080; ">115</span>&nbsp;<br /><span style="color: #008080; ">116</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;IEnumWbemClassObject*&nbsp;pEnumerator&nbsp;=&nbsp;NULL;<br /><span style="color: #008080; ">117</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;hres&nbsp;=&nbsp;pSvc-&gt;ExecQuery(<br /><span style="color: #008080; ">118</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;bstr_t("WQL"),&nbsp;<br /><span style="color: #008080; ">119</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;bstr_t("SELECT&nbsp;*&nbsp;FROM&nbsp;Win32_OperatingSystem"),<span style="color: #008000; "> //此处wql语句更改，实现不同的查询</span><br /><span style="color: #008080; ">120</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;WBEM_FLAG_FORWARD_ONLY&nbsp;|&nbsp;WBEM_FLAG_RETURN_IMMEDIATELY,&nbsp;<br /><span style="color: #008080; ">121</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;NULL,<br /><span style="color: #008080; ">122</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&amp;pEnumerator);<br /><span style="color: #008080; ">123</span>&nbsp;<br /><span style="color: #008080; ">124</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">if</span>&nbsp;(FAILED(hres))<br /><span style="color: #008080; ">125</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br /><span style="color: #008080; ">126</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;cout&nbsp;&lt;&lt;&nbsp;"Query&nbsp;for&nbsp;processes&nbsp;failed.&nbsp;"<br /><span style="color: #008080; ">127</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;&lt;&nbsp;"Error&nbsp;code&nbsp;=&nbsp;0x"&nbsp;<br /><span style="color: #008080; ">128</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;&lt;&nbsp;hex&nbsp;&lt;&lt;&nbsp;hres&nbsp;&lt;&lt;&nbsp;endl;<br /><span style="color: #008080; ">129</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;pSvc-&gt;Release();<br /><span style="color: #008080; ">130</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;pLoc-&gt;Release();&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br /><span style="color: #008080; ">131</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;CoUninitialize();<br /><span style="color: #008080; ">132</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">return</span>&nbsp;1;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #008000; ">//</span><span style="color: #008000; ">&nbsp;Program&nbsp;has&nbsp;failed.</span><span style="color: #008000; "><br /></span><span style="color: #008080; ">133</span>&nbsp;<span style="color: #008000; "></span>&nbsp;&nbsp;&nbsp;&nbsp;}<br /><span style="color: #008080; ">134</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">else</span><br /><span style="color: #008080; ">135</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{&nbsp;<br /><span style="color: #008080; ">136</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;IWbemClassObject&nbsp;*pclsObj;<br /><span style="color: #008080; ">137</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;ULONG&nbsp;uReturn&nbsp;=&nbsp;0;<br /><span style="color: #008080; ">138</span>&nbsp;<br /><span style="color: #008080; ">139</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">while</span>&nbsp;(pEnumerator)<br /><span style="color: #008080; ">140</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br /><span style="color: #008080; ">141</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;hres&nbsp;=&nbsp;pEnumerator-&gt;Next(WBEM_INFINITE,&nbsp;1,&nbsp;<br /><span style="color: #008080; ">142</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&amp;pclsObj,&nbsp;&amp;uReturn);<br /><span style="color: #008080; ">143</span>&nbsp;<br /><span style="color: #008080; ">144</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">if</span>(0&nbsp;==&nbsp;uReturn)<br /><span style="color: #008080; ">145</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br /><span style="color: #008080; ">146</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">break</span>;<br /><span style="color: #008080; ">147</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br /><span style="color: #008080; ">148</span>&nbsp;<br /><span style="color: #008080; ">149</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;VARIANT&nbsp;vtProp;<br /><span style="color: #008080; ">150</span>&nbsp;<br /><span style="color: #008080; ">151</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #008000; ">//</span><span style="color: #008000; ">&nbsp;Get&nbsp;the&nbsp;value&nbsp;of&nbsp;the&nbsp;Name&nbsp;property</span><span style="color: #008000; "><br /></span><span style="color: #008080; ">152</span>&nbsp;<span style="color: #008000; "></span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;hres&nbsp;=&nbsp;pclsObj-&gt;Get(L"<span style="color: red; ">Name</span>",&nbsp;0,&nbsp;&amp;vtProp,&nbsp;0,&nbsp;0);<span style="color: #008000; ">//此处把Name改成对应的要获取的属性值</span><br /><span style="color: #008080; ">153</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;wcout&nbsp;&lt;&lt;&nbsp;"Manufacturer&nbsp;Name&nbsp;:&nbsp;"&nbsp;&lt;&lt;&nbsp;vtProp.bstrVal&nbsp;&lt;&lt;&nbsp;endl;<br /><span style="color: #008080; ">154</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;VariantClear(&amp;vtProp);<br /><span style="color: #008080; ">155</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br /><span style="color: #008080; ">156</span>&nbsp;<br /><span style="color: #008080; ">157</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br /><span style="color: #008080; ">158</span>&nbsp;<br /><span style="color: #008080; ">159</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #008000; ">//</span><span style="color: #008000; ">&nbsp;Cleanup<br /></span><span style="color: #008080; ">160</span>&nbsp;<span style="color: #008000; ">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000; ">//</span><span style="color: #008000; ">&nbsp;========</span><span style="color: #008000; "><br /></span><span style="color: #008080; ">161</span>&nbsp;<span style="color: #008000; "></span><br /><span style="color: #008080; ">162</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;pSvc-&gt;Release();<br /><span style="color: #008080; ">163</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;pLoc-&gt;Release();&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br /><span style="color: #008080; ">164</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;CoUninitialize();<br /><span style="color: #008080; ">165</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">return</span>&nbsp;0;<br /><span style="color: #008080; ">166</span>&nbsp;}<br /><span style="color: #008080; ">167</span>&nbsp;</div><p>&nbsp;</p><img src ="http://www.cppblog.com/lizao2/aggbug/197548.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/lizao2/" target="_blank">hello wold!</a> 2013-01-24 21:54 <a href="http://www.cppblog.com/lizao2/archive/2013/01/24/197548.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>解锁账户</title><link>http://www.cppblog.com/lizao2/archive/2013/01/11/197190.html</link><dc:creator>hello wold!</dc:creator><author>hello wold!</author><pubDate>Fri, 11 Jan 2013 02:59:00 GMT</pubDate><guid>http://www.cppblog.com/lizao2/archive/2013/01/11/197190.html</guid><wfw:comment>http://www.cppblog.com/lizao2/comments/197190.html</wfw:comment><comments>http://www.cppblog.com/lizao2/archive/2013/01/11/197190.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/lizao2/comments/commentRss/197190.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/lizao2/services/trackbacks/197190.html</trackback:ping><description><![CDATA[<p style="margin: 0px; padding-bottom: 15px; line-height: 20px; font-family: 'Segoe UI', 'Lucida Grande', Verdana, Arial, Helvetica, sans-serif; color: #454545 !important;">When the number of failed logon attempts is exceeded, the user account becomes locked out for the number of minutes specified by the&nbsp;<a href="http://msdn.microsoft.com/zh-cn/library/windows/desktop/ms676840(v=vs.85).aspx" style="text-decoration: initial; font-family: 'Segoe UI' !important; color: #1570a6 !important;"><strong xmlns="http://www.w3.org/1999/xhtml">lockoutDuration</strong></a>&nbsp;attribute. The&nbsp;<a href="http://msdn.microsoft.com/zh-cn/library/windows/desktop/aa746343(v=vs.85).aspx" style="text-decoration: initial; font-family: 'Segoe UI' !important; color: #1570a6 !important;"><strong xmlns="http://www.w3.org/1999/xhtml">IADsUser.IsAccountLocked</strong></a>&nbsp;property appears to be the property to use to read and modify the lockout state of a user account, but the WinNT ADSI provider has restrictions that limit the use of the&nbsp;<strong>IsAccountLocked</strong>&nbsp;property.</p><h3><a id="Resetting_the_Account_Lockout_Status" style="color: #00709f; font-family: 'Segoe UI' !important;"></a><a id="resetting_the_account_lockout_status" style="color: #00709f; font-family: 'Segoe UI' !important;"></a><a id="RESETTING_THE_ACCOUNT_LOCKOUT_STATUS" style="color: #00709f; font-family: 'Segoe UI' !important;"></a>Resetting the Account Lockout Status</h3><p style="margin: 0px; padding-bottom: 15px; line-height: 20px; font-family: 'Segoe UI', 'Lucida Grande', Verdana, Arial, Helvetica, sans-serif; color: #454545 !important;">When using the WinNT provider, the&nbsp;<a href="http://msdn.microsoft.com/zh-cn/library/windows/desktop/aa746343(v=vs.85).aspx" style="text-decoration: initial; font-family: 'Segoe UI' !important; color: #1570a6 !important;"><strong xmlns="http://www.w3.org/1999/xhtml">IsAccountLocked</strong></a>&nbsp;property can only be set to&nbsp;<strong>FALSE</strong>, which unlocks the account. Attempting to set the&nbsp;<strong>IsAccountLocked</strong>&nbsp;property to&nbsp;<strong>TRUE</strong>&nbsp;will fail. Only the system can lock an account.</p><p style="margin: 0px; padding-bottom: 15px; line-height: 20px; font-family: 'Segoe UI', 'Lucida Grande', Verdana, Arial, Helvetica, sans-serif; color: #454545 !important;">The following code example demonstrates how to use Visual Basic with ADSI to unlock a user account.<br /></p><div style="background-color:#eeeeee;font-size:13px;border:1px solid #CCCCCC;padding-right: 5px;padding-bottom: 4px;padding-left: 4px;padding-top: 4px;width: 98%;word-break:break-all"><img id="Code_Closed_Image_105814" onclick="this.style.display='none'; Code_Closed_Text_105814.style.display='none'; Code_Open_Image_105814.style.display='inline'; Code_Open_Text_105814.style.display='inline';" height="16" src="http://www.cppblog.com/images/OutliningIndicators/ContractedBlock.gif" width="11" align="top"><img id="Code_Open_Image_105814" style="display: none" onclick="this.style.display='none'; Code_Open_Text_105814.style.display='none'; Code_Closed_Image_105814.style.display='inline'; Code_Closed_Text_105814.style.display='inline';" height="16" src="http://www.cppblog.com/images/OutliningIndicators/ExpandedBlockStart.gif" width="11" align="top"><span id="Code_Closed_Text_105814" style="border-right: #808080 1px solid; border-top: #808080 1px solid; border-left: #808080 1px solid; border-bottom: #808080 1px solid; background-color: #ffffff">解锁账户</span><span id="Code_Open_Text_105814" style="display: none"><br /><!--<br /><br />Code highlighting produced by Actipro CodeHighlighter (freeware)<br />http://www.CodeHighlighter.com/<br /><br />--><span style="color: #000000; ">HRESULT&nbsp;UnlockAccount(LPCWSTR&nbsp;pwszUserDN)<br />{<br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">if</span><span style="color: #000000; ">(</span><span style="color: #000000; ">!</span><span style="color: #000000; ">pwszUserDN)<br />&nbsp;&nbsp;&nbsp;&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">return</span><span style="color: #000000; ">&nbsp;E_INVALIDARG;<br />&nbsp;&nbsp;&nbsp;&nbsp;}<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000; ">//</span><span style="color: #008000; ">&nbsp;Build&nbsp;the&nbsp;ADsPath.</span><span style="color: #008000; "><br /></span><span style="color: #000000; ">&nbsp;&nbsp;&nbsp;&nbsp;CComBSTR&nbsp;sbstr&nbsp;</span><span style="color: #000000; ">=</span><span style="color: #000000; ">&nbsp;</span><span style="color: #000000; ">"</span><span style="color: #000000; ">WinNT://</span><span style="color: #000000; ">"</span><span style="color: #000000; ">;<br />&nbsp;&nbsp;&nbsp;&nbsp;sbstr&nbsp;</span><span style="color: #000000; ">+=</span><span style="color: #000000; ">&nbsp;pwszUserDN;<br />&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;HRESULT&nbsp;hr;<br />&nbsp;&nbsp;&nbsp;&nbsp;CComPtr</span><span style="color: #000000; ">&lt;</span><span style="color: #000000; ">IADsUser</span><span style="color: #000000; ">&gt;</span><span style="color: #000000; ">&nbsp;spADsUser;<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000; ">//</span><span style="color: #008000; ">&nbsp;Bind&nbsp;to&nbsp;the&nbsp;object.</span><span style="color: #008000; "><br /></span><span style="color: #000000; ">&nbsp;&nbsp;&nbsp;&nbsp;hr&nbsp;</span><span style="color: #000000; ">=</span><span style="color: #000000; ">&nbsp;ADsOpenObject(sbstr,<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;NULL,<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;NULL,<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;ADS_SECURE_AUTHENTICATION,<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;IID_IADsUser,<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(</span><span style="color: #0000FF; ">void</span><span style="color: #000000; ">**</span><span style="color: #000000; ">)</span><span style="color: #000000; ">&amp;</span><span style="color: #000000; ">spADsUser);<br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">if</span><span style="color: #000000; ">(S_OK&nbsp;</span><span style="color: #000000; ">!=</span><span style="color: #000000; ">&nbsp;hr)<br />&nbsp;&nbsp;&nbsp;&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">return</span><span style="color: #000000; ">&nbsp;hr;<br />&nbsp;&nbsp;&nbsp;&nbsp;}<br />&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000; ">//</span><span style="color: #008000; ">&nbsp;Set&nbsp;the&nbsp;IsAccountLocked&nbsp;property&nbsp;to&nbsp;FALSE;</span><span style="color: #008000; "><br /></span><span style="color: #000000; ">&nbsp;&nbsp;&nbsp;&nbsp;hr&nbsp;</span><span style="color: #000000; ">=</span><span style="color: #000000; ">&nbsp;spADsUser</span><span style="color: #000000; ">-&gt;</span><span style="color: #000000; ">put_IsAccountLocked(VARIANT_FALSE);<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000; ">//</span><span style="color: #008000; ">&nbsp;Commit&nbsp;the&nbsp;changes&nbsp;to&nbsp;the&nbsp;server.</span><span style="color: #008000; "><br /></span><span style="color: #000000; ">&nbsp;&nbsp;&nbsp;&nbsp;hr&nbsp;</span><span style="color: #000000; ">=</span><span style="color: #000000; ">&nbsp;spADsUser</span><span style="color: #000000; ">-&gt;</span><span style="color: #000000; ">SetInfo();<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">return</span><span style="color: #000000; ">&nbsp;hr;<br />}<br /></span></span></div><h3>Reading the Account Lockout Status</h3><p style="margin: 0px; padding-bottom: 15px;">With the WinNT provider, the&nbsp;<a href="http://msdn.microsoft.com/zh-cn/library/windows/desktop/aa746343(v=vs.85).aspx" style="text-decoration: initial; font-family: 'Segoe UI' !important; color: #1570a6 !important;"><strong xmlns="http://www.w3.org/1999/xhtml">IsAccountLocked</strong></a>&nbsp;property can be used to determine if an account is locked out. If an account is locked out, the&nbsp;<strong>IsAccountLocked</strong>&nbsp;property will contain&nbsp;<strong>TRUE</strong>. If an account is not locked out, the<strong>IsAccountLocked</strong>&nbsp;property will contain&nbsp;<strong>FALSE</strong>.</p><p style="margin: 0px; padding-bottom: 15px;">The following code example demonstrates how to use Visual Basic with ADSI to determine if an account is locked out.<br /><div style="background-color:#eeeeee;font-size:13px;border:1px solid #CCCCCC;padding-right: 5px;padding-bottom: 4px;padding-left: 4px;padding-top: 4px;width: 98%;word-break:break-all"><img id="Code_Closed_Image_105945" onclick="this.style.display='none'; Code_Closed_Text_105945.style.display='none'; Code_Open_Image_105945.style.display='inline'; Code_Open_Text_105945.style.display='inline';" height="16" src="http://www.cppblog.com/images/OutliningIndicators/ContractedBlock.gif" width="11" align="top"><img id="Code_Open_Image_105945" style="display: none" onclick="this.style.display='none'; Code_Open_Text_105945.style.display='none'; Code_Closed_Image_105945.style.display='inline'; Code_Closed_Text_105945.style.display='inline';" height="16" src="http://www.cppblog.com/images/OutliningIndicators/ExpandedBlockStart.gif" width="11" align="top"><span id="Code_Closed_Text_105945" style="border-right: #808080 1px solid; border-top: #808080 1px solid; border-left: #808080 1px solid; border-bottom: #808080 1px solid; background-color: #ffffff">判断账户是否锁定</span><span id="Code_Open_Text_105945" style="display: none"><br /><!--<br /><br />Code highlighting produced by Actipro CodeHighlighter (freeware)<br />http://www.CodeHighlighter.com/<br /><br />--><br />HRESULT&nbsp;IsAccountLocked(LPCWSTR&nbsp;pwszUserDN,&nbsp;BOOL&nbsp;*pfLocked)<br />{<br />&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">if</span>(!pwszUserDN&nbsp;||&nbsp;!pfLocked)<br />&nbsp;&nbsp;&nbsp;&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">return</span>&nbsp;E_INVALIDARG;<br />&nbsp;&nbsp;&nbsp;&nbsp;}<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;*pfLocked&nbsp;=&nbsp;FALSE;<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #008000; ">//</span><span style="color: #008000; ">&nbsp;Build&nbsp;the&nbsp;ADsPath.</span><span style="color: #008000; "><br /></span>&nbsp;&nbsp;&nbsp;&nbsp;CComBSTR&nbsp;sbstr&nbsp;=&nbsp;"WinNT://";<br />&nbsp;&nbsp;&nbsp;&nbsp;sbstr&nbsp;+=&nbsp;pwszUserDN;<br />&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;HRESULT&nbsp;hr;<br />&nbsp;&nbsp;&nbsp;&nbsp;CComPtr&lt;IADsUser&gt;&nbsp;spADsUser;<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #008000; ">//</span><span style="color: #008000; ">&nbsp;Bind&nbsp;to&nbsp;the&nbsp;object.</span><span style="color: #008000; "><br /></span>&nbsp;&nbsp;&nbsp;&nbsp;hr&nbsp;=&nbsp;ADsOpenObject(sbstr,<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;NULL,<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;NULL,<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;ADS_SECURE_AUTHENTICATION,<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;IID_IADsUser,<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(<span style="color: #0000FF; ">void</span>**)&amp;spADsUser);<br />&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">if</span>(S_OK&nbsp;!=&nbsp;hr)<br />&nbsp;&nbsp;&nbsp;&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">return</span>&nbsp;hr;<br />&nbsp;&nbsp;&nbsp;&nbsp;}<br />&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;VARIANT_BOOL&nbsp;vfLocked;<br />&nbsp;&nbsp;&nbsp;&nbsp;hr&nbsp;=&nbsp;spADsUser&gt;get_IsAccountLocked(&amp;vfLocked);<br />&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">if</span>(S_OK&nbsp;!=&nbsp;hr)<br />&nbsp;&nbsp;&nbsp;&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">return</span>&nbsp;hr;<br />&nbsp;&nbsp;&nbsp;&nbsp;}<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;*pfLocked&nbsp;=&nbsp;(vfLocked&nbsp;!=&nbsp;0);<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">return</span>&nbsp;hr;<br />}<br /></span></div><img id="Code_Closed_Image_105852" onclick="this.style.display='none'; Code_Closed_Text_105852.style.display='none'; Code_Open_Image_105852.style.display='inline'; Code_Open_Text_105852.style.display='inline';" height="16" src="http://www.cppblog.com/images/OutliningIndicators/ContractedBlock.gif" width="11" align="top" style="font-size: 13px; display: none;"><span id="Code_Closed_Text_105852" style="font-size: 13px; border: 1px solid #808080; background-color: #ffffff; display: none;">获取账户锁定状态</span></p><p>&nbsp;</p><img src ="http://www.cppblog.com/lizao2/aggbug/197190.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/lizao2/" target="_blank">hello wold!</a> 2013-01-11 10:59 <a href="http://www.cppblog.com/lizao2/archive/2013/01/11/197190.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>获取审核策略</title><link>http://www.cppblog.com/lizao2/archive/2013/01/10/197169.html</link><dc:creator>hello wold!</dc:creator><author>hello wold!</author><pubDate>Thu, 10 Jan 2013 07:41:00 GMT</pubDate><guid>http://www.cppblog.com/lizao2/archive/2013/01/10/197169.html</guid><wfw:comment>http://www.cppblog.com/lizao2/comments/197169.html</wfw:comment><comments>http://www.cppblog.com/lizao2/archive/2013/01/10/197169.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/lizao2/comments/commentRss/197169.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/lizao2/services/trackbacks/197169.html</trackback:ping><description><![CDATA[<div>#include &lt;windows.h&gt;</div><div>#include "Ntsecapi.h"</div><div></div><div>LSA_HANDLE GetPolicyHandle()</div><div>{</div><div><span style="white-space:pre">	</span>LSA_OBJECT_ATTRIBUTES ObjectAttributes;</div><div><span style="white-space:pre">	</span>WCHAR SystemName[256] = {0};</div><div><span style="white-space:pre">	</span>ULONG SystemNameLength = sizeof(SystemName)/sizeof(SystemName[0]);</div><div><span style="white-space:pre">	</span>LSA_UNICODE_STRING lusSystemName;</div><div><span style="white-space:pre">	</span>NTSTATUS ntsResult;</div><div><span style="white-space:pre">	</span>LSA_HANDLE lsahPolicyHandle;</div><div></div><div><span style="white-space:pre">	</span>GetComputerNameW(SystemName, &amp;SystemNameLength);</div><div><span style="white-space:pre">	</span></div><div><span style="white-space:pre">	</span>// Object attributes are reserved, so initialize to zeros.</div><div><span style="white-space:pre">	</span>ZeroMemory(&amp;ObjectAttributes, sizeof(ObjectAttributes));</div><div><span style="white-space:pre">	</span></div><div><span style="white-space:pre">	</span>//Initialize an LSA_UNICODE_STRING to the server name.</div><div><span style="white-space:pre">	</span>SystemNameLength = wcslen(SystemName);</div><div><span style="white-space:pre">	</span>lusSystemName.Buffer = SystemName;</div><div><span style="white-space:pre">	</span>lusSystemName.Length = SystemNameLength * sizeof(WCHAR);</div><div><span style="white-space:pre">	</span>lusSystemName.MaximumLength = (SystemNameLength+1) * sizeof(WCHAR);</div><div><span style="white-space:pre">	</span></div><div><span style="white-space:pre">	</span>// Get a handle to the Policy object.</div><div><span style="white-space:pre">	</span>ntsResult = LsaOpenPolicy(</div><div>&nbsp; &nbsp; &nbsp; &nbsp; &amp;lusSystemName, &nbsp; &nbsp;//Name of the target system.</div><div>&nbsp; &nbsp; &nbsp; &nbsp; &amp;ObjectAttributes, //Object attributes.</div><div>&nbsp; &nbsp; &nbsp; &nbsp; POLICY_ALL_ACCESS, //Desired access permissions.</div><div>&nbsp; &nbsp; &nbsp; &nbsp; &amp;lsahPolicyHandle &nbsp;//Receives the policy handle.</div><div><span style="white-space:pre">		</span>);</div><div><span style="white-space:pre">	</span></div><div><span style="white-space:pre">	</span>if (ntsResult != ERROR_SUCCESS)</div><div><span style="white-space:pre">	</span>{</div><div><span style="white-space:pre">		</span>// An error occurred. Display it as a win32 error code.</div><div><span style="white-space:pre">		</span>wprintf(L"OpenPolicy returned %lu\n",</div><div><span style="white-space:pre">			</span>LsaNtStatusToWinError(ntsResult));</div><div><span style="white-space:pre">		</span>return NULL;</div><div><span style="white-space:pre">	</span>}&nbsp;</div><div><span style="white-space:pre">	</span>return lsahPolicyHandle;</div><div>}</div><div></div><div>BOOL GetAccountDomainInfo(LSA_HANDLE PolicyHandle)</div><div>{</div><div><span style="white-space:pre">	</span>NTSTATUS ntsResult = ERROR_SUCCESS;</div><div><span style="white-space:pre">	</span>PPOLICY_AUDIT_EVENTS_INFO &nbsp;pPAEInfo = NULL;</div><div><span style="white-space:pre">	</span>PWCHAR name = NULL;</div><div><span style="white-space:pre">	</span></div><div><span style="white-space:pre">	</span>ntsResult = LsaQueryInformationPolicy(</div><div><span style="white-space:pre">		</span>PolicyHandle, &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; // Open handle to a Policy object.</div><div><span style="white-space:pre">		</span>PolicyAuditEventsInformation, // The information to get.</div><div><span style="white-space:pre">		</span>(PVOID *)&amp;pPAEInfo &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;// Storage for the information.</div><div><span style="white-space:pre">		</span>);</div><div><span style="white-space:pre">	</span></div><div><span style="white-space:pre">	</span>if (ntsResult == ERROR_SUCCESS)</div><div><span style="white-space:pre">	</span>{ &nbsp;</div><div><span style="white-space:pre">		</span>// There is no guarantee that the LSA_UNICODE_STRING buffer</div><div><span style="white-space:pre">		</span>// is null terminated, so copy the name to a buffer that is.</div><div><span style="white-space:pre">		</span>wprintf(L"auditingMode = %d\n", pPAEInfo-&gt;AuditingMode);</div><div></div><div><span style="white-space:pre">		</span></div><div><span style="white-space:pre">		</span>wprintf(L"AuditCategorySystem = %d\n", pPAEInfo-&gt;EventAuditingOptions[AuditCategorySystem]);</div><div><span style="white-space:pre">		</span>wprintf(L"AuditCategoryLogon = %d\n", pPAEInfo-&gt;EventAuditingOptions[AuditCategoryLogon]);</div><div><span style="white-space:pre">		</span>wprintf(L"AuditCategoryObjectAccess = %d\n", pPAEInfo-&gt;EventAuditingOptions[AuditCategoryObjectAccess]);</div><div><span style="white-space:pre">		</span>wprintf(L"AuditCategoryPrivilegeUse = %d\n", pPAEInfo-&gt;EventAuditingOptions[AuditCategoryPrivilegeUse]);</div><div><span style="white-space:pre">		</span>wprintf(L"AuditCategoryDetailedTracking = %d\n", pPAEInfo-&gt;EventAuditingOptions[AuditCategoryDetailedTracking]);</div><div><span style="white-space:pre">		</span>wprintf(L"AuditCategoryPolicyChange = %d\n", pPAEInfo-&gt;EventAuditingOptions[AuditCategoryPolicyChange]);</div><div><span style="white-space:pre">		</span>wprintf(L"AuditCategoryAccountManagement = %d\n", pPAEInfo-&gt;EventAuditingOptions[AuditCategoryAccountManagement]);</div><div><span style="white-space:pre">		</span>wprintf(L"AuditCategoryDirectoryServiceAccess = %d\n", pPAEInfo-&gt;EventAuditingOptions[AuditCategoryDirectoryServiceAccess]);</div><div><span style="white-space:pre">		</span>wprintf(L"AuditCategoryAccountLogon = %d\n", pPAEInfo-&gt;EventAuditingOptions[AuditCategoryAccountLogon]);</div><div></div><div><span style="white-space:pre">		</span>if (ERROR_SUCCESS != LsaFreeMemory(pPAEInfo))</div><div><span style="white-space:pre">			</span>wprintf(L"LsaFreeMemory error\n");</div><div><span style="white-space:pre">	</span>}</div><div><span style="white-space:pre">	</span>else</div><div><span style="white-space:pre">	</span>{</div><div><span style="white-space:pre">		</span>// Show the corresponding win32 error code.</div><div><span style="white-space:pre">		</span>wprintf(</div><div><span style="white-space:pre">			</span>L"Error obtaining account domain information - (win32) %lu\n",</div><div><span style="white-space:pre">			</span>LsaNtStatusToWinError(ntsResult));</div><div><span style="white-space:pre">	</span>}</div><div><span style="white-space:pre">	</span></div><div><span style="white-space:pre">	</span>return !ntsResult;</div><div>}</div><div><br /></div><div>int main(int argc, char* argv[])</div><div>{</div><div><span style="white-space:pre">	</span>LSA_HANDLE lh = NULL;</div><div></div><div><span style="white-space:pre">	</span>lh = GetPolicyHandle();</div><div><span style="white-space:pre">	</span>if(lh)</div><div><span style="white-space:pre">	</span>{</div><div><span style="white-space:pre">		</span>GetAccountDomainInfo(lh);</div><div><span style="white-space:pre">	</span>}</div><div><span style="white-space: pre;">	</span>return 0;</div><div>}</div><img src ="http://www.cppblog.com/lizao2/aggbug/197169.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/lizao2/" target="_blank">hello wold!</a> 2013-01-10 15:41 <a href="http://www.cppblog.com/lizao2/archive/2013/01/10/197169.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>sqlserver合并数据库</title><link>http://www.cppblog.com/lizao2/archive/2013/01/10/197168.html</link><dc:creator>hello wold!</dc:creator><author>hello wold!</author><pubDate>Thu, 10 Jan 2013 07:28:00 GMT</pubDate><guid>http://www.cppblog.com/lizao2/archive/2013/01/10/197168.html</guid><wfw:comment>http://www.cppblog.com/lizao2/comments/197168.html</wfw:comment><comments>http://www.cppblog.com/lizao2/archive/2013/01/10/197168.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/lizao2/comments/commentRss/197168.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/lizao2/services/trackbacks/197168.html</trackback:ping><description><![CDATA[把一个库里的表+数据放到另一个库中<br /><br /><div>USE [<span style="color: red;">A]</span></div><div>IF &nbsp;EXISTS (SELECT * FROM sys.objects WHERE object_id = OBJECT_ID(N'[dbo].[<span style="color: red;">MyTable</span>]') AND type in (N'U'))</div><div>DROP TABLE [dbo].[<span style="color: red;">MyTable</span>]<br /><div>USE [<span style="color: red;">B]</span></div><div>select * into <span style="color: red;">A</span>.dbo.<span style="color: red;">MyTable</span>&nbsp;from&nbsp;<span style="color: red;">MyTable<br /><br /></span><span style="color: #000000;">如果A库中有表MyTable，则删除，然后把B库中的MyTalbe复制到A库中</span><span style="color: red;"></span></div></div><img src ="http://www.cppblog.com/lizao2/aggbug/197168.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/lizao2/" target="_blank">hello wold!</a> 2013-01-10 15:28 <a href="http://www.cppblog.com/lizao2/archive/2013/01/10/197168.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>vc6与win7不兼容&amp;vc6的sdk</title><link>http://www.cppblog.com/lizao2/archive/2013/01/03/196924.html</link><dc:creator>hello wold!</dc:creator><author>hello wold!</author><pubDate>Thu, 03 Jan 2013 14:30:00 GMT</pubDate><guid>http://www.cppblog.com/lizao2/archive/2013/01/03/196924.html</guid><wfw:comment>http://www.cppblog.com/lizao2/comments/196924.html</wfw:comment><comments>http://www.cppblog.com/lizao2/archive/2013/01/03/196924.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/lizao2/comments/commentRss/196924.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/lizao2/services/trackbacks/196924.html</trackback:ping><description><![CDATA[右键单击MSDEV.EXE，选择以管理员权限运行就行了。<br /><span style="font-size: 12px;">sdk &nbsp; <a href="http://www.microsoft.com/en-us/download/details.aspx?id=6510">http://www.microsoft.com/en-us/download/details.aspx?id=6510<br /></a>&nbsp;很小的一个文件，然后貌似得联网下载安装，反正这样就能用了<br /><br />完整版的在这里<br /></span><div><a href="http://www.microsoft.com/en-us/download/details.aspx?id=12261">http://www.microsoft.com/en-us/download/details.aspx?id=12261</a></div><img src ="http://www.cppblog.com/lizao2/aggbug/196924.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/lizao2/" target="_blank">hello wold!</a> 2013-01-03 22:30 <a href="http://www.cppblog.com/lizao2/archive/2013/01/03/196924.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>如何在C++Builder中檢測硬件</title><link>http://www.cppblog.com/lizao2/archive/2012/12/27/196724.html</link><dc:creator>hello wold!</dc:creator><author>hello wold!</author><pubDate>Thu, 27 Dec 2012 05:52:00 GMT</pubDate><guid>http://www.cppblog.com/lizao2/archive/2012/12/27/196724.html</guid><wfw:comment>http://www.cppblog.com/lizao2/comments/196724.html</wfw:comment><comments>http://www.cppblog.com/lizao2/archive/2012/12/27/196724.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/lizao2/comments/commentRss/196724.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/lizao2/services/trackbacks/196724.html</trackback:ping><description><![CDATA[<span style="font-family: sans-serif, taipei, Tahoma, Verdana, Arial; font-size: 16px; line-height: normal; background-color: #ffffff;">如何在C++Builder中檢測硬件</span><br style="font-family: sans-serif, taipei, Tahoma, Verdana, Arial; font-size: 16px; line-height: normal; background-color: #ffffff;" /><span style="font-family: sans-serif, taipei, Tahoma, Verdana, Arial; font-size: 16px; line-height: normal; background-color: #ffffff;">（西安　楊洪辰）</span><br style="font-family: sans-serif, taipei, Tahoma, Verdana, Arial; font-size: 16px; line-height: normal; background-color: #ffffff;" /><br style="font-family: sans-serif, taipei, Tahoma, Verdana, Arial; font-size: 16px; line-height: normal; background-color: #ffffff;" /><span style="font-family: sans-serif, taipei, Tahoma, Verdana, Arial; font-size: 16px; line-height: normal; background-color: #ffffff;">資料來源: http://go5.163.com/yarrows/tips/cbc_10.htm</span><br style="font-family: sans-serif, taipei, Tahoma, Verdana, Arial; font-size: 16px; line-height: normal; background-color: #ffffff;" /><br style="font-family: sans-serif, taipei, Tahoma, Verdana, Arial; font-size: 16px; line-height: normal; background-color: #ffffff;" /><span style="font-family: sans-serif, taipei, Tahoma, Verdana, Arial; font-size: 16px; line-height: normal; background-color: #ffffff;">　　在我們編寫的程序中常常要和硬件打交道,那麼如何在程序中確定系統中是否有該設備,</span><br style="font-family: sans-serif, taipei, Tahoma, Verdana, Arial; font-size: 16px; line-height: normal; background-color: #ffffff;" /><span style="font-family: sans-serif, taipei, Tahoma, Verdana, Arial; font-size: 16px; line-height: normal; background-color: #ffffff;">它的運行狀態又是怎樣的呢﹖對於初學者來說，這個問題常常不好解決，其實只需簡單地利</span><br style="font-family: sans-serif, taipei, Tahoma, Verdana, Arial; font-size: 16px; line-height: normal; background-color: #ffffff;" /><span style="font-family: sans-serif, taipei, Tahoma, Verdana, Arial; font-size: 16px; line-height: normal; background-color: #ffffff;">用幾個API函數，硬件的問題並不神秘。下面就讓我們一起看看在C＋＋ Builder中是如何</span><br style="font-family: sans-serif, taipei, Tahoma, Verdana, Arial; font-size: 16px; line-height: normal; background-color: #ffffff;" /><span style="font-family: sans-serif, taipei, Tahoma, Verdana, Arial; font-size: 16px; line-height: normal; background-color: #ffffff;">檢測硬件的。</span><br style="font-family: sans-serif, taipei, Tahoma, Verdana, Arial; font-size: 16px; line-height: normal; background-color: #ffffff;" /><span style="font-family: sans-serif, taipei, Tahoma, Verdana, Arial; font-size: 16px; line-height: normal; background-color: #ffffff;">　　1. 檢測CPU的型號</span><br style="font-family: sans-serif, taipei, Tahoma, Verdana, Arial; font-size: 16px; line-height: normal; background-color: #ffffff;" /><span style="font-family: sans-serif, taipei, Tahoma, Verdana, Arial; font-size: 16px; line-height: normal; background-color: #ffffff;">　　先讓我們從最簡單的做起，看一看自己的CPU型號。首先，在C＋＋ Builder中畫出圖1</span><br style="font-family: sans-serif, taipei, Tahoma, Verdana, Arial; font-size: 16px; line-height: normal; background-color: #ffffff;" /><span style="font-family: sans-serif, taipei, Tahoma, Verdana, Arial; font-size: 16px; line-height: normal; background-color: #ffffff;">所示的窗體，在下面的幾個例子中我們將一直使用這個窗體作示範，它包括一個用來激活測</span><br style="font-family: sans-serif, taipei, Tahoma, Verdana, Arial; font-size: 16px; line-height: normal; background-color: #ffffff;" /><span style="font-family: sans-serif, taipei, Tahoma, Verdana, Arial; font-size: 16px; line-height: normal; background-color: #ffffff;">試的Button和一個用來顯示結果的Memo。我們可以用GetSystemInfo這個API獲得CPU的型</span><br style="font-family: sans-serif, taipei, Tahoma, Verdana, Arial; font-size: 16px; line-height: normal; background-color: #ffffff;" /><span style="font-family: sans-serif, taipei, Tahoma, Verdana, Arial; font-size: 16px; line-height: normal; background-color: #ffffff;">號。將下列代碼添加到Button的Click事件裡就可以了：</span><br />　　void __fastcall TForm1::Button1Click(TObject ＊Sender)<br />　　{<br />　　//獲得CPU型號<br />　　SYSTEM_INFO systeminfo;<br />　　GetSystemInfo (＆systeminfo);<br />　　Memo1&#8594;Lines&#8594;Add(&#8220;您的CPU類型是:&#8221;＋String( systeminfo.dwProcessorType ));<br />　　}<br style="font-family: sans-serif, taipei, Tahoma, Verdana, Arial; font-size: 16px; line-height: normal; background-color: #ffffff;" /><span style="font-family: sans-serif, taipei, Tahoma, Verdana, Arial; font-size: 16px; line-height: normal; background-color: #ffffff;">　　運行它，點擊Test試試，CPU型號出來了吧！</span><br style="font-family: sans-serif, taipei, Tahoma, Verdana, Arial; font-size: 16px; line-height: normal; background-color: #ffffff;" /><span style="font-family: sans-serif, taipei, Tahoma, Verdana, Arial; font-size: 16px; line-height: normal; background-color: #ffffff;">　　2.檢測內存狀態</span><br style="font-family: sans-serif, taipei, Tahoma, Verdana, Arial; font-size: 16px; line-height: normal; background-color: #ffffff;" /><span style="font-family: sans-serif, taipei, Tahoma, Verdana, Arial; font-size: 16px; line-height: normal; background-color: #ffffff;">　　獲得內存狀態的方法和CPU型號差不多，只是他用到的是另外一個API：GlobalMemoryStatus。</span><br style="font-family: sans-serif, taipei, Tahoma, Verdana, Arial; font-size: 16px; line-height: normal; background-color: #ffffff;" /><span style="font-family: sans-serif, taipei, Tahoma, Verdana, Arial; font-size: 16px; line-height: normal; background-color: #ffffff;">其中，成員dwTotalPhys用來獲得物理內存總量，而dwAvailPhys顧名思義是有效物理內存</span><br style="font-family: sans-serif, taipei, Tahoma, Verdana, Arial; font-size: 16px; line-height: normal; background-color: #ffffff;" /><span style="font-family: sans-serif, taipei, Tahoma, Verdana, Arial; font-size: 16px; line-height: normal; background-color: #ffffff;">的意思。我們只要把下面幾行代碼加到上面程序的後面就可以了（不用重做，下同）：</span><br style="font-family: sans-serif, taipei, Tahoma, Verdana, Arial; font-size: 16px; line-height: normal; background-color: #ffffff;" /><span style="font-family: sans-serif, taipei, Tahoma, Verdana, Arial; font-size: 16px; line-height: normal; background-color: #ffffff;">　　//獲得內存狀態</span><br />　　MEMORYSTATUS memory;<br />　　memory.dwLength =sizeof(memory); //初始化<br />　　GlobalMemoryStatus(＆memory);<br />　　Memo1&#8594;Lines&#8594;Add(&#8220;您的物理內存是(Mb):&#8221;＋String(int(memory.dwTotalPhys /1024/1024)));<br />　　Memo1&#8594;Lines&#8594;Add(&#8220;其中可用內存是(Kb):&#8221;＋String(int( memory. /1024)));<br style="font-family: sans-serif, taipei, Tahoma, Verdana, Arial; font-size: 16px; line-height: normal; background-color: #ffffff;" /><span style="font-family: sans-serif, taipei, Tahoma, Verdana, Arial; font-size: 16px; line-height: normal; background-color: #ffffff;">　　怎麼樣，看出點門道了麼﹖兩段程序的格式幾乎一模一樣，其實，GetSystemInfo和</span><br style="font-family: sans-serif, taipei, Tahoma, Verdana, Arial; font-size: 16px; line-height: normal; background-color: #ffffff;" /><span style="font-family: sans-serif, taipei, Tahoma, Verdana, Arial; font-size: 16px; line-height: normal; background-color: #ffffff;">GlobalMemoryStatus還可以獲得許多其他有關CPU和內存的信息，就按照上面的格式去套</span><br style="font-family: sans-serif, taipei, Tahoma, Verdana, Arial; font-size: 16px; line-height: normal; background-color: #ffffff;" /><span style="font-family: sans-serif, taipei, Tahoma, Verdana, Arial; font-size: 16px; line-height: normal; background-color: #ffffff;">就行了，更詳細的資料可以去看C＋＋ Builder4的Help。</span><br style="font-family: sans-serif, taipei, Tahoma, Verdana, Arial; font-size: 16px; line-height: normal; background-color: #ffffff;" /><span style="font-family: sans-serif, taipei, Tahoma, Verdana, Arial; font-size: 16px; line-height: normal; background-color: #ffffff;">　　3. 檢測可用硬盤空間</span><br style="font-family: sans-serif, taipei, Tahoma, Verdana, Arial; font-size: 16px; line-height: normal; background-color: #ffffff;" /><span style="font-family: sans-serif, taipei, Tahoma, Verdana, Arial; font-size: 16px; line-height: normal; background-color: #ffffff;">　　好了，經過前面兩個簡單問題的熱身，我們來處理一個稍微復雜的問題：我們知道安</span><br style="font-family: sans-serif, taipei, Tahoma, Verdana, Arial; font-size: 16px; line-height: normal; background-color: #ffffff;" /><span style="font-family: sans-serif, taipei, Tahoma, Verdana, Arial; font-size: 16px; line-height: normal; background-color: #ffffff;">裝程序大都有一個檢測硬盤空間的過程，那麼這是怎麼實現的呢?他用到的是API函數</span><br style="font-family: sans-serif, taipei, Tahoma, Verdana, Arial; font-size: 16px; line-height: normal; background-color: #ffffff;" /><span style="font-family: sans-serif, taipei, Tahoma, Verdana, Arial; font-size: 16px; line-height: normal; background-color: #ffffff;">GetDiskFreeSpace，這個函數輸入一個參數：目標盤的路徑﹔返回四個參數，依次是每簇</span><br style="font-family: sans-serif, taipei, Tahoma, Verdana, Arial; font-size: 16px; line-height: normal; background-color: #ffffff;" /><span style="font-family: sans-serif, taipei, Tahoma, Verdana, Arial; font-size: 16px; line-height: normal; background-color: #ffffff;">的扇區數、每扇區的字節數、空閑的簇數、總簇數。假如我們需要檢測C盤的總容量和可用</span><br style="font-family: sans-serif, taipei, Tahoma, Verdana, Arial; font-size: 16px; line-height: normal; background-color: #ffffff;" /><span style="font-family: sans-serif, taipei, Tahoma, Verdana, Arial; font-size: 16px; line-height: normal; background-color: #ffffff;">容量，那麼可以把以下代碼加到上面的程序中：</span><br style="font-family: sans-serif, taipei, Tahoma, Verdana, Arial; font-size: 16px; line-height: normal; background-color: #ffffff;" /><span style="font-family: sans-serif, taipei, Tahoma, Verdana, Arial; font-size: 16px; line-height: normal; background-color: #ffffff;">　　//獲得C盤可用空間</span><br />　　DWORD sector,byte,cluster,free;<br />　　long int freespace,totalspace;<br />　　GetDiskFreeSpace(&#8220;C:&#8221;,＆sector,＆byte,＆free,＆cluster); //獲得返回參數<br />　　totalspace=int(cluster)＊int(byte)＊int(sector)/1024/1024; //計算總容量<br />　　freespace=int(free)＊int(byte)＊int(sector)/1024/1024; //計算可用空間<br />　　Memo1&#8594;Lines&#8594;Add(&#8220;C盤總空間(Mb):&#8221;＋String(totalspace));<br />　　Memo1&#8594;Lines&#8594;Add(&#8220;C盤可用空間(Mb):&#8221;＋String(freespace));<br style="font-family: sans-serif, taipei, Tahoma, Verdana, Arial; font-size: 16px; line-height: normal; background-color: #ffffff;" /><span style="font-family: sans-serif, taipei, Tahoma, Verdana, Arial; font-size: 16px; line-height: normal; background-color: #ffffff;">　　怎麼樣?現在可以自己做安裝程序了吧！</span><br style="font-family: sans-serif, taipei, Tahoma, Verdana, Arial; font-size: 16px; line-height: normal; background-color: #ffffff;" /><span style="font-family: sans-serif, taipei, Tahoma, Verdana, Arial; font-size: 16px; line-height: normal; background-color: #ffffff;">　　4. 檢測CD－ROM</span><br style="font-family: sans-serif, taipei, Tahoma, Verdana, Arial; font-size: 16px; line-height: normal; background-color: #ffffff;" /><span style="font-family: sans-serif, taipei, Tahoma, Verdana, Arial; font-size: 16px; line-height: normal; background-color: #ffffff;">　　我們在編寫程序時常常需要讀取CD－ROM，可是究竟哪一個盤符是光驅呢﹖有人是將最</span><br style="font-family: sans-serif, taipei, Tahoma, Verdana, Arial; font-size: 16px; line-height: normal; background-color: #ffffff;" /><span style="font-family: sans-serif, taipei, Tahoma, Verdana, Arial; font-size: 16px; line-height: normal; background-color: #ffffff;">後一個盤符當作光驅的，但是當遇到雙光驅或者MO的情況時常常會出錯。其實這個問題用</span><br style="font-family: sans-serif, taipei, Tahoma, Verdana, Arial; font-size: 16px; line-height: normal; background-color: #ffffff;" /><span style="font-family: sans-serif, taipei, Tahoma, Verdana, Arial; font-size: 16px; line-height: normal; background-color: #ffffff;">一個API來解決並不困難，這就是：GetDriveType()，這個函數返回一個0～6之間的值，</span><br style="font-family: sans-serif, taipei, Tahoma, Verdana, Arial; font-size: 16px; line-height: normal; background-color: #ffffff;" /><span style="font-family: sans-serif, taipei, Tahoma, Verdana, Arial; font-size: 16px; line-height: normal; background-color: #ffffff;">依次代表：0&#9472;未知盤、1&#9472;不存在、2&#9472;可移動磁盤、3&#9472;固定磁盤、4&#9472;網絡磁盤、</span><br style="font-family: sans-serif, taipei, Tahoma, Verdana, Arial; font-size: 16px; line-height: normal; background-color: #ffffff;" /><span style="font-family: sans-serif, taipei, Tahoma, Verdana, Arial; font-size: 16px; line-height: normal; background-color: #ffffff;">5&#9472;CD－ROM、6&#9472;內存虛擬盤。因此我們可以添加下面代碼來尋找CD－ROM：</span><br style="font-family: sans-serif, taipei, Tahoma, Verdana, Arial; font-size: 16px; line-height: normal; background-color: #ffffff;" /><span style="font-family: sans-serif, taipei, Tahoma, Verdana, Arial; font-size: 16px; line-height: normal; background-color: #ffffff;">　　// 獲得CD－ROM信息</span><br />　　UINT type;<br />　　char name;<br />　　for (name=&#8216;C&#8217;;name&lt;=&#8216;Z&#8217;;name＋＋) //循環檢測A～Z<br />　　{ type = GetDriveType((String(name)＋String(&#8216;:&#8217;)).c_str()); //獲得磁盤類型<br />　　if (type==5)<br />　　Memo1&#8594;Lines&#8594;Add(&#8220;您的光驅盤符為:&#8221;＋String(name));<br />　　 }<br style="font-family: sans-serif, taipei, Tahoma, Verdana, Arial; font-size: 16px; line-height: normal; background-color: #ffffff;" /><span style="font-family: sans-serif, taipei, Tahoma, Verdana, Arial; font-size: 16px; line-height: normal; background-color: #ffffff;">　　得到光驅盤符之後我們可以進一步利用API函數GetVolumeInformation檢測光驅中</span><br style="font-family: sans-serif, taipei, Tahoma, Verdana, Arial; font-size: 16px; line-height: normal; background-color: #ffffff;" /><span style="font-family: sans-serif, taipei, Tahoma, Verdana, Arial; font-size: 16px; line-height: normal; background-color: #ffffff;">是否有光盤，這個函數如果成功調用，會得到磁盤的卷標序列號等信息﹔如果調用失敗則</span><br style="font-family: sans-serif, taipei, Tahoma, Verdana, Arial; font-size: 16px; line-height: normal; background-color: #ffffff;" /><span style="font-family: sans-serif, taipei, Tahoma, Verdana, Arial; font-size: 16px; line-height: normal; background-color: #ffffff;">可知光驅中無光盤，程序如下：//檢測光盤(假設光驅為G:)</span><br style="font-family: sans-serif, taipei, Tahoma, Verdana, Arial; font-size: 16px; line-height: normal; background-color: #ffffff;" /><span style="font-family: sans-serif, taipei, Tahoma, Verdana, Arial; font-size: 16px; line-height: normal; background-color: #ffffff;">　　char volname[255],filename[100];//buffer[512];</span><br style="font-family: sans-serif, taipei, Tahoma, Verdana, Arial; font-size: 16px; line-height: normal; background-color: #ffffff;" /><span style="font-family: sans-serif, taipei, Tahoma, Verdana, Arial; font-size: 16px; line-height: normal; background-color: #ffffff;">　　DWORD sno,maxl,fileflag ;</span><br style="font-family: sans-serif, taipei, Tahoma, Verdana, Arial; font-size: 16px; line-height: normal; background-color: #ffffff;" /><span style="font-family: sans-serif, taipei, Tahoma, Verdana, Arial; font-size: 16px; line-height: normal; background-color: #ffffff;">　　if (!(GetVolumeInformation(&#8220;G:&#8221;, volname,255,＆sno,＆maxl,＆fileflag,filename,100)))</span><br style="font-family: sans-serif, taipei, Tahoma, Verdana, Arial; font-size: 16px; line-height: normal; background-color: #ffffff;" /><span style="font-family: sans-serif, taipei, Tahoma, Verdana, Arial; font-size: 16px; line-height: normal; background-color: #ffffff;">　　 //如果返回值為假</span><br style="font-family: sans-serif, taipei, Tahoma, Verdana, Arial; font-size: 16px; line-height: normal; background-color: #ffffff;" /><span style="font-family: sans-serif, taipei, Tahoma, Verdana, Arial; font-size: 16px; line-height: normal; background-color: #ffffff;">　　Memo1&#8594;Lines&#8594;Add (&#8220;G驅中沒有發現光盤&#8221;);</span><br style="font-family: sans-serif, taipei, Tahoma, Verdana, Arial; font-size: 16px; line-height: normal; background-color: #ffffff;" /><span style="font-family: sans-serif, taipei, Tahoma, Verdana, Arial; font-size: 16px; line-height: normal; background-color: #ffffff;">　　 else</span><br style="font-family: sans-serif, taipei, Tahoma, Verdana, Arial; font-size: 16px; line-height: normal; background-color: #ffffff;" /><span style="font-family: sans-serif, taipei, Tahoma, Verdana, Arial; font-size: 16px; line-height: normal; background-color: #ffffff;">　　 //如果返回值為真</span><br style="font-family: sans-serif, taipei, Tahoma, Verdana, Arial; font-size: 16px; line-height: normal; background-color: #ffffff;" /><span style="font-family: sans-serif, taipei, Tahoma, Verdana, Arial; font-size: 16px; line-height: normal; background-color: #ffffff;">　　{Memo1&#8594;Lines&#8594;Add (&#8220;G驅中光盤卷標為:&#8221;＋String(volname));</span><br style="font-family: sans-serif, taipei, Tahoma, Verdana, Arial; font-size: 16px; line-height: normal; background-color: #ffffff;" /><span style="font-family: sans-serif, taipei, Tahoma, Verdana, Arial; font-size: 16px; line-height: normal; background-color: #ffffff;">　　Memo1&#8594;Lines&#8594;Add (&#8220;G驅中光盤序號為:&#8221;＋String(sno));</span><br style="font-family: sans-serif, taipei, Tahoma, Verdana, Arial; font-size: 16px; line-height: normal; background-color: #ffffff;" /><span style="font-family: sans-serif, taipei, Tahoma, Verdana, Arial; font-size: 16px; line-height: normal; background-color: #ffffff;">　　 }</span><br style="font-family: sans-serif, taipei, Tahoma, Verdana, Arial; font-size: 16px; line-height: normal; background-color: #ffffff;" /><span style="font-family: sans-serif, taipei, Tahoma, Verdana, Arial; font-size: 16px; line-height: normal; background-color: #ffffff;">　　5. 檢測聲卡配置</span><br style="font-family: sans-serif, taipei, Tahoma, Verdana, Arial; font-size: 16px; line-height: normal; background-color: #ffffff;" /><span style="font-family: sans-serif, taipei, Tahoma, Verdana, Arial; font-size: 16px; line-height: normal; background-color: #ffffff;">　　在編制多媒體程序時，我們常常會用到聲音文件，而當這些程序在沒有配置聲卡的機</span><br style="font-family: sans-serif, taipei, Tahoma, Verdana, Arial; font-size: 16px; line-height: normal; background-color: #ffffff;" /><span style="font-family: sans-serif, taipei, Tahoma, Verdana, Arial; font-size: 16px; line-height: normal; background-color: #ffffff;">器上運行時，我們應該給出必要的警告。對於聲卡的檢測，可以分別通過waveOutGetNumDevs()</span><br style="font-family: sans-serif, taipei, Tahoma, Verdana, Arial; font-size: 16px; line-height: normal; background-color: #ffffff;" /><span style="font-family: sans-serif, taipei, Tahoma, Verdana, Arial; font-size: 16px; line-height: normal; background-color: #ffffff;">和midiOutGetNumDevs()檢測波形設備和MIDI設備，再利用waveOutGetDevCaps()和</span><br style="font-family: sans-serif, taipei, Tahoma, Verdana, Arial; font-size: 16px; line-height: normal; background-color: #ffffff;" /><span style="font-family: sans-serif, taipei, Tahoma, Verdana, Arial; font-size: 16px; line-height: normal; background-color: #ffffff;">midiOutGetDevCaps()獲得聲音設備的細節資料。將下面一段代碼加入上面的程序即可，</span><br style="font-family: sans-serif, taipei, Tahoma, Verdana, Arial; font-size: 16px; line-height: normal; background-color: #ffffff;" /><span style="font-family: sans-serif, taipei, Tahoma, Verdana, Arial; font-size: 16px; line-height: normal; background-color: #ffffff;">但要注意將＃include 添至程序首部：</span><br style="font-family: sans-serif, taipei, Tahoma, Verdana, Arial; font-size: 16px; line-height: normal; background-color: #ffffff;" /><span style="font-family: sans-serif, taipei, Tahoma, Verdana, Arial; font-size: 16px; line-height: normal; background-color: #ffffff;">　　//檢測聲卡</span><br />　　int wavedevice,mididevice;<br />　　WAVEOUTCAPS wavecap;<br />　　MIDIOUTCAPS midicap;<br />　　wavedevice=(int)waveOutGetNumDevs(); //波形設備信息<br />　　mididevice=(int)midiOutGetNumDevs(); // MIDI設備信息<br />　　if (wavedevice==0)<br />　　Memo1&#8594;Lines&#8594;Add (&#8220;沒有發現波形設備&#8221;);<br />　　else<br />　　{waveOutGetDevCaps(0,＆wavecap,sizeof(WAVEOUTCAPS));<br />　　Memo1&#8594;Lines&#8594;Add (&#8220;當前波形設備:&#8221;＋String(wavecap.szPname));<br />　　 }<br />　　if (mididevice==0)<br />　　Memo1&#8594;Lines&#8594;Add (&#8220;沒有發現MIDI設備&#8221;);<br />　　else<br />　　{midiOutGetDevCaps(0,＆midicap,sizeof(MIDIOUTCAPS));<br />　　Memo19&#8594;Lines&#8594;Add (&#8220;當前MIDI設備:&#8221;＋String(midicap.szPname));<br />　　 }[/cdoe]<br />　　6. 檢測顯示器信息<br />　　編寫和圖形圖像有關的程序時常常需要檢測顯示器的分辨率和色深，最後我們來看看<br />這個問題的解決辦法。分辨率的求法很簡單，直接調用Screen對象的屬性就行了。而要求<br />色深則要利用API函數GetDeviceCaps獲得每像素的比特數和色彩的頁面數，然後計算2的<br />&#8220;每像素的比特數&#8221;次冪即得色彩的梯度數，再計算&#8220;色彩的梯度數&#8221;的&#8220;色彩的頁面數&#8221;<br />次冪即得色深。由於該段程序用到了冪運算，所以要記得加上＃include ，程序如下：<br />　　//檢測顯示器[code]<br />　　int tcs;<br />　　long int bpp,cp,tc;<br />　　Memo1&#8594;Lines&#8594;Add (&#8220;當前分辨率為:&#8221;＋String(Screen&#8594;Width)＋&#8220;＊&#8221;＋<br />String(Screen&#8594;Height));<br />　　bpp=GetDeviceCaps(Form1&#8594;Canvas&#8594;Handle ,BITSPIXEL);<br />　　tcs=pow(2,bpp); //計算色彩的梯度數<br />　　cp= GetDeviceCaps(Form1&#8594;Canvas&#8594;Handle,PLANES);<br />　　tc= pow(tcs,cp); //計算色深<br />　　Memo1&#8594;Lines&#8594;Add(&#8220;當前色深為:&#8221;＋String(tc));<br style="font-family: sans-serif, taipei, Tahoma, Verdana, Arial; font-size: 16px; line-height: normal; background-color: #ffffff;" /><span style="font-family: sans-serif, taipei, Tahoma, Verdana, Arial; font-size: 16px; line-height: normal; background-color: #ffffff;">　　好了，現在在讓我們點擊一下Test吧，硬件情況盡收眼底！其實本文所涉及</span><br style="font-family: sans-serif, taipei, Tahoma, Verdana, Arial; font-size: 16px; line-height: normal; background-color: #ffffff;" /><span style="font-family: sans-serif, taipei, Tahoma, Verdana, Arial; font-size: 16px; line-height: normal; background-color: #ffffff;">的API函數的功能不止這些，大家下去可以查一查Win32 API手冊，或者直接在C＋＋</span><br style="font-family: sans-serif, taipei, Tahoma, Verdana, Arial; font-size: 16px; line-height: normal; background-color: #ffffff;" /><span style="font-family: sans-serif, taipei, Tahoma, Verdana, Arial; font-size: 16px; line-height: normal; background-color: #ffffff;">Builder 4中察看Help。相信自己開發一個硬件檢測軟件也不是難事哦！</span><br style="font-family: sans-serif, taipei, Tahoma, Verdana, Arial; font-size: 16px; line-height: normal; background-color: #ffffff;" /><span style="font-family: sans-serif, taipei, Tahoma, Verdana, Arial; font-size: 16px; line-height: normal; background-color: #ffffff;">　　以上程序均在Windows98中文版、C＋＋ Builder 4中調試通過，如果大家在硬件檢</span><br style="font-family: sans-serif, taipei, Tahoma, Verdana, Arial; font-size: 16px; line-height: normal; background-color: #ffffff;" /><span style="font-family: sans-serif, taipei, Tahoma, Verdana, Arial; font-size: 16px; line-height: normal; background-color: #ffffff;">測方面有什麼問題歡迎和我探討，mail to AlexYoung@263.net。</span><br style="font-family: sans-serif, taipei, Tahoma, Verdana, Arial; font-size: 16px; line-height: normal; background-color: #ffffff;" /><img src ="http://www.cppblog.com/lizao2/aggbug/196724.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/lizao2/" target="_blank">hello wold!</a> 2012-12-27 13:52 <a href="http://www.cppblog.com/lizao2/archive/2012/12/27/196724.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item></channel></rss>