<?xml version="1.0" encoding="utf-8"?><feed xmlns="http://www.w3.org/2005/Atom"><title type="text">博客园_ASP.NET自学博客</title><subtitle type="text">体验编程的快乐，创造最有价值的网站创意 灵感 经验 Money 俗</subtitle><id>http://feed.cnblogs.com/blog/u/74122/rss</id><updated>2012-03-02T00:44:18Z</updated><author><name>KingDZ</name><uri>http://www.cnblogs.com/hihell/</uri></author><generator>feed.cnblogs.com</generator><link rel="alternate" type="text/html" href="http://www.cnblogs.com/hihell/"/><link rel="self" type="application/atom+xml" href="http://feed.cnblogs.com/blog/u/74122/rss"/><entry><id>http://www.cnblogs.com/hihell/archive/2011/09/23/2185883.html</id><title type="text">KingDZ 变菜鸟，每日一个C#小实例之---C#MessageBox小技巧</title><summary type="text">大家好，昨天俺休息了一天，木有给大家更新实例，今天呢，决定了，哈哈，更新三个。希望大家给俺好评哦，3Q，开始吧，第一个来个简单的。C#里面的MessageBox相信大家都玩过，哈哈。今天我们就实现让他自己数秒之后自己关闭。嘿嘿 今天看到一个有意思的“老师”，所以奉献给大家 写字楼里写字间，写字间里程序员；程序人员写程序，又拿程序换酒钱。 酒醒只在网上坐，酒醉还来网下眠；酒醉酒醒日复日，网上网下年复年。 宁愿老死程序间，只要老板多发钱；小车大房不去想，撰个2k好过年。 若要见识新世面，公务员比程序员；一个在天一在地，而且还比我们闲。 ...</summary><published>2011-09-23T02:28:00Z</published><updated>2011-09-23T02:28:00Z</updated><author><name>KingDZ</name><uri>http://www.cnblogs.com/hihell/</uri></author><link rel="alternate" href="http://www.cnblogs.com/hihell/archive/2011/09/23/2185883.html"/><link rel="alternate" type="text/html" href="http://www.cnblogs.com/hihell/archive/2011/09/23/2185883.html"/><content type="html">&lt;blockquote style='border:2px solid #EFEFEF;color:#333333;padding:5px 10px;'&gt;   &lt;p&gt;大家好，昨天俺休息了一天，木有给大家更新实例，今天呢，决定了，哈哈，更新三个。希望大家给俺好评哦，3Q，开始吧，第一个来个简单的。C#里面的MessageBox相信大家都玩过，哈哈。今天我们就实现让他自己数秒之后自己关闭。嘿嘿&lt;/p&gt;    &lt;p&gt;今天看到一个有意思的“老师”，所以奉献给大家&lt;/p&gt;    &lt;p&gt;&lt;font style="background-color: #cccccc"&gt;写字楼里写字间，写字间里程序员；程序人员写程序，又拿程序换酒钱。        &lt;br /&gt;酒醒只在网上坐，酒醉还来网下眠；酒醉酒醒日复日，网上网下年复年。 &lt;/font&gt;&lt;/p&gt;    &lt;p&gt;&lt;font style="background-color: #cccccc"&gt;宁愿老死程序间，只要老板多发钱；小车大房不去想，撰个2k好过年。        &lt;br /&gt;若要见识新世面，公务员比程序员；一个在天一在地，而且还比我们闲。         &lt;br /&gt;别人看我穿白领，我看别人穿名牌；天生我才写程序，臀大近视肩周炎。 &lt;/font&gt;&lt;/p&gt;    &lt;p&gt;&lt;font style="background-color: #cccccc"&gt;年复一年春光度,度得他人做老板;老板扣我薄酒钱,没有酒钱怎过年.        &lt;br /&gt;春光逝去皱纹起,作起程序也委靡;来到水源把水灌,打死不做程序员.         &lt;br /&gt;别人笑我忒疯癫，我笑他人命太贱；状元三百六十行，偏偏来做程员！ &lt;/font&gt;&lt;/p&gt;    &lt;p&gt;&lt;font style="background-color: #cccccc"&gt;但愿老死电脑间，不愿鞠躬老板前；奔驰宝马贵者趣，公交自行程序员。        &lt;br /&gt;若将程员比妓女，一在平地一在天；若将程员比车马，他得驱驰我无闲。         &lt;br /&gt;别人笑我忒疯癫，我笑自己命太贱；不见满街漂亮妹，哪个归得程序员。 &lt;/font&gt;&lt;/p&gt;    &lt;p&gt;&lt;font style="background-color: #cccccc"&gt;不想只挣打工钱，那个老板愿发钱；小车大房咱要想，任我享用多悠闲。        &lt;br /&gt;比尔能搞个微软，我咋不能捞点钱；一个在天一在地，定有一日乾坤翻。         &lt;br /&gt;我在天来他在地，纵横天下山水间；傲视武林豪杰墓，一樽还垒风月山。 &lt;/font&gt;&lt;/p&gt;    &lt;p&gt;     &lt;br /&gt;&lt;font style="background-color: #cccccc"&gt;电脑面前眼发直，眼镜下面泪茫茫；做梦发财好几亿，从此不用手指忙。        &lt;br /&gt;哪知梦醒手空空，老板看到把我训；待到老时眼发花，走路不知哪是家。 &lt;/font&gt;&lt;/p&gt;    &lt;p&gt;&lt;font style="background-color: #cccccc"&gt;各位在此穷抱怨，可知小弟更可怜；俺学编程两年半，至今没赚一分钱。        &lt;br /&gt;听说三十是末日，二十三岁在眼前；发誓立志傍微软，渺渺前程对谁言？&lt;/font&gt; &lt;/p&gt;    &lt;p&gt;&amp;#160;&lt;/p&gt; &lt;/blockquote&gt;  &lt;p&gt;哦了，开始吧，这里我们有好几种办法，首先是网络上面最常见的一种调用APi的方法。当然我换应大家和我讨论其他的办法，希望大家不吝赐教。&lt;/p&gt;  [&lt;span style="color: #2b91af"&gt;DllImport&lt;/span&gt;(&lt;span style="color: #a31515"&gt;&amp;quot;User32&amp;quot;&lt;/span&gt;, CharSet = CharSet.Auto)]&lt;br/&gt;&lt;span style="color: blue"&gt;private extern static &lt;/span&gt;&lt;span style="color: #2b91af"&gt;IntPtr &lt;/span&gt;FindWindow(&lt;span style="color: blue"&gt;string &lt;/span&gt;lpClassName,&lt;span style="color: blue"&gt;string &lt;/span&gt;lpWindowName);&lt;br/&gt;[&lt;span style="color: #2b91af"&gt;DllImport&lt;/span&gt;(&lt;span style="color: #a31515"&gt;&amp;quot;User32&amp;quot;&lt;/span&gt;, CharSet = CharSet.Auto)]&lt;br/&gt;&lt;span style="color: blue"&gt;public static extern int &lt;/span&gt;PostMessage(&lt;span style="color: #2b91af"&gt;IntPtr &lt;/span&gt;hwd, &lt;span style="color: blue"&gt;int &lt;/span&gt;msg, &lt;span style="color: #2b91af"&gt;IntPtr &lt;/span&gt;wparam, &lt;span style="color: #2b91af"&gt;IntPtr &lt;/span&gt;lParma);&lt;br/&gt;&lt;span style="color: blue"&gt;public const int &lt;/span&gt;WM_CLOSE = 0x10;&lt;p&gt;上面的这两个API函数的用法如下&lt;/p&gt;&lt;p&gt;&lt;a title="http://msdn.microsoft.com/en-us/library/ms633499(VS.85).aspx" href="http://msdn.microsoft.com/en-us/library/ms633499(VS.85).aspx"&gt;http://msdn.microsoft.com/en-us/library/ms633499(VS.85).aspx&lt;/a&gt;&lt;/p&gt;&lt;p&gt;&lt;a title="http://msdn.microsoft.com/en-us/library/ms644944(VS.85).aspx" href="http://msdn.microsoft.com/en-us/library/ms644944(VS.85).aspx"&gt;http://msdn.microsoft.com/en-us/library/ms644944(VS.85).aspx&lt;/a&gt;&lt;/p&gt;&lt;p&gt;&amp;#160;&lt;/p&gt;&lt;p&gt;大家可以去，仔细的研究一下。这里我们用到的就是用一个计时器，然后调用API捕获到弹出的窗口，然后实现我们想要的效果。&lt;/p&gt;&lt;p&gt;// 按照MessageBox的标题，找出Messagebox这个弹出框&lt;/p&gt;&lt;span style="color: blue"&gt;void &lt;/span&gt;KillMessageBox() {&lt;br/&gt;    &lt;span style="color: #2b91af"&gt;IntPtr &lt;/span&gt;ptr = FindWindow(&lt;span style="color: blue"&gt;null&lt;/span&gt;, &lt;span style="color: #a31515"&gt;&amp;quot;自动关闭&amp;quot;&lt;/span&gt;);&lt;br/&gt;    &lt;span style="color: blue"&gt;if &lt;/span&gt;(ptr != &lt;span style="color: #2b91af"&gt;IntPtr&lt;/span&gt;.Zero)&lt;br/&gt;&lt;br/&gt;        PostMessage(ptr,WM_CLOSE,&lt;span style="color: #2b91af"&gt;IntPtr&lt;/span&gt;.Zero,&lt;span style="color: #2b91af"&gt;IntPtr&lt;/span&gt;.Zero);&lt;br/&gt;&lt;br/&gt;}&lt;p&gt;FindWindow就是专门找出窗口准备的，Timer的Tick事件中&lt;/p&gt;&lt;span style="color: blue"&gt;void &lt;/span&gt;setTimer_Tick(&lt;span style="color: blue"&gt;object &lt;/span&gt;sender, &lt;span style="color: #2b91af"&gt;EventArgs &lt;/span&gt;e)&lt;br/&gt;{&lt;br/&gt;    KillMessageBox();&lt;br/&gt;    ((&lt;span style="color: #2b91af"&gt;Timer&lt;/span&gt;)sender).Stop();&lt;br/&gt;}&lt;p&gt;哈哈，完事。看效果吧，代码后面附上&lt;/p&gt;&lt;p&gt;&lt;a href="http://images.cnblogs.com/cnblogs_com/hihell/201109/201109231028128925.png"&gt;&lt;img style="background-image: none; border-bottom: 0px; border-left: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top: 0px; border-right: 0px; padding-top: 0px" title="212" border="0" alt="212" src="http://images.cnblogs.com/cnblogs_com/hihell/201109/20110923102817872.png" width="297" height="270" /&gt;&lt;/a&gt;&lt;/p&gt;&lt;p&gt;&amp;#160;&lt;/p&gt;&lt;p&gt;当然，你也可以用这个API&lt;/p&gt;&lt;p&gt;static extern bool EndDialog(IntPtr hDlg, out IntPtr nResult);&lt;/p&gt;&lt;p&gt;哈哈，例子太简单了，OK完事。&lt;/p&gt;&lt;p&gt;&amp;#160;&lt;/p&gt;&lt;p&gt;&lt;a href="http://files.cnblogs.com/hihell/MyMessageBox.rar"&gt;MyMessageBox.rar&lt;/a&gt;代码中有我发现的一个非常棒的类，给大家了&lt;/p&gt;&lt;img src="http://www.cnblogs.com/hihell/aggbug/2185883.html?type=1" width="1" height="1" alt=""/&gt;&lt;p&gt;&lt;a href="http://www.cnblogs.com/hihell/archive/2011/09/23/2185883.html" target="_blank"&gt;本文链接&lt;/a&gt;&lt;/p&gt;</content></entry><entry><id>http://www.cnblogs.com/hihell/archive/2011/09/21/2183731.html</id><title type="text">KingDZ 变菜鸟，每日一个C#小实例之---C#开机自动执行程序</title><summary type="text">哇塞，嘿嘿，各种变态的需求啊，这回整个开机自动运行的程序。不要说我坏啊，嘿嘿，C#也可以实现开始自动运行滴，开机了，哇塞，整个蓝屏，要不整个黑屏，一直黑着，弄不好，那个哥们还要每个新显示器去。哇哈哈。此实例谨献给，好yin，嘿嘿。 这个实例的名字叫做开机自动运行软件，用我们的C#来实现，这个实例没有什么难度，只是为我们的C#学习之路，增添一点点乐趣罢了。 首先我们还是准备工作，当然是引入命名空间了。 using Microsoft.Win32;using System.IO;然后我们开始，准备一下，我们这个实例的位置，得到运行目录有两种方法，第一种，拼接//获得文件的当前路径 strin...</summary><published>2011-09-21T03:46:00Z</published><updated>2011-09-21T03:46:00Z</updated><author><name>KingDZ</name><uri>http://www.cnblogs.com/hihell/</uri></author><link rel="alternate" href="http://www.cnblogs.com/hihell/archive/2011/09/21/2183731.html"/><link rel="alternate" type="text/html" href="http://www.cnblogs.com/hihell/archive/2011/09/21/2183731.html"/><content type="html">&lt;p&gt;哇塞，嘿嘿，各种变态的需求啊，这回整个开机自动运行的程序。不要说我坏啊，嘿嘿，C#也可以实现开始自动运行滴，开机了，哇塞，整个蓝屏，要不整个黑屏，一直黑着，弄不好，那个哥们还要每个新显示器去。哇哈哈。此实例谨献给，好yin，嘿嘿。&lt;/p&gt;  &lt;p&gt;这个实例的名字叫做开机自动运行软件，用我们的C#来实现，这个实例没有什么难度，只是为我们的C#学习之路，增添一点点乐趣罢了。&lt;/p&gt;  &lt;p&gt;首先我们还是准备工作，当然是引入命名空间了。&lt;/p&gt;  &lt;span style="color: blue"&gt;using &lt;/span&gt;Microsoft.Win32;&lt;br/&gt;&lt;span style="color: blue"&gt;using &lt;/span&gt;System.IO;&lt;p&gt;然后我们开始，准备一下，我们这个实例的位置，得到运行目录有两种方法，&lt;/p&gt;&lt;p&gt;第一种，拼接&lt;/p&gt;&lt;span style="color: green"&gt;//获得文件的当前路径 &lt;br/&gt;&lt;/span&gt;&lt;span style="color: blue"&gt;string &lt;/span&gt;dir = &lt;span style="color: #2b91af"&gt;Directory&lt;/span&gt;.GetCurrentDirectory();&lt;br/&gt;&lt;span style="color: green"&gt;//获取可执行文件的全部路径 &lt;br/&gt;&lt;/span&gt;&lt;span style="color: blue"&gt;string &lt;/span&gt;exeDir = dir + &lt;span style="color: #a31515"&gt;@&amp;quot;\SetStart.exe&amp;quot;&lt;/span&gt;;&lt;p&gt;嘿嘿，当然也可以这么做&lt;/p&gt;&lt;span style="color: blue"&gt;string &lt;/span&gt;strName = &lt;span style="color: #2b91af"&gt;Application&lt;/span&gt;.ExecutablePath;&lt;p&gt;当然，下面我们要操作注册表了，嘿嘿，这里用360卫士大哥给咱们做个测试吧，防止我还要重启电脑，哈哈 当然，你也可以俺下面的截图输入 msconfig查看&lt;/p&gt;&lt;p&gt;&lt;a href="http://images.cnblogs.com/cnblogs_com/hihell/201109/201109211145246569.png"&gt;&lt;img style="background-image: none; border-bottom: 0px; border-left: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top: 0px; border-right: 0px; padding-top: 0px" title="2323" border="0" alt="2323" src="http://images.cnblogs.com/cnblogs_com/hihell/201109/201109211145263056.png" width="127" height="449" /&gt;&lt;/a&gt;&lt;/p&gt;&lt;p&gt;嘿嘿。好了，我们得到我们的文件了。&lt;/p&gt;&lt;p&gt;声明一个可以使用注册表的字段。&lt;/p&gt;&lt;span style="color: #2b91af"&gt;RegistryKey &lt;/span&gt;reg = &lt;span style="color: blue"&gt;null&lt;/span&gt;;&lt;p&gt;然后我们打开注册表&lt;/p&gt;reg = &lt;span style="color: #2b91af"&gt;Registry&lt;/span&gt;.LocalMachine.OpenSubKey(&lt;span style="color: #a31515"&gt;&amp;quot;SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\Run&amp;quot;&lt;/span&gt;, &lt;span style="color: blue"&gt;true&lt;/span&gt;);&lt;p&gt;当然，如果没有怎么办，废话当然创建啊，&lt;/p&gt;&lt;span style="color: blue"&gt;if &lt;/span&gt;(reg == &lt;span style="color: blue"&gt;null&lt;/span&gt;)&lt;br/&gt;reg = &lt;span style="color: #2b91af"&gt;Registry&lt;/span&gt;.LocalMachine.CreateSubKey(&lt;span style="color: #a31515"&gt;@&amp;quot;SOFTWARE\Microsoft\Windows\CurrentVersion\Run&amp;quot;&lt;/span&gt;);&lt;p&gt;好了，可以写入注册表的值了&lt;/p&gt;&lt;span style="color: blue"&gt;if &lt;/span&gt;(isAutoRun)&lt;br/&gt;{&lt;br/&gt;    reg.SetValue(name, fileName);&lt;br/&gt;    &lt;span style="color: #2b91af"&gt;MessageBox&lt;/span&gt;.Show(&lt;span style="color: #a31515"&gt;&amp;quot;开机可以黑屏了&amp;quot;&lt;/span&gt;, &lt;span style="color: #a31515"&gt;&amp;quot;提示&amp;quot;&lt;/span&gt;, &lt;span style="color: #2b91af"&gt;MessageBoxButtons&lt;/span&gt;.OK, &lt;span style="color: #2b91af"&gt;MessageBoxIcon&lt;/span&gt;.Information);&lt;br/&gt;}&lt;p&gt;OK，完成，封装一下就OK了。&lt;/p&gt;&lt;span style="color: blue"&gt;public static void &lt;/span&gt;SetAutoRun(&lt;span style="color: blue"&gt;string &lt;/span&gt;fileName, &lt;span style="color: blue"&gt;bool &lt;/span&gt;isAutoRun)&lt;br/&gt;{&lt;br/&gt;    &lt;span style="color: #2b91af"&gt;RegistryKey &lt;/span&gt;reg = &lt;span style="color: blue"&gt;null&lt;/span&gt;;&lt;br/&gt;    &lt;span style="color: blue"&gt;try&lt;br/&gt;    &lt;/span&gt;{&lt;br/&gt;        &lt;span style="color: blue"&gt;if &lt;/span&gt;(!&lt;span style="color: #2b91af"&gt;File&lt;/span&gt;.Exists(fileName))&lt;br/&gt;        {&lt;br/&gt;            &lt;span style="color: blue"&gt;throw new &lt;/span&gt;&lt;span style="color: #2b91af"&gt;Exception&lt;/span&gt;(&lt;span style="color: #a31515"&gt;&amp;quot;木有这个文件，搞什么搞&amp;quot;&lt;/span&gt;);&lt;br/&gt;        }&lt;br/&gt;        &lt;span style="color: blue"&gt;string &lt;/span&gt;name = fileName.Substring(fileName.LastIndexOf(&lt;span style="color: #a31515"&gt;@&amp;quot;\&amp;quot;&lt;/span&gt;) + 1);&lt;br/&gt;        reg = &lt;span style="color: #2b91af"&gt;Registry&lt;/span&gt;.LocalMachine.OpenSubKey(&lt;span style="color: #a31515"&gt;&amp;quot;SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\Run&amp;quot;&lt;/span&gt;, &lt;span style="color: blue"&gt;true&lt;/span&gt;);&lt;br/&gt;        &lt;span style="color: blue"&gt;if &lt;/span&gt;(reg == &lt;span style="color: blue"&gt;null&lt;/span&gt;)&lt;br/&gt;            reg = &lt;span style="color: #2b91af"&gt;Registry&lt;/span&gt;.LocalMachine.CreateSubKey(&lt;span style="color: #a31515"&gt;@&amp;quot;SOFTWARE\Microsoft\Windows\CurrentVersion\Run&amp;quot;&lt;/span&gt;);&lt;br/&gt;        &lt;span style="color: blue"&gt;if &lt;/span&gt;(isAutoRun)&lt;br/&gt;        {&lt;br/&gt;            reg.SetValue(name, fileName);&lt;br/&gt;            &lt;span style="color: #2b91af"&gt;MessageBox&lt;/span&gt;.Show(&lt;span style="color: #a31515"&gt;&amp;quot;开机可以黑屏了&amp;quot;&lt;/span&gt;, &lt;span style="color: #a31515"&gt;&amp;quot;提示&amp;quot;&lt;/span&gt;, &lt;span style="color: #2b91af"&gt;MessageBoxButtons&lt;/span&gt;.OK, &lt;span style="color: #2b91af"&gt;MessageBoxIcon&lt;/span&gt;.Information);&lt;br/&gt;        }&lt;br/&gt;&lt;br/&gt;        &lt;span style="color: blue"&gt;else&lt;br/&gt;            &lt;/span&gt;reg.SetValue(name, &lt;span style="color: blue"&gt;false&lt;/span&gt;);&lt;br/&gt;    }&lt;br/&gt;    &lt;span style="color: blue"&gt;catch &lt;/span&gt;(&lt;span style="color: #2b91af"&gt;Exception &lt;/span&gt;ex)&lt;br/&gt;    {&lt;br/&gt;&lt;br/&gt;        &lt;span style="color: blue"&gt;throw new &lt;/span&gt;&lt;span style="color: #2b91af"&gt;Exception&lt;/span&gt;(ex.ToString());&lt;br/&gt;    }&lt;br/&gt;    &lt;span style="color: blue"&gt;finally&lt;br/&gt;    &lt;/span&gt;{&lt;br/&gt;        &lt;span style="color: blue"&gt;if &lt;/span&gt;(reg != &lt;span style="color: blue"&gt;null&lt;/span&gt;)&lt;br/&gt;        {&lt;br/&gt;            reg.Close();&lt;br/&gt;        }&lt;br/&gt;    }&lt;br/&gt;&lt;br/&gt;}&lt;p&gt;当然，我只是简单的实现了一下，嘿嘿，你呢，发坏可以自己这么实现&lt;/p&gt;&lt;p&gt;每3秒，弹出窗口告诉你，被恶搞！（该窗口不可关闭）；&lt;/p&gt;&lt;p&gt;无法使用 Ctrl+alt+del 打开任务管理器（意思，你运行了，除非重启，要不你就别想关闭！）&lt;/p&gt;&lt;p&gt;.....................喝黑，我还是不要说了。防止管理禁我言啊。&lt;/p&gt;&lt;p&gt;奉上最后的截图&lt;/p&gt;&lt;p&gt;&lt;a href="http://images.cnblogs.com/cnblogs_com/hihell/201109/201109211145287318.png"&gt;&lt;img style="background-image: none; border-bottom: 0px; border-left: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top: 0px; border-right: 0px; padding-top: 0px" title="1111" border="0" alt="1111" src="http://images.cnblogs.com/cnblogs_com/hihell/201109/201109211145328284.png" width="434" height="314" /&gt;&lt;/a&gt;&lt;/p&gt;&lt;p&gt;&lt;a href="http://images.cnblogs.com/cnblogs_com/hihell/201109/201109211145338185.png"&gt;&lt;img style="background-image: none; border-bottom: 0px; border-left: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top: 0px; border-right: 0px; padding-top: 0px" title="212121" border="0" alt="212121" src="http://images.cnblogs.com/cnblogs_com/hihell/201109/201109211145343626.png" width="547" height="45" /&gt;&lt;/a&gt;&lt;/p&gt;&lt;p&gt;最后注明一下，操作注册表需要的是管理员的权限。所以请确定，程序是在操作员的权限下运行。&lt;/p&gt;&lt;p&gt;&lt;a href="http://images.cnblogs.com/cnblogs_com/hihell/201109/201109211208144170.png"&gt;&lt;img style="background-image: none; border-bottom: 0px; border-left: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top: 0px; border-right: 0px; padding-top: 0px" title="212121" border="0" alt="212121" src="http://images.cnblogs.com/cnblogs_com/hihell/201109/201109211208168955.png" width="304" height="115" /&gt;&lt;/a&gt;&lt;/p&gt;&lt;p&gt;喜欢交流，喜欢编程，这就是俺&amp;#160; KingDZ 一个会编程的男生。哈哈哈&lt;/p&gt;&lt;p&gt;代码下载&lt;/p&gt;&lt;p&gt;&lt;a href="http://files.cnblogs.com/hihell/SetStart.rar"&gt;SetStart.rar&lt;/a&gt;&lt;/p&gt;&lt;img src="http://www.cnblogs.com/hihell/aggbug/2183731.html?type=1" width="1" height="1" alt=""/&gt;&lt;p&gt;&lt;a href="http://www.cnblogs.com/hihell/archive/2011/09/21/2183731.html" target="_blank"&gt;本文链接&lt;/a&gt;&lt;/p&gt;</content></entry><entry><id>http://www.cnblogs.com/hihell/archive/2011/09/21/2183155.html</id><title type="text">致博客园管理-博客园Asp.net小组遭灌水</title><summary type="text">今天早上10点发现。 Asp.net小组话题被灌多出垃圾信息。直至本篇文章发布还未删除。 刚刚打开博客园，本想去小组看看，结果发现哇塞，这么多垃圾信息，本人表示无语，请管理员加深对发表文章的审核力度。 俺也发现我要写的下一个小实例了，关键词过滤，(*^__^*) 嘻嘻……， 管理员加紧修改啊。 写代码去喽。 关于关键字过滤问题，不知各位有什么好的建议呢，我一般采用的 一个垃圾关键字的库，然后进行比对。可是效率不高。 无奈，而且垃圾语言的库，也不好收集啊 public string Filter(string[] a, string s) ...</summary><published>2011-09-21T02:31:00Z</published><updated>2011-09-21T02:31:00Z</updated><author><name>KingDZ</name><uri>http://www.cnblogs.com/hihell/</uri></author><link rel="alternate" href="http://www.cnblogs.com/hihell/archive/2011/09/21/2183155.html"/><link rel="alternate" type="text/html" href="http://www.cnblogs.com/hihell/archive/2011/09/21/2183155.html"/><content type="html">&lt;p&gt;今天早上10点发现。&lt;/p&gt;  &lt;p&gt; Asp.net小组话题被灌多出垃圾信息。直至本篇文章发布还未删除。&lt;/p&gt;  &lt;p&gt;&lt;a href="http://images.cnblogs.com/cnblogs_com/hihell/201109/201109211030529973.png"&gt;&lt;img style="background-image: none; border-right-width: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px; padding-top: 0px" title="12121" border="0" alt="12121" src="http://images.cnblogs.com/cnblogs_com/hihell/201109/201109211031008134.png" width="587" height="587" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;&lt;a href="http://images.cnblogs.com/cnblogs_com/hihell/201109/201109211031069982.png"&gt;&lt;img style="background-image: none; border-right-width: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px; padding-top: 0px" title="21212" border="0" alt="21212" src="http://images.cnblogs.com/cnblogs_com/hihell/201109/201109211031091288.png" width="635" height="343" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;&lt;a href="http://images.cnblogs.com/cnblogs_com/hihell/201109/201109211031106696.png"&gt;&lt;img style="background-image: none; border-right-width: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px; padding-top: 0px" title="1111" border="0" alt="1111" src="http://images.cnblogs.com/cnblogs_com/hihell/201109/20110921103113859.png" width="251" height="361" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;刚刚打开博客园，本想去小组看看，结果发现哇塞，这么多垃圾信息，本人表示无语，请管理员加深对发表文章的审核力度。   &lt;br /&gt;俺也发现我要写的下一个小实例了，关键词过滤，(*^__^*) 嘻嘻……，    &lt;br /&gt;管理员加紧修改啊。    &lt;br /&gt;写代码去喽。&lt;/p&gt;  &lt;p&gt;关于关键字过滤问题，不知各位有什么好的建议呢，我一般采用的&amp;#160; 一个垃圾关键字的库，然后进行比对。可是效率不高。   &lt;br /&gt;无奈，而且垃圾语言的库，也不好收集啊&lt;/p&gt;  &lt;p&gt;   &lt;br /&gt;public string Filter(string[] a, string s)    &lt;br /&gt;{    &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; for(var i=0; i&amp;lt;a.length; i++)    &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; s=s.Replace(a[i],new string('*',a[i].length));&amp;#160; //把敏感词替换为多个*。    &lt;br /&gt;}&lt;/p&gt;  &lt;p&gt;var a= System.IO.File.ReadAllText(&amp;quot;c:\\敏感词.txt&amp;quot;).Split(',');   &lt;br /&gt;呵呵，我想正则表达式应该更快吧&lt;/p&gt;&lt;img src="http://www.cnblogs.com/hihell/aggbug/2183155.html?type=1" width="1" height="1" alt=""/&gt;&lt;p&gt;&lt;a href="http://www.cnblogs.com/hihell/archive/2011/09/21/2183155.html" target="_blank"&gt;本文链接&lt;/a&gt;&lt;/p&gt;</content></entry><entry><id>http://www.cnblogs.com/hihell/archive/2011/09/20/2182626.html</id><title type="text">KingDZ 变菜鸟，每日一个C#小实例之---C#判断网络是否链接</title><summary type="text">今天，写一个代码比较少得例子，当然发现互联网站已经有了类似的文章了，哈哈，但是俺还是要写，变菜鸟吗？变就变得彻底。嘿嘿。今天发现一个朋友的文章里面提到的一点非常有意思。给大家展示一下 终于知道移动比联通牛的原因了！ 1、在桌面上点右键，选择新建-文本文档；2、打开"新建文本文档"，录入"移动"两字后存盘退出；3、重新打开"新建文本文档"，看到什么了？4、是不是刚刚录入的"移动"两字？ 咱们换过来 : 1、在桌面上点右键，选择新建-文本文档；2、打开"新建文本文档"，录入"联通&amp;quot</summary><published>2011-09-20T08:44:00Z</published><updated>2011-09-20T08:44:00Z</updated><author><name>KingDZ</name><uri>http://www.cnblogs.com/hihell/</uri></author><link rel="alternate" href="http://www.cnblogs.com/hihell/archive/2011/09/20/2182626.html"/><link rel="alternate" type="text/html" href="http://www.cnblogs.com/hihell/archive/2011/09/20/2182626.html"/><content type="html">&lt;p&gt;今天，写一个代码比较少得例子，当然发现互联网站已经有了类似的文章了，哈哈，但是俺还是要写，变菜鸟吗？变就变得彻底。嘿嘿。今天发现一个朋友的文章里面提到的一点非常有意思。给大家展示一下&lt;/p&gt; &lt;p&gt;终于知道移动比联通牛的原因了！ &lt;br&gt;1、在桌面上点右键，选择新建-文本文档；&lt;br&gt;2、打开"新建文本文档"，录入"移动"两字后存盘退出；&lt;br&gt;3、重新打开"新建文本文档"，看到什么了？&lt;br&gt;4、是不是刚刚录入的"移动"两字？&lt;/p&gt; &lt;p&gt;&lt;br&gt;咱们换过来 :&lt;/p&gt; &lt;p&gt;1、在桌面上点右键，选择新建-文本文档；&lt;br&gt;2、打开"新建文本文档"，录入"联通"两字后存盘退出；&lt;br&gt;3、重新打开"新建文本文档"，看到什么了？&lt;br&gt;4、是不是刚刚录入的"联通"两字不见了，取而代之是个烧焦的手机电池的模样？&lt;/p&gt; &lt;p&gt;知道今天我才知道，为什么联通不给力了，哈哈。好了，不废话了，开始我们的小实例吧。&lt;/p&gt; &lt;p&gt;如何用C#判断网络是否连接呢，这个有N多方法，我们下面尽量说的完整一些。&lt;/p&gt; &lt;p&gt;第一种办法，最简单的，但是不准确，呵呵&lt;/p&gt;&lt;span style="color: blue"&gt;private void &lt;/span&gt;btnIsConnect_Click(&lt;span style="color: blue"&gt;object &lt;/span&gt;sender, &lt;span style="color: #2b91af"&gt;EventArgs &lt;/span&gt;e)&lt;br/&gt;{&lt;br/&gt;    &lt;span style="color: blue"&gt;if &lt;/span&gt;(&lt;span style="color: #2b91af"&gt;SystemInformation&lt;/span&gt;.Network) {&lt;br/&gt;        &lt;span style="color: #2b91af"&gt;MessageBox&lt;/span&gt;.Show(&lt;span style="color: #a31515"&gt;"已经联网，但是不确定是互联网还是局域网"&lt;/span&gt;);&lt;br/&gt;    }&lt;br/&gt;}&lt;br/&gt;&lt;p&gt;&lt;a href="http://images.cnblogs.com/cnblogs_com/hihell/201109/201109201642538018.png"&gt;&lt;img style="background-image: none; border-bottom: 0px; border-left: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top: 0px; border-right: 0px; padding-top: 0px" title="2" border="0" alt="2" src="http://images.cnblogs.com/cnblogs_com/hihell/201109/201109201642561135.png" width="268" height="237"&gt;&lt;/a&gt;&lt;/p&gt;&lt;p&gt;这个办法在局域网下也是true &lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;第二种办法 Ping 一个地址，我们就采用baidu要是baidu宕机了，哇塞，那就不怨谁了。哈哈&lt;/p&gt;&lt;p&gt;首先引用命名空间&lt;/p&gt;&lt;span style="color: blue"&gt;using &lt;/span&gt;System.Net.NetworkInformation;&lt;br/&gt;&lt;p&gt;然后我们简单的实现一下，这种实现并不完美，慢慢的我们在完善他，&lt;/p&gt;&lt;span style="color: blue"&gt;private void &lt;/span&gt;btnPing_Click(&lt;span style="color: blue"&gt;object &lt;/span&gt;sender, &lt;span style="color: #2b91af"&gt;EventArgs &lt;/span&gt;e)&lt;br/&gt;{&lt;br/&gt;    &lt;span style="color: #2b91af"&gt;Ping &lt;/span&gt;ping = &lt;span style="color: blue"&gt;new &lt;/span&gt;&lt;span style="color: #2b91af"&gt;Ping&lt;/span&gt;();&lt;br/&gt;    &lt;span style="color: #2b91af"&gt;PingReply &lt;/span&gt;pr = ping.Send(&lt;span style="color: #a31515"&gt;"baidu.com"&lt;/span&gt;);&lt;br/&gt;    &lt;span style="color: blue"&gt;if &lt;/span&gt;(pr.Status == IPStatus.Success) &lt;br/&gt;        &lt;span style="color: #2b91af"&gt;MessageBox&lt;/span&gt;.Show(&lt;span style="color: #a31515"&gt;"联网状态"&lt;/span&gt;);&lt;br/&gt;    &lt;span style="color: blue"&gt;else&lt;br/&gt;        &lt;/span&gt;&lt;span style="color: #2b91af"&gt;MessageBox&lt;/span&gt;.Show(&lt;span style="color: #a31515"&gt;"你网线掉了啦"&lt;/span&gt;);&lt;br/&gt;&lt;br/&gt;}&lt;br/&gt;ping.Send("baidu.com");&lt;br/&gt;&lt;font face="微软雅黑"&gt;记住Send有8个重载方法，你可以自己去调整。&lt;/font&gt;&lt;font face="微软雅黑"&gt;我们先得到，一个谷歌的IP做准备&lt;/font&gt;&lt;a href="http://images.cnblogs.com/cnblogs_com/hihell/201109/201109201642575953.png"&gt;&lt;img style="background-image: none; border-bottom: 0px; border-left: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top: 0px; border-right: 0px; padding-top: 0px" title="1" border="0" alt="1" src="http://images.cnblogs.com/cnblogs_com/hihell/201109/201109201643122940.png" width="337" height="209"&gt;&lt;/a&gt;&amp;nbsp;&lt;font face="微软雅黑"&gt;然后开始吧&lt;/font&gt;&lt;font face="微软雅黑"&gt;这里我们主要是根据Send的参数来准备我们的数据，也有人把这个称作  发心跳包  说白了就是不断的发送请求，判断是否联网。&lt;/font&gt;&lt;span style="color: #2b91af"&gt;Ping &lt;/span&gt;ping = &lt;span style="color: blue"&gt;new &lt;/span&gt;&lt;span style="color: #2b91af"&gt;Ping&lt;/span&gt;();&lt;br/&gt;&lt;span style="color: #2b91af"&gt;PingOptions &lt;/span&gt;poptions = &lt;span style="color: blue"&gt;new &lt;/span&gt;&lt;span style="color: #2b91af"&gt;PingOptions&lt;/span&gt;();&lt;br/&gt;poptions.DontFragment = &lt;span style="color: blue"&gt;true&lt;/span&gt;;&lt;br/&gt;&lt;span style="color: blue"&gt;string &lt;/span&gt;data = &lt;span style="color: blue"&gt;string&lt;/span&gt;.Empty;&lt;br/&gt;&lt;span style="color: blue"&gt;byte&lt;/span&gt;[] buffer = &lt;span style="color: #2b91af"&gt;Encoding&lt;/span&gt;.ASCII.GetBytes(data);&lt;br/&gt;&lt;p&gt;准备数据到位，开始Send&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;span style="color: blue"&gt;int &lt;/span&gt;timeout = 1200;&lt;br/&gt;           &lt;br/&gt;&lt;span style="color: #2b91af"&gt;PingReply &lt;/span&gt;reply = ping.Send(&lt;span style="color: #2b91af"&gt;IPAddress&lt;/span&gt;.Parse(&lt;span style="color: #a31515"&gt;"74.125.71.104"&lt;/span&gt;),timeout,buffer,poptions);&lt;br/&gt;&lt;span style="color: blue"&gt;if &lt;/span&gt;(reply.Status == IPStatus.Success)&lt;br/&gt;    &lt;span style="color: #2b91af"&gt;MessageBox&lt;/span&gt;.Show(&lt;span style="color: #a31515"&gt;"联网状态"&lt;/span&gt;);&lt;br/&gt;&lt;span style="color: blue"&gt;else&lt;br/&gt;    &lt;/span&gt;&lt;span style="color: #2b91af"&gt;MessageBox&lt;/span&gt;.Show(&lt;span style="color: #a31515"&gt;"你网线掉了啦"&lt;/span&gt;);&lt;br/&gt;haha,好了，测试一下吧。&lt;font face="微软雅黑"&gt;&lt;a href="http://images.cnblogs.com/cnblogs_com/hihell/201109/20110920164314299.png"&gt;&lt;img style="background-image: none; border-bottom: 0px; border-left: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top: 0px; border-right: 0px; padding-top: 0px" title="&amp;middot;&amp;middot;&amp;middot;" border="0" alt="&amp;middot;&amp;middot;&amp;middot;" src="http://images.cnblogs.com/cnblogs_com/hihell/201109/201109201643162609.png" width="275" height="250"&gt;&lt;/a&gt;&lt;/font&gt;&lt;font face="微软雅黑"&gt;嘿嘿，这个就稳定多了。&lt;/font&gt;&lt;font face="微软雅黑"&gt;当然还有一种办法就是 调用系统的 API了，&lt;/font&gt;[&lt;span style="color: #2b91af"&gt;DllImport&lt;/span&gt;(&lt;span style="color: #a31515"&gt;"wininet"&lt;/span&gt;)]&lt;br/&gt;&lt;span style="color: blue"&gt;private extern static bool &lt;/span&gt;InternetGetConnectedState(&lt;span style="color: blue"&gt;out int &lt;/span&gt;connectionDescription, &lt;span style="color: blue"&gt;int &lt;/span&gt;reservedValue);&lt;br/&gt;&lt;br/&gt;&lt;font face="微软雅黑"&gt;给出上面函数的用法地址&lt;/font&gt;&lt;a title="http://msdn.microsoft.com/en-us/library/windows/desktop/aa384702%28v=vs.85%29.aspx" href="http://msdn.microsoft.com/en-us/library/windows/desktop/aa384702%28v=vs.85%29.aspx"&gt;http://msdn.microsoft.com/en-us/library/windows/desktop/aa384702%28v=vs.85%29.aspx&lt;/a&gt;&lt;span style="color: blue"&gt;int &lt;/span&gt;i = 0;&lt;br/&gt;&lt;span style="color: blue"&gt;if &lt;/span&gt;(InternetGetConnectedState(&lt;span style="color: blue"&gt;out &lt;/span&gt;i, 0))&lt;br/&gt;  &lt;span style="color: #2b91af"&gt;MessageBox&lt;/span&gt;.Show(&lt;span style="color: #a31515"&gt;"联网状态"&lt;/span&gt;);&lt;br/&gt;&lt;span style="color: blue"&gt;else&lt;br/&gt;  &lt;/span&gt;&lt;span style="color: #2b91af"&gt;MessageBox&lt;/span&gt;.Show(&lt;span style="color: #a31515"&gt;"你网线掉了啦"&lt;/span&gt;);&lt;br/&gt;&lt;a href="http://images.cnblogs.com/cnblogs_com/hihell/201109/201109201643256569.png"&gt;&lt;img style="background-image: none; border-bottom: 0px; border-left: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top: 0px; border-right: 0px; padding-top: 0px" title="21" border="0" alt="21" src="http://images.cnblogs.com/cnblogs_com/hihell/201109/201109201643291713.png" width="320" height="219"&gt;&lt;/a&gt;&lt;font face="微软雅黑"&gt;&lt;/font&gt;&lt;font face="微软雅黑"&gt;哈哈，搞定了。上个实例有人询问验证码的判断方法，嘿嘿，留个悬念，回头我给大家做一个实例，看看，效果。&lt;/font&gt;&lt;font face="微软雅黑"&gt;&lt;/font&gt;&amp;nbsp;&lt;font face="微软雅黑"&gt;代码下载地址 &lt;a href="http://files.cnblogs.com/hihell/IsInternet.rar"&gt;IsInternet.rar&lt;/a&gt;&lt;/font&gt;&lt;font face="微软雅黑"&gt;&lt;/font&gt;&amp;nbsp;&lt;font face="微软雅黑"&gt;&lt;/font&gt;&amp;nbsp;&lt;font face="微软雅黑"&gt;&lt;/font&gt;&amp;nbsp;&lt;font face="微软雅黑"&gt;&lt;/font&gt;&amp;nbsp;&lt;font face="微软雅黑"&gt;&lt;/font&gt;&amp;nbsp;&lt;font face="微软雅黑"&gt;&lt;/font&gt;&amp;nbsp;&lt;font face="微软雅黑"&gt;&lt;/font&gt;&amp;nbsp;&lt;font face="微软雅黑"&gt;&lt;/font&gt;&amp;nbsp;&lt;font face="微软雅黑"&gt;&lt;/font&gt;&amp;nbsp;&lt;font face="微软雅黑"&gt;&lt;/font&gt;&amp;nbsp;&lt;font face="微软雅黑"&gt;&lt;/font&gt;&amp;nbsp;&lt;font face="微软雅黑"&gt;&lt;/font&gt;&amp;nbsp;&lt;font face="微软雅黑"&gt;&lt;/font&gt;&amp;nbsp;&lt;font face="微软雅黑"&gt;&lt;/font&gt;&amp;nbsp;&lt;font face="微软雅黑"&gt;&lt;/font&gt;&amp;nbsp;&lt;font face="微软雅黑"&gt;&lt;/font&gt;&amp;nbsp;&lt;font face="微软雅黑"&gt;&lt;/font&gt;&amp;nbsp;&lt;font face="微软雅黑"&gt;&lt;/font&gt;&amp;nbsp;&lt;font face="微软雅黑"&gt;&lt;/font&gt;&amp;nbsp;&lt;font face="微软雅黑"&gt;&lt;/font&gt;&amp;nbsp;&lt;font face="微软雅黑"&gt;&lt;/font&gt;&amp;nbsp;&lt;font face="微软雅黑"&gt;&lt;/font&gt;&amp;nbsp;&lt;img src="http://www.cnblogs.com/hihell/aggbug/2182626.html?type=1" width="1" height="1" alt=""/&gt;&lt;p&gt;&lt;a href="http://www.cnblogs.com/hihell/archive/2011/09/20/2182626.html" target="_blank"&gt;本文链接&lt;/a&gt;&lt;/p&gt;</content></entry><entry><id>http://www.cnblogs.com/hihell/archive/2011/09/19/2181619.html</id><title type="text">KingDZ 变菜鸟，每日一个C#小实例之---C#自动填表</title><summary type="text">这个小实例的作用是用来自动填表，当然是WinForm填写网站上面的表单了，我在这里只是提供一种思想，哈哈，大伙不要用这个来开发非法的软件哦。例如，自动注册，批量评论什么的啊。 但是对于某些看着不爽得网站，哈哈，偶不管你，你自己玩吧。 首先找到百度大哥的登陆界面地址 http://passport.baidu.com/?login&amp;tpl=mn 好了准备工作完成。 注意红框框的地方，这个地方可以填写账号和密码，我们恰恰需要操作的就是这里。 右键查看源文件，我们可以得到如下的代码片段 &lt;td width="50" class="f14"&gt;</summary><published>2011-09-19T10:00:00Z</published><updated>2011-09-19T10:00:00Z</updated><author><name>KingDZ</name><uri>http://www.cnblogs.com/hihell/</uri></author><link rel="alternate" href="http://www.cnblogs.com/hihell/archive/2011/09/19/2181619.html"/><link rel="alternate" type="text/html" href="http://www.cnblogs.com/hihell/archive/2011/09/19/2181619.html"/><content type="html">&lt;p&gt;这个小实例的作用是用来自动填表，当然是WinForm填写网站上面的表单了，我在这里只是提供一种思想，哈哈，大伙不要用这个来开发非法的软件哦。例如，自动注册，批量评论什么的啊。&lt;/p&gt;  &lt;p&gt;但是对于某些看着不爽得网站，哈哈，偶不管你，你自己玩吧。&lt;/p&gt;  &lt;p&gt;首先找到百度大哥的登陆界面地址&amp;#160; &lt;a title="http://passport.baidu.com/?login&amp;amp;tpl=mn" href="http://passport.baidu.com/?login&amp;amp;tpl=mn"&gt;http://passport.baidu.com/?login&amp;amp;tpl=mn&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;好了准备工作完成。&lt;/p&gt;  &lt;p&gt;&lt;a href="http://images.cnblogs.com/cnblogs_com/hihell/201109/201109191759325180.png"&gt;&lt;img style="background-image: none; border-bottom: 0px; border-left: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top: 0px; border-right: 0px; padding-top: 0px" title="1" border="0" alt="1" src="http://images.cnblogs.com/cnblogs_com/hihell/201109/201109191759387344.png" width="540" height="301" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;注意红框框的地方，这个地方可以填写账号和密码，我们恰恰需要操作的就是这里。&lt;/p&gt;  &lt;p&gt;右键查看源文件，我们可以得到如下的代码片段&lt;/p&gt;  &lt;p&gt;&amp;#160; &amp;lt;td width=&amp;quot;50&amp;quot; class=&amp;quot;f14&amp;quot;&amp;gt;帐 号:&amp;lt;/td&amp;gt;   &lt;br /&gt; &amp;lt;td width=&amp;quot;156&amp;quot;&amp;gt;&amp;lt;input type=&amp;quot;text&amp;quot; name=&amp;quot;username&amp;quot; id=&amp;quot;username&amp;quot; value=&amp;quot;&amp;quot; title=&amp;quot;用户名/验证邮箱&amp;quot; onfocus=&amp;quot;checkInput(this)&amp;quot; onblur=&amp;quot;restore(this)&amp;quot; onChange=&amp;quot;chechUserOld('username')&amp;quot; class=&amp;quot;ip&amp;quot;/&amp;gt;&amp;lt;/td&amp;gt;    &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; &amp;lt;td width=&amp;quot;50&amp;quot; class=&amp;quot;f14&amp;quot; valign=&amp;quot;top&amp;quot;&amp;gt;密 码:&amp;lt;/td&amp;gt;    &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; &amp;lt;td width=&amp;quot;156&amp;quot;&amp;gt;&amp;lt;input type=&amp;quot;password&amp;quot; id=&amp;quot;normModPsp&amp;quot; value=&amp;quot;&amp;quot; class=&amp;quot;ip&amp;quot;/&amp;gt;&amp;lt;/td&amp;gt;    &lt;br /&gt; 筛选出对我们有用的信息来&lt;/p&gt;  &lt;p&gt;&amp;lt;input type=&amp;quot;text&amp;quot; name=&amp;quot;username&amp;quot; id=&amp;quot;&lt;font style="background-color: #ffff00"&gt;username&lt;/font&gt;&amp;quot; value=&amp;quot;&amp;quot; /&amp;gt;&lt;/p&gt;  &lt;p&gt;&amp;lt;input type=&amp;quot;password&amp;quot; id=&amp;quot;&lt;font style="background-color: #ffff00"&gt;normModPsp&lt;/font&gt;&amp;quot; value=&amp;quot;&amp;quot; /&amp;gt;&lt;/p&gt;  &lt;p&gt;哈哈，就是这两个标签了，好了，准备下手了。&lt;/p&gt;  &lt;p&gt;为了提高效率，当然网页只下载一次最好了啊。声明一个全局的变量。&lt;/p&gt;  &lt;span style="color: #2b91af"&gt;HtmlDocument &lt;/span&gt;hdoc;&lt;p&gt;当网页加载完成之后，给这个变量赋值。&lt;/p&gt;&lt;span style="color: blue"&gt;private void &lt;/span&gt;webBrowser1_DocumentCompleted(&lt;span style="color: blue"&gt;object &lt;/span&gt;sender, &lt;span style="color: #2b91af"&gt;WebBrowserDocumentCompletedEventArgs &lt;/span&gt;e)&lt;br/&gt;{&lt;br/&gt;    hdoc = webBrowser1.Document;&lt;br/&gt;}&lt;p&gt;哈哈，好了，为下面做准备吧，&lt;/p&gt;&lt;span style="color: green"&gt;//帮助方法根据name获得元素&lt;br/&gt;&lt;/span&gt;&lt;span style="color: blue"&gt;public &lt;/span&gt;&lt;span style="color: #2b91af"&gt;HtmlElement &lt;/span&gt;GetElement_Name(&lt;span style="color: blue"&gt;string &lt;/span&gt;name)&lt;br/&gt;{&lt;br/&gt;    &lt;span style="color: #2b91af"&gt;HtmlElement &lt;/span&gt;e = hdoc.All[name];&lt;br/&gt;    &lt;span style="color: blue"&gt;return &lt;/span&gt;e;&lt;br/&gt;}&lt;br/&gt;&lt;span style="color: green"&gt;//根据Id获取元素&lt;br/&gt;&lt;/span&gt;&lt;span style="color: blue"&gt;public &lt;/span&gt;&lt;span style="color: #2b91af"&gt;HtmlElement &lt;/span&gt;GetElement_Id(&lt;span style="color: blue"&gt;string &lt;/span&gt;id)&lt;br/&gt;{&lt;br/&gt;    &lt;span style="color: #2b91af"&gt;HtmlElement &lt;/span&gt;e = hdoc.GetElementById(id);&lt;br/&gt;    &lt;span style="color: blue"&gt;return &lt;/span&gt;e;&lt;br/&gt;}&lt;p&gt;两个方法，为下面得到标签做准备。大家看看是不是和JS好像啊&lt;/p&gt;&lt;p&gt;&amp;#160;&lt;/p&gt;&lt;span style="color: blue"&gt;private void &lt;/span&gt;btnInput_Click(&lt;span style="color: blue"&gt;object &lt;/span&gt;sender, &lt;span style="color: #2b91af"&gt;EventArgs &lt;/span&gt;e)&lt;br/&gt;{&lt;br/&gt;    &lt;span style="color: #2b91af"&gt;HtmlElement &lt;/span&gt;name = GetElement_Id(&lt;span style="color: #a31515"&gt;&amp;quot;username&amp;quot;&lt;/span&gt;);&lt;br/&gt;    &lt;span style="color: #2b91af"&gt;HtmlElement &lt;/span&gt;pwd = GetElement_Id(&lt;span style="color: #a31515"&gt;&amp;quot;normModPsp&amp;quot;&lt;/span&gt;);&lt;br/&gt;&lt;br/&gt;    name.SetAttribute(&lt;span style="color: #a31515"&gt;&amp;quot;value&amp;quot;&lt;/span&gt;,&lt;span style="color: #a31515"&gt;&amp;quot;Kingdz&amp;quot;&lt;/span&gt;);&lt;br/&gt;    pwd.SetAttribute(&lt;span style="color: #a31515"&gt;&amp;quot;value&amp;quot;&lt;/span&gt;,&lt;span style="color: #a31515"&gt;&amp;quot;Kingdz&amp;quot;&lt;/span&gt;);&lt;br/&gt;&lt;br/&gt;}&lt;p&gt;单击按钮事件，哈哈，填上数据了。&lt;/p&gt;&lt;p&gt;&amp;#160;&lt;/p&gt;&lt;p&gt;&lt;a href="http://images.cnblogs.com/cnblogs_com/hihell/201109/201109191759426076.png"&gt;&lt;img style="background-image: none; border-bottom: 0px; border-left: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top: 0px; border-right: 0px; padding-top: 0px" title="12" border="0" alt="12" src="http://images.cnblogs.com/cnblogs_com/hihell/201109/201109191759478861.png" width="581" height="298" /&gt;&lt;/a&gt;&lt;/p&gt;&lt;p&gt;下面实现自动登陆就好了。&lt;/p&gt;&lt;p&gt;&amp;lt;input type=&amp;quot;submit&amp;quot; value=&amp;quot; 登录 &amp;quot;/&amp;gt;，哈哈，这个比较郁闷了，没有Name和ID，哇塞，我找了Form以后，还是没有&lt;/p&gt;&lt;p&gt;&amp;lt;form action=&amp;quot;&lt;a href="https://passport.baidu.com/?login&amp;quot;"&gt;https://passport.baidu.com/?login&amp;quot;&lt;/a&gt; method=&amp;quot;POST&amp;quot; onSubmit=&amp;quot;return checkForm(this);&amp;quot;&amp;gt;&lt;/p&gt;&lt;p&gt;这可怎么办呢？没事，曲线救国吗？哈哈。&lt;/p&gt;&lt;span style="color: green"&gt;//根据Type获取元素&lt;br/&gt;&lt;/span&gt;&lt;span style="color: blue"&gt;public &lt;/span&gt;&lt;span style="color: #2b91af"&gt;HtmlElement &lt;/span&gt;GetElement_Type(&lt;span style="color: blue"&gt;string &lt;/span&gt;type)&lt;br/&gt;{&lt;br/&gt;    &lt;span style="color: #2b91af"&gt;HtmlElement &lt;/span&gt;e=&lt;span style="color: blue"&gt;null&lt;/span&gt;;&lt;br/&gt;    &lt;span style="color: #2b91af"&gt;HtmlElementCollection &lt;/span&gt;elements = hdoc.GetElementsByTagName(&lt;span style="color: #a31515"&gt;&amp;quot;input&amp;quot;&lt;/span&gt;);&lt;br/&gt;    &lt;span style="color: blue"&gt;foreach &lt;/span&gt;(&lt;span style="color: #2b91af"&gt;HtmlElement &lt;/span&gt;element &lt;span style="color: blue"&gt;in &lt;/span&gt;elements)&lt;br/&gt;    {&lt;br/&gt;        &lt;span style="color: blue"&gt;if &lt;/span&gt;(element.GetAttribute(&lt;span style="color: #a31515"&gt;&amp;quot;type&amp;quot;&lt;/span&gt;) == type)&lt;br/&gt;        {&lt;br/&gt;            e = element;&lt;br/&gt;        }&lt;br/&gt;    }&lt;br/&gt;    &lt;span style="color: blue"&gt;return &lt;/span&gt;e;&lt;br/&gt;}&lt;p&gt;&amp;#160;&lt;/p&gt;&lt;span style="color: blue"&gt;private void &lt;/span&gt;btnLogin_Click(&lt;span style="color: blue"&gt;object &lt;/span&gt;sender, &lt;span style="color: #2b91af"&gt;EventArgs &lt;/span&gt;e)&lt;br/&gt;{&lt;br/&gt;    GetElement_Type(&lt;span style="color: #a31515"&gt;&amp;quot;submit&amp;quot;&lt;/span&gt;).InvokeMember(&lt;span style="color: #a31515"&gt;&amp;quot;click&amp;quot;&lt;/span&gt;);&lt;br/&gt;&lt;br/&gt;}&lt;p&gt;好了，这么就搞定了，提交一把，嘻嘻，没有该用户的。&lt;/p&gt;&lt;p&gt;&lt;a href="http://images.cnblogs.com/cnblogs_com/hihell/201109/201109191759496254.png"&gt;&lt;img style="background-image: none; border-bottom: 0px; border-left: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top: 0px; border-right: 0px; padding-top: 0px" title="21" border="0" alt="21" src="http://images.cnblogs.com/cnblogs_com/hihell/201109/201109191759507202.png" width="214" height="244" /&gt;&lt;/a&gt;&lt;/p&gt;&lt;p&gt;哇塞，要验证码，哎，这个就郁闷了，三言两语说不清楚了，只能以后再给大家慢慢解释。哈哈，自动注册机最重要的就是验证码的分析处理了，难度系数，好几星呢。&lt;/p&gt;&lt;p&gt;当然验证码也是可以解析出来的。这里就不能深入的去研究这个了么哈哈。欢迎大家给给我一起研究这类数据的操作。&lt;/p&gt;&lt;p&gt;关于WebBrowser控件的使用，我想园子里面的这个哥们已经研究的很透彻了，哈哈&lt;/p&gt;&lt;p&gt;&lt;a title="http://www.cnblogs.com/peterzb/archive/2009/07/12/1521787.html" href="http://www.cnblogs.com/peterzb/archive/2009/07/12/1521787.html"&gt;http://www.cnblogs.com/peterzb/archive/2009/07/12/1521787.html&lt;/a&gt;&lt;/p&gt;&lt;p&gt;当然呢，微软还是权威啊&lt;/p&gt;&lt;p&gt;&lt;a title="http://msdn.microsoft.com/zh-cn/library/w290k23d%28VS.80%29.aspx" href="http://msdn.microsoft.com/zh-cn/library/w290k23d%28VS.80%29.aspx"&gt;http://msdn.microsoft.com/zh-cn/library/w290k23d%28VS.80%29.aspx&lt;/a&gt;&lt;/p&gt;&lt;p&gt;更多更好的用法，欢迎你去百度，Google，Bing。哈哈，支持不在于一点，在于我们从知识不断的去发现新鲜的东东。哦KingDZ&lt;/p&gt;&lt;img src="http://www.cnblogs.com/hihell/aggbug/2181619.html?type=1" width="1" height="1" alt=""/&gt;&lt;p&gt;&lt;a href="http://www.cnblogs.com/hihell/archive/2011/09/19/2181619.html" target="_blank"&gt;本文链接&lt;/a&gt;&lt;/p&gt;</content></entry><entry><id>http://www.cnblogs.com/hihell/archive/2011/09/19/2181210.html</id><title type="text">KingDZ 变菜鸟，每日一个C#小实例之---C#变形窗体</title><summary type="text">这个问题可能是很古老的问题了，我之所以写一下，是因为需要整理一下相关资料，对于老鸟来说，创建一个不规则的窗体，确实是小菜一碟，可是这个问题对于一些新手来说，不得不是一个很有意思的话题。 我打算写的小实例中，怎么可以少了这个很有意思的实例呢，还请老鸟不要对偶滴文章拍砖啊，哈哈，新手朋友们，只有不断积累自己很小的实例，才可以在自己的编程之力，越走越远。 好了，我这回给大家带来的就是C#变形窗体，其...</summary><published>2011-09-19T05:36:00Z</published><updated>2011-09-19T05:36:00Z</updated><author><name>KingDZ</name><uri>http://www.cnblogs.com/hihell/</uri></author><link rel="alternate" href="http://www.cnblogs.com/hihell/archive/2011/09/19/2181210.html"/><link rel="alternate" type="text/html" href="http://www.cnblogs.com/hihell/archive/2011/09/19/2181210.html"/><content type="html">&lt;p&gt;这个问题可能是很古老的问题了，我之所以写一下，是因为需要整理一下相关资料，对于老鸟来说，创建一个不规则的窗体，确实是小菜一碟，可是这个问题对于一些新手来说，不得不是一个很有意思的话题。&lt;/p&gt;  &lt;p&gt;我打算写的小实例中，怎么可以少了这个很有意思的实例呢，还请老鸟不要对偶滴文章拍砖啊，哈哈，新手朋友们，只有不断积累自己很小的实例，才可以在自己的编程之力，越走越远。&lt;/p&gt;  &lt;p&gt;好了，我这回给大家带来的就是C#变形窗体，其实，这种事情很常见的就是，软件的美工了。一款有创意的窗体，最好不过了。&lt;/p&gt;  &lt;p&gt;第一步当然是准备工作了&lt;/p&gt;  &lt;p&gt;把程序中的标题栏去掉，否则整个界面将显得很不协调。当然你去掉了标题栏也就去掉了它的最大化、最小化、关闭、移动窗体等功能。为了使程序仍然具有这些功能，我们需在程序中添加一些代码，这样用户就仍然可以像以前一样和程序进行交互。 哈哈，这些属性我想大家都会设置吧。&lt;/p&gt;  &lt;p&gt;哈哈，首先大家准备以后做那个位图文件，我的美术功底不好，自己画了一张。&lt;/p&gt;  &lt;p&gt;&lt;a href="http://images.cnblogs.com/cnblogs_com/hihell/201109/201109191335312339.png"&gt;&lt;img style="background-image: none; border-bottom: 0px; border-left: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top: 0px; border-right: 0px; padding-top: 0px" title="`" border="0" alt="`" src="http://images.cnblogs.com/cnblogs_com/hihell/201109/201109191335377110.png" width="506" height="257" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;好了，下面我们就用这张图片做一个不规则的窗体吧。&lt;/p&gt;  &lt;p&gt;我们下面设置几个窗体的属性吧。&lt;/p&gt;  &lt;p&gt;设置窗体的标题栏。&lt;/p&gt;  &lt;p&gt;&lt;a href="http://images.cnblogs.com/cnblogs_com/hihell/201109/201109191335386106.png"&gt;&lt;img style="background-image: none; border-bottom: 0px; border-left: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top: 0px; border-right: 0px; padding-top: 0px" title="12" border="0" alt="12" src="http://images.cnblogs.com/cnblogs_com/hihell/201109/201109191335401796.png" width="244" height="105" /&gt;&lt;/a&gt;、&lt;/p&gt;  &lt;p&gt;设置窗体的背景以及拉伸模式。&lt;/p&gt;  &lt;p&gt;&lt;a href="http://images.cnblogs.com/cnblogs_com/hihell/201109/201109191335406714.png"&gt;&lt;img style="background-image: none; border-bottom: 0px; border-left: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top: 0px; border-right: 0px; padding-top: 0px" title="33" border="0" alt="33" src="http://images.cnblogs.com/cnblogs_com/hihell/201109/201109191335428185.png" width="244" height="62" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;设置窗体的透明颜色&lt;/p&gt;  &lt;p&gt;&lt;a href="http://images.cnblogs.com/cnblogs_com/hihell/201109/201109191335439481.png"&gt;&lt;img style="background-image: none; border-bottom: 0px; border-left: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top: 0px; border-right: 0px; padding-top: 0px" title="222" border="0" alt="222" src="http://images.cnblogs.com/cnblogs_com/hihell/201109/201109191335457888.png" width="244" height="42" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;好了，完成了。&lt;/p&gt;  &lt;p&gt;&lt;a href="http://images.cnblogs.com/cnblogs_com/hihell/201109/201109191335469184.png"&gt;&lt;img style="background-image: none; border-bottom: 0px; border-left: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top: 0px; border-right: 0px; padding-top: 0px" title="231" border="0" alt="231" src="http://images.cnblogs.com/cnblogs_com/hihell/201109/201109191335476195.png" width="244" height="217" /&gt;&lt;/a&gt;这个是最简单的模式了，呵呵，用一张图片，使其中的某些颜色透明，就达到我们的目的了，好了，当然，这种窗体需要我们实现窗体的功能，比如，最大化，关闭..什么的。&lt;/p&gt;  &lt;p&gt;添加关闭事件&lt;/p&gt;  &lt;p&gt;&lt;a href="http://images.cnblogs.com/cnblogs_com/hihell/201109/20110919133549424.png"&gt;&lt;img style="background-image: none; border-bottom: 0px; border-left: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top: 0px; border-right: 0px; padding-top: 0px" title="211" border="0" alt="211" src="http://images.cnblogs.com/cnblogs_com/hihell/201109/201109191335504229.png" width="244" height="189" /&gt;&lt;/a&gt;，下面，添加移动窗体的事件。&lt;/p&gt;  &lt;p&gt;首先说一下&amp;#160; &lt;/p&gt;  &lt;p&gt;&lt;strong&gt;SystemInformation 类&lt;/strong&gt;&lt;/p&gt;          &lt;p&gt;提供当前系统环境的有关信息。 &lt;/p&gt;  &lt;p&gt;&lt;b&gt;SystemInformation&lt;/b&gt; 类提供 &lt;b&gt;static&lt;/b&gt; 属性，该属性可用于获取当前系统环境的有关信息。该类提供对信息（例如，Windows 显示元素大小、操作系统设置、网络可用性和系统上安装的硬件的功能）的访问。此类无法实例化。具体的每个成员代表什么，请参照 &lt;a title="http://msdn.microsoft.com/zh-cn/library/system.windows.forms.systeminformation_members%28v=vs.80%29.aspx" href="http://msdn.microsoft.com/zh-cn/library/system.windows.forms.systeminformation_members%28v=vs.80%29.aspx"&gt;http://msdn.microsoft.com/zh-cn/library/system.windows.forms.systeminformation_members%28v=vs.80%29.aspx&lt;/a&gt;&lt;/p&gt;  Point mouseOffset;&lt;br/&gt;&lt;span style="color: blue"&gt;bool &lt;/span&gt;isMouseDown = &lt;span style="color: blue"&gt;false&lt;/span&gt;;&lt;br/&gt;&lt;span style="color: blue"&gt;private void &lt;/span&gt;Form1_MouseDown(&lt;span style="color: blue"&gt;object &lt;/span&gt;sender, &lt;span style="color: #2b91af"&gt;MouseEventArgs &lt;/span&gt;e)&lt;br/&gt;{&lt;br/&gt;    &lt;span style="color: blue"&gt;int &lt;/span&gt;xOffset;&lt;br/&gt;    &lt;span style="color: blue"&gt;int &lt;/span&gt;yOffset;&lt;br/&gt;    &lt;span style="color: blue"&gt;if &lt;/span&gt;(e.Button == &lt;span style="color: #2b91af"&gt;MouseButtons&lt;/span&gt;.Left)&lt;br/&gt;    {&lt;br/&gt;        xOffset = -e.X - &lt;span style="color: #2b91af"&gt;SystemInformation&lt;/span&gt;.FrameBorderSize.Width;&lt;br/&gt;        yOffset = -e.Y - -&lt;span style="color: #2b91af"&gt;SystemInformation&lt;/span&gt;.FrameBorderSize.Height;&lt;br/&gt;        mouseOffset = &lt;span style="color: blue"&gt;new &lt;/span&gt;Point(xOffset, yOffset);&lt;br/&gt;        isMouseDown = &lt;span style="color: blue"&gt;true&lt;/span&gt;;&lt;br/&gt;    }&lt;br/&gt;}&lt;br/&gt;&lt;br/&gt;&lt;span style="color: blue"&gt;private void &lt;/span&gt;Form1_MouseMove(&lt;span style="color: blue"&gt;object &lt;/span&gt;sender, &lt;span style="color: #2b91af"&gt;MouseEventArgs &lt;/span&gt;e)&lt;br/&gt;{&lt;br/&gt;    &lt;span style="color: blue"&gt;if &lt;/span&gt;(isMouseDown)&lt;br/&gt;    {&lt;br/&gt;        Point mousePos = &lt;span style="color: #2b91af"&gt;Control&lt;/span&gt;.MousePosition;&lt;br/&gt;        mousePos.Offset(mouseOffset.X, mouseOffset.Y);&lt;br/&gt;        Location = mousePos;&lt;br/&gt;    }&lt;br/&gt;}&lt;br/&gt;&lt;br/&gt;&lt;span style="color: blue"&gt;private void &lt;/span&gt;Form1_MouseUp(&lt;span style="color: blue"&gt;object &lt;/span&gt;sender, &lt;span style="color: #2b91af"&gt;MouseEventArgs &lt;/span&gt;e)&lt;br/&gt;{&lt;br/&gt;    &lt;span style="color: blue"&gt;if &lt;/span&gt;(e.Button == &lt;span style="color: #2b91af"&gt;MouseButtons&lt;/span&gt;.Left)&lt;br/&gt;        isMouseDown = &lt;span style="color: blue"&gt;false&lt;/span&gt;;&lt;br/&gt;}&lt;p&gt;上面的三个事件代表了，按下鼠标，移动鼠标，释放鼠标的操作。总结起来就是网络上面常见的三步：&lt;/p&gt;&lt;p&gt;1.首先准备一张不规则的背景图片。&lt;/p&gt;&lt;p&gt;2.新建项目，将窗体FormBorderStyle设置为none，以去掉标题栏。设置BackgroundImage。&lt;/p&gt;&lt;p&gt;3.设置窗体的TransparencyKey属性为图片中圆角边框之外的颜色，窗体在遇到该颜色将显示为透明&lt;/p&gt;&lt;p&gt;通常这种做法是OK的，运行即可看到效果。&lt;/p&gt;&lt;p&gt;注意：&lt;/p&gt;&lt;p&gt;&lt;font style="background-color: #ffff00"&gt;如果监视器的颜色深度设置大于 24 位，则不管 TransparencyKey 属性是如何设置的，窗体的非透明部分都会产生显示问题。&lt;/font&gt;&lt;/p&gt;&lt;p&gt;&lt;font style="background-color: #ffff00"&gt;若要避免出现这种问题，请确保“显示”控制面板中的监视器颜色深度的设置小于 24 位。当开发具有这种透明功能的应用程序时，请牢记应使您的用户意识到此问题。 &lt;/font&gt;&lt;/p&gt;&lt;p&gt;下面在介绍一种方式，就是自定义窗体，这个需要的就是我们自己绘制窗体了。&lt;/p&gt;GraphicsPath&lt;p&gt;他的用法可以绘制我们想要的窗体&lt;/p&gt;&lt;span style="color: blue"&gt;private void &lt;/span&gt;NewForm_Load(&lt;span style="color: blue"&gt;object &lt;/span&gt;sender, &lt;span style="color: #2b91af"&gt;EventArgs &lt;/span&gt;e)&lt;br/&gt;{&lt;br/&gt;    &lt;span style="color: #2b91af"&gt;Bitmap &lt;/span&gt;image = (&lt;span style="color: #2b91af"&gt;Bitmap&lt;/span&gt;)&lt;span style="color: #2b91af"&gt;Image&lt;/span&gt;.FromFile(&lt;span style="color: #a31515"&gt;@&amp;quot;C:\te\1.bmp&amp;quot;&lt;/span&gt;);&lt;br/&gt;    &lt;span style="color: #2b91af"&gt;GraphicsPath &lt;/span&gt;path = &lt;span style="color: blue"&gt;new &lt;/span&gt;&lt;span style="color: #2b91af"&gt;GraphicsPath&lt;/span&gt;();&lt;br/&gt;    &lt;span style="color: blue"&gt;int &lt;/span&gt;width = image.Width;&lt;br/&gt;    &lt;span style="color: blue"&gt;int &lt;/span&gt;height = image.Height;&lt;br/&gt;    Rectangle rect;&lt;br/&gt;    Color tranColor = image.GetPixel(1,1);&lt;br/&gt;    &lt;span style="color: blue"&gt;for &lt;/span&gt;(&lt;span style="color: blue"&gt;int &lt;/span&gt;i = 0; i &amp;lt; width-1; i++)&lt;br/&gt;    {&lt;br/&gt;        &lt;span style="color: blue"&gt;for &lt;/span&gt;(&lt;span style="color: blue"&gt;int &lt;/span&gt;j = 0; j &amp;lt; height-1; j++)&lt;br/&gt;        {&lt;br/&gt;            &lt;span style="color: blue"&gt;if &lt;/span&gt;(image.GetPixel(i, j) != tranColor) {&lt;br/&gt;                rect = &lt;span style="color: blue"&gt;new &lt;/span&gt;Rectangle(i,j,1,1);&lt;br/&gt;                path.AddRectangle(rect);&lt;br/&gt;            }&lt;br/&gt;        }&lt;br/&gt;    }&lt;br/&gt;    &lt;span style="color: blue"&gt;this&lt;/span&gt;.Region = &lt;span style="color: blue"&gt;new &lt;/span&gt;&lt;span style="color: #2b91af"&gt;Region&lt;/span&gt;(path);&lt;br/&gt;}&lt;p&gt;当然你也可以在窗体的Paint事件里面写上自己的代码。&lt;/p&gt;&lt;p&gt;&lt;a href="http://images.cnblogs.com/cnblogs_com/hihell/201109/20110919133553617.png"&gt;&lt;img style="background-image: none; border-bottom: 0px; border-left: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top: 0px; border-right: 0px; padding-top: 0px" title="2221" border="0" alt="2221" src="http://images.cnblogs.com/cnblogs_com/hihell/201109/2011091913355889.png" width="405" height="203" /&gt;&lt;/a&gt;&lt;/p&gt;&lt;p&gt;这个是文字窗体&lt;/p&gt;&lt;span style="color: blue"&gt;private void &lt;/span&gt;NewForm_Paint(&lt;span style="color: blue"&gt;object &lt;/span&gt;sender, &lt;span style="color: #2b91af"&gt;PaintEventArgs &lt;/span&gt;e)&lt;br/&gt;{&lt;br/&gt;    &lt;span style="color: #2b91af"&gt;GraphicsPath &lt;/span&gt;p = &lt;span style="color: blue"&gt;new &lt;/span&gt;&lt;span style="color: #2b91af"&gt;GraphicsPath&lt;/span&gt;();&lt;br/&gt;    p.AddString(&lt;span style="color: #a31515"&gt;&amp;quot;KingDZ&amp;quot;&lt;/span&gt;, &lt;span style="color: #2b91af"&gt;FontFamily&lt;/span&gt;.GenericMonospace, 0, 100f, &lt;span style="color: blue"&gt;new &lt;/span&gt;Point(10, 10), &lt;span style="color: #2b91af"&gt;StringFormat&lt;/span&gt;.GenericDefault);&lt;br/&gt;    &lt;span style="color: blue"&gt;this&lt;/span&gt;.Region = &lt;span style="color: blue"&gt;new &lt;/span&gt;&lt;span style="color: #2b91af"&gt;Region&lt;/span&gt;(p);&lt;br/&gt;}&lt;p&gt;&amp;#160;&lt;/p&gt;&lt;p&gt;拖动不规程窗体分三个步骤：&lt;/p&gt;&lt;p&gt;1、响应窗体Mouse_Down事件，记录鼠标左键按下时的坐标&lt;/p&gt;&lt;p&gt;2、响应窗体的Mouse_Move事件，获取当前鼠标相对屏幕的坐标减去以上获得X，Y坐标，赋值给窗体Location&lt;/p&gt;&lt;p&gt;3、响应窗体的Mouse_Up事件，释放拖动操作&lt;/p&gt;&lt;p&gt;在上面的代码中，我们也已经涉及到了。&lt;/p&gt;&lt;p&gt;好了，这个例子先到这吧，有些匆忙。哈哈。&lt;img style="border-bottom-style: none; border-left-style: none; border-top-style: none; border-right-style: none" class="wlEmoticon wlEmoticon-surprisedsmile" alt="惊讶" src="http://images.cnblogs.com/cnblogs_com/hihell/201109/201109191335594973.png" /&gt;&lt;/p&gt;&lt;img src="http://www.cnblogs.com/hihell/aggbug/2181210.html?type=1" width="1" height="1" alt=""/&gt;&lt;p&gt;&lt;a href="http://www.cnblogs.com/hihell/archive/2011/09/19/2181210.html" target="_blank"&gt;本文链接&lt;/a&gt;&lt;/p&gt;</content></entry><entry><id>http://www.cnblogs.com/hihell/archive/2011/09/16/2178660.html</id><title type="text">KingDZ 变菜鸟，每日一个C#小实例之---C#取色器</title><summary type="text">今天首先给大家带来的实例是C#取色器，目前互联网上各种版本的取色器多不胜数，其中好用的软件更是多如牛毛，今天我们就简单的讲解一个C#版本的取色器，诞生的过程，整个过程中，我会不断的完善我们的取色器，争取做一个可发布版本的取色器，也正好趁这个机会开发一个适合自己在实际编程中方便的取色去，哈哈，开始吧。 大家可以去其他网站上面找相应的软件，互联网上面也有很多很好的开源代码。博取众家之长，不断学习。 哦，对了，顺表告诉大家一句，我的开发环境是Window7+VS2010呵呵。 当然了，我们这次首先还是基于API接口开发，当然大家有更好的建议，欢迎告诉我，我喜欢更高的效率。哈哈。 首先我们要得...</summary><published>2011-09-16T05:56:00Z</published><updated>2011-09-16T05:56:00Z</updated><author><name>KingDZ</name><uri>http://www.cnblogs.com/hihell/</uri></author><link rel="alternate" href="http://www.cnblogs.com/hihell/archive/2011/09/16/2178660.html"/><link rel="alternate" type="text/html" href="http://www.cnblogs.com/hihell/archive/2011/09/16/2178660.html"/><content type="html">&lt;p&gt;今天首先给大家带来的实例是C#取色器，目前互联网上各种版本的取色器多不胜数，其中好用的软件更是多如牛毛，今天我们就简单的讲解一个C#版本的取色器，诞生的过程，整个过程中，我会不断的完善我们的取色器，争取做一个可发布版本的取色器，也正好趁这个机会开发一个适合自己在实际编程中方便的取色去，哈哈，开始吧。&lt;/p&gt;  &lt;p&gt;大家可以去其他网站上面找相应的软件，互联网上面也有很多很好的开源代码。博取众家之长，不断学习。&lt;/p&gt;  &lt;p&gt;哦，对了，顺表告诉大家一句，我的开发环境是Window7+VS2010呵呵。&lt;/p&gt;  &lt;p&gt;当然了，我们这次首先还是基于API接口开发，当然大家有更好的建议，欢迎告诉我，我喜欢更高的效率。哈哈。&lt;/p&gt;  &lt;p&gt;首先我们要得到颜色，首先要做的就是得到屏幕上面某点的坐标了。哈哈&lt;/p&gt;  &lt;p&gt;简单。上节课也实现了，这节课我们采用新的办法&lt;/p&gt;  &lt;span style="color: #2b91af"&gt;Point &lt;/span&gt;p = &lt;span style="color: blue"&gt;new &lt;/span&gt;&lt;span style="color: #2b91af"&gt;Point&lt;/span&gt;(MousePosition.X, MousePosition.Y);&lt;br/&gt;lblX.Text = p.X.ToString();&lt;br/&gt;lblY.Text = p.Y.ToString();&lt;p&gt;好了，得到鼠标的坐标了。对了，我把这个放在&lt;/p&gt;tm_Tick&lt;p&gt;里面了，这个是时间控件的Tick事件哦。&lt;/p&gt;&lt;p&gt;首先为了下面的代码方便，我们需要首先了解一下什么是 IntPtr&lt;/p&gt;&lt;p&gt;C#中的IntPtr类型称为“&lt;font style="background-color: #ffff00"&gt;平台特定的整数类型&lt;/font&gt;”，它们用于本机资源，如窗口句柄。 &lt;/p&gt;&lt;p&gt;IntPtr 类型被设计成整数，其大小适用于特定平台。即是说，此类型的实例在 32 位硬件和操作&lt;/p&gt;&lt;p&gt;系统中将是 32 位，在 64 位硬件和操作系统上将是 64 位。&lt;/p&gt;&lt;p&gt;具体的用法，还有其中的奥妙，我想大家还是需要去了解一下。&lt;/p&gt;&lt;p&gt;&lt;a title="http://msdn.microsoft.com/zh-cn/library/system.intptr.aspx" href="http://msdn.microsoft.com/zh-cn/library/system.intptr.aspx"&gt;http://msdn.microsoft.com/zh-cn/library/system.intptr.aspx&lt;/a&gt;&lt;/p&gt;&lt;p&gt;好了，我们来实现我们的取色器代码吧。&lt;/p&gt;&lt;p&gt;首先我们先用最简单的原理实现一个版本的取色器，我们实现的是移动鼠标显示桌面任意点的颜色。版本1当然是最简单的实现啦。&lt;/p&gt;&lt;p&gt;&lt;a href="http://images.cnblogs.com/cnblogs_com/hihell/201109/201109161355302341.png"&gt;&lt;img style="background-image: none; border-right-width: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px; padding-top: 0px" title="2" border="0" alt="2" src="http://images.cnblogs.com/cnblogs_com/hihell/201109/20110916135532587.png" width="244" height="212" /&gt;&lt;/a&gt;&lt;/p&gt;&lt;p&gt;首先我们依然是调用API接口，&lt;/p&gt;[&lt;span style="color: #2b91af"&gt;DllImport&lt;/span&gt;(&lt;span style="color: #a31515"&gt;&amp;quot;User32&amp;quot;&lt;/span&gt;)]&lt;br/&gt;&lt;span style="color: blue"&gt;public static extern &lt;/span&gt;&lt;span style="color: #2b91af"&gt;IntPtr &lt;/span&gt;GetDC(&lt;span style="color: #2b91af"&gt;IntPtr &lt;/span&gt;h);&lt;br/&gt;[&lt;span style="color: #2b91af"&gt;DllImport&lt;/span&gt;(&lt;span style="color: #a31515"&gt;&amp;quot;gdi32&amp;quot;&lt;/span&gt;)]&lt;br/&gt;&lt;span style="color: blue"&gt;public static extern uint &lt;/span&gt;GetPixel(&lt;span style="color: #2b91af"&gt;IntPtr &lt;/span&gt;h, &lt;span style="color: #2b91af"&gt;Point &lt;/span&gt;p);&lt;p&gt;GetDC的说明，请参照官网&lt;/p&gt;&lt;p&gt;&lt;a title="http://msdn.microsoft.com/en-us/library/dd144871(v=vs.85).aspx" href="http://msdn.microsoft.com/en-us/library/dd144871(v=vs.85).aspx"&gt;http://msdn.microsoft.com/en-us/library/dd144871(v=vs.85).aspx&lt;/a&gt;&lt;/p&gt;&lt;p&gt;GetPixel&amp;#160; 该函数检索指定坐标点的像素的RGB颜色值。&lt;/p&gt;&lt;p&gt;&lt;a title="http://msdn.microsoft.com/en-us/library/dd144909%28v=vs.85%29.aspx" href="http://msdn.microsoft.com/en-us/library/dd144909%28v=vs.85%29.aspx"&gt;http://msdn.microsoft.com/en-us/library/dd144909%28v=vs.85%29.aspx&lt;/a&gt;&lt;/p&gt;&lt;p&gt;建议英文好的童鞋可以好好看看上面的说明，对你绝对有好处滴。哈哈。&lt;/p&gt;&lt;p&gt;好了，说简单一些上面的两个函数，一个是取屏幕，另一个就是得到坐标点像素。&lt;/p&gt;&lt;p&gt;我们继续吧。&lt;/p&gt;&lt;span style="color: #2b91af"&gt;IntPtr &lt;/span&gt;h = GetDC(&lt;span style="color: blue"&gt;new &lt;/span&gt;&lt;span style="color: #2b91af"&gt;IntPtr&lt;/span&gt;(0)); &lt;span style="color: green"&gt;//取屏幕，0代表着全屏&lt;br/&gt;&lt;/span&gt;&lt;span style="color: blue"&gt;uint &lt;/span&gt;color = GetPixel(h, p);        &lt;span style="color: green"&gt;//取颜色喽&lt;br/&gt;&lt;/span&gt;&lt;span style="color: blue"&gt;uint &lt;/span&gt;red = (color &amp;amp; 0xFF);            &lt;span style="color: green"&gt;//转换红色&lt;br/&gt;&lt;/span&gt;&lt;span style="color: blue"&gt;uint &lt;/span&gt;green = (color &amp;amp; 0xFF00) / 256;    &lt;span style="color: green"&gt;//转换绿色&lt;br/&gt;&lt;/span&gt;&lt;span style="color: blue"&gt;uint &lt;/span&gt;blue = (color &amp;amp; 0xFF0000) / 65536;&lt;span style="color: green"&gt;//转换蓝色&lt;br/&gt;&lt;/span&gt;&lt;p&gt;上面的颜色转换使我们在编程中，经常用到的技巧，建议大家记住。&lt;/p&gt;txtRGB.Text = &lt;span style="color: blue"&gt;string&lt;/span&gt;.Format(&lt;span style="color: #a31515"&gt;&amp;quot;{0},{1},{2}&amp;quot;&lt;/span&gt;, red, green, blue);&lt;br/&gt;txtT.Text = color.ToString();&lt;br/&gt;txtL.Text = &lt;span style="color: #a31515"&gt;&amp;quot;#&amp;quot; &lt;/span&gt;+ red.ToString(&lt;span style="color: #a31515"&gt;&amp;quot;x&amp;quot;&lt;/span&gt;).PadLeft(2, &lt;span style="color: #a31515"&gt;'0'&lt;/span&gt;) + green.ToString(&lt;span style="color: #a31515"&gt;&amp;quot;x&amp;quot;&lt;/span&gt;).PadLeft(2, &lt;span style="color: #a31515"&gt;'0'&lt;/span&gt;) + blue.ToString(&lt;span style="color: #a31515"&gt;&amp;quot;x&amp;quot;&lt;/span&gt;).PadLeft(2, &lt;span style="color: #a31515"&gt;'0'&lt;/span&gt;);&lt;br/&gt;&lt;br/&gt;picColor.BackColor = &lt;span style="color: #2b91af"&gt;Color&lt;/span&gt;.FromArgb((&lt;span style="color: blue"&gt;int&lt;/span&gt;)red,(&lt;span style="color: blue"&gt;int&lt;/span&gt;)green,(&lt;span style="color: blue"&gt;int&lt;/span&gt;)blue);&lt;p&gt;好了，最上面的代码也已完成了，呵呵，OK，简易版本的完成了。我们下面实现一个相对比较复杂的。大家觉得怎么样，这个只要一打开就可以会得到颜色了，但是可控制性不好。下面我们自己想办法控制，啥时间去颜色，啥时间不取颜色。&lt;/p&gt;&lt;p&gt;我们改变更一种写法来实现我们想要的效果。&lt;/p&gt;&lt;p&gt;首先声明几个坐标点。分别是，窗口起始左边，Window左下角和右下角。为什么出现这几个坐标呢，拜托。假如你想取到你取色器那个位置下面的坐标呢？你还取得到吗？覆盖着呢。&lt;/p&gt;&lt;p&gt;好了。开始 &lt;/p&gt;&lt;span style="color: blue"&gt;public &lt;/span&gt;&lt;span style="color: #2b91af"&gt;Point &lt;/span&gt;formLoad, formLeft, formRight;&lt;p&gt;当然了，我们也需要一个及时取色的Timer &lt;/p&gt;&lt;span style="color: #2b91af"&gt;Timer &lt;/span&gt;tm;&lt;br/&gt;&lt;font face="微软雅黑"&gt;首先在构造函数里面初始化数据。&lt;/font&gt;&lt;span style="color: #2b91af"&gt;Rectangle &lt;/span&gt;rect = &lt;span style="color: #2b91af"&gt;Screen&lt;/span&gt;.PrimaryScreen.WorkingArea;&lt;br/&gt;formLeft = &lt;span style="color: blue"&gt;new &lt;/span&gt;&lt;span style="color: #2b91af"&gt;Point&lt;/span&gt;(0, rect.Height - &lt;span style="color: blue"&gt;this&lt;/span&gt;.Height);&lt;br/&gt;formRight = &lt;span style="color: blue"&gt;new &lt;/span&gt;&lt;span style="color: #2b91af"&gt;Point&lt;/span&gt;(rect.Width - &lt;span style="color: blue"&gt;this&lt;/span&gt;.Width, rect.Height - &lt;span style="color: blue"&gt;this&lt;/span&gt;.Height);&lt;span style="color: #2b91af"&gt;Screen&lt;/span&gt;.PrimaryScreen.WorkingArea得到屏幕工作区域，记住不包括任务栏啊，哈哈，怎么取到任务栏的颜色，你自己想办法吧。&lt;p&gt;下面我们还需要几个API来实现。&lt;/p&gt;[&lt;span style="color: #2b91af"&gt;DllImport&lt;/span&gt;(&lt;span style="color: #a31515"&gt;&amp;quot;gdi32&amp;quot;&lt;/span&gt;)]&lt;br/&gt;&lt;span style="color: blue"&gt;private static extern &lt;/span&gt;&lt;span style="color: #2b91af"&gt;IntPtr &lt;/span&gt;CreateDC(&lt;br/&gt;&lt;span style="color: blue"&gt;string &lt;/span&gt;lpszDriver, &lt;span style="color: green"&gt;// 驱动名称&lt;br/&gt;&lt;/span&gt;&lt;span style="color: blue"&gt;string &lt;/span&gt;lpszDevice, &lt;span style="color: green"&gt;// 设备名称&lt;br/&gt;&lt;/span&gt;&lt;span style="color: blue"&gt;string &lt;/span&gt;lpszOutput, &lt;span style="color: green"&gt;// 无用，可以设定位&amp;quot;NULL&amp;quot;&lt;br/&gt;&lt;/span&gt;&lt;span style="color: #2b91af"&gt;IntPtr &lt;/span&gt;lpInitData &lt;span style="color: green"&gt;// 任意的打印机数据&lt;br/&gt;&lt;/span&gt;);&lt;p&gt;上面这个API可以到&lt;a title="http://msdn.microsoft.com/en-us/library/dd183490%28v=vs.85%29.aspx" href="http://msdn.microsoft.com/en-us/library/dd183490%28v=vs.85%29.aspx"&gt;http://msdn.microsoft.com/en-us/library/dd183490%28v=vs.85%29.aspx&lt;/a&gt;查找资料。&lt;/p&gt;[&lt;span style="color: #2b91af"&gt;DllImport&lt;/span&gt;(&lt;span style="color: #a31515"&gt;&amp;quot;gdi32.dll&amp;quot;&lt;/span&gt;)]&lt;br/&gt;&lt;span style="color: blue"&gt;private static extern bool &lt;/span&gt;BitBlt(&lt;br/&gt;&lt;span style="color: #2b91af"&gt;IntPtr &lt;/span&gt;hdcDest, &lt;span style="color: green"&gt;// 目标设备的句柄&lt;br/&gt;&lt;/span&gt;&lt;span style="color: blue"&gt;int &lt;/span&gt;nXDest, &lt;span style="color: green"&gt;// 目标对象的左上角的X坐标&lt;br/&gt;&lt;/span&gt;&lt;span style="color: blue"&gt;int &lt;/span&gt;nYDest, &lt;span style="color: green"&gt;// 目标对象的左上角的X坐标&lt;br/&gt;&lt;/span&gt;&lt;span style="color: blue"&gt;int &lt;/span&gt;nWidth, &lt;span style="color: green"&gt;// 目标对象的矩形的宽度&lt;br/&gt;&lt;/span&gt;&lt;span style="color: blue"&gt;int &lt;/span&gt;nHeight, &lt;span style="color: green"&gt;// 目标对象的矩形的长度&lt;br/&gt;&lt;/span&gt;&lt;span style="color: #2b91af"&gt;IntPtr &lt;/span&gt;hdcSrc, &lt;span style="color: green"&gt;// 源设备的句柄&lt;br/&gt;&lt;/span&gt;&lt;span style="color: blue"&gt;int &lt;/span&gt;nXSrc, &lt;span style="color: green"&gt;// 源对象的左上角的X坐标&lt;br/&gt;&lt;/span&gt;&lt;span style="color: blue"&gt;int &lt;/span&gt;nYSrc, &lt;span style="color: green"&gt;// 源对象的左上角的X坐标&lt;br/&gt;&lt;/span&gt;&lt;span style="color: blue"&gt;int &lt;/span&gt;dwRop &lt;span style="color: green"&gt;// 光栅的操作值&lt;br/&gt;&lt;/span&gt;);&lt;p&gt;&lt;a title="http://msdn.microsoft.com/en-us/library/dd183370%28v=vs.85%29.aspx" href="http://msdn.microsoft.com/en-us/library/dd183370%28v=vs.85%29.aspx"&gt;http://msdn.microsoft.com/en-us/library/dd183370%28v=vs.85%29.aspx&lt;/a&gt;上面的API解释在这个地方。&lt;/p&gt;&lt;p&gt;当然，除了用API，还有其他的办法吗？当然有的，一会我们介绍。&lt;/p&gt;&lt;p&gt;&lt;a href="http://images.cnblogs.com/cnblogs_com/hihell/201109/201109161355335736.png"&gt;&lt;img style="background-image: none; border-right-width: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px; padding-top: 0px" title="2" border="0" alt="2" src="http://images.cnblogs.com/cnblogs_com/hihell/201109/201109161355367429.png" width="277" height="178" /&gt;&lt;/a&gt;&lt;/p&gt;btnGetColor_Click&lt;p&gt;该事件是按钮的单击事件，我们需要在里面定位我们的取色窗体。&lt;/p&gt;formLoad = &lt;span style="color: blue"&gt;this&lt;/span&gt;.Location;&lt;br/&gt;&lt;span style="color: blue"&gt;this&lt;/span&gt;.Location = formLeft;&lt;br/&gt;&lt;span style="color: blue"&gt;this&lt;/span&gt;.TopMost = &lt;span style="color: blue"&gt;true&lt;/span&gt;;&lt;p&gt;我像上面的代码很好理解吧。&lt;/p&gt;tm = &lt;span style="color: blue"&gt;new &lt;/span&gt;&lt;span style="color: #2b91af"&gt;Timer&lt;/span&gt;();&lt;br/&gt;tm.Interval = 1;&lt;br/&gt;tm.Tick += &lt;span style="color: blue"&gt;new &lt;/span&gt;&lt;span style="color: #2b91af"&gt;EventHandler&lt;/span&gt;(tm_Tick);&lt;br/&gt;tm.Enabled = &lt;span style="color: blue"&gt;true&lt;/span&gt;;&lt;p&gt;好了计时器也在这里开始工作了。我们首先实现计时器的代码。&lt;/p&gt;&lt;p&gt;首先创建显示器的DC&lt;/p&gt;&lt;span style="color: #2b91af"&gt;IntPtr &lt;/span&gt;hdlDisplay = CreateDC(&lt;span style="color: #a31515"&gt;&amp;quot;display&amp;quot;&lt;/span&gt;,&lt;span style="color: blue"&gt;null&lt;/span&gt;,&lt;span style="color: blue"&gt;null&lt;/span&gt;,&lt;span style="color: #2b91af"&gt;IntPtr&lt;/span&gt;.Zero);&lt;p&gt;从指定设备的句柄创建新的 Graphics 对象&lt;/p&gt;&lt;span style="color: #2b91af"&gt;Graphics &lt;/span&gt;g= &lt;span style="color: #2b91af"&gt;Graphics&lt;/span&gt;.FromHdc(hdlDisplay);&lt;p&gt;创建只有一个象素大小的 Bitmap 对象&lt;/p&gt;&lt;span style="color: #2b91af"&gt;Bitmap &lt;/span&gt;bmp = &lt;span style="color: blue"&gt;new &lt;/span&gt;&lt;span style="color: #2b91af"&gt;Bitmap&lt;/span&gt;(1, 1, g);&lt;p&gt;从指定 Image 对象创建新的 Graphics 对象&lt;/p&gt;&lt;span style="color: #2b91af"&gt;Graphics &lt;/span&gt;gimg = &lt;span style="color: #2b91af"&gt;Graphics&lt;/span&gt;.FromImage(bmp);&lt;p&gt;获得屏幕的句柄与获得位图的句柄&lt;/p&gt;&lt;span style="color: #2b91af"&gt;IntPtr &lt;/span&gt;hdlScreen = g.GetHdc();&lt;br/&gt;&lt;span style="color: #2b91af"&gt;IntPtr &lt;/span&gt;hdlBmp = gimg.GetHdc();&lt;p&gt;把当前屏幕中鼠标指针所在位置的一个象素拷贝到位图中&lt;/p&gt;BitBlt(hdlBmp, 0, 0, 1, 1, hdlScreen, MousePosition.X, MousePosition.Y, 13369376);&lt;p&gt;释放屏幕句柄和释放位图句柄&lt;/p&gt;g.ReleaseHdc(hdlScreen);&lt;br/&gt;gimg.ReleaseHdc(hdlBmp);&lt;p&gt;好了，到这取色的流程得到了，当然你也可以这么实现，下面的就不需要句柄了、&lt;/p&gt;&lt;p&gt;获得当前屏幕的&lt;/p&gt;&lt;span style="color: #2b91af"&gt;Screen &lt;/span&gt;screen = &lt;span style="color: #2b91af"&gt;Screen&lt;/span&gt;.PrimaryScreen;&lt;br/&gt;&lt;span style="color: #2b91af"&gt;Rectangle &lt;/span&gt;rc = screen.Bounds;&lt;br/&gt;&lt;span style="color: blue"&gt;int &lt;/span&gt;iWidth = rc.Width;&lt;br/&gt;&lt;span style="color: blue"&gt;int &lt;/span&gt;iHeight = rc.Height;&lt;p&gt;创建一个和屏幕一样大的Bitmap&lt;/p&gt;&lt;span style="color: #2b91af"&gt;Image &lt;/span&gt;myImage = &lt;span style="color: blue"&gt;new &lt;/span&gt;&lt;span style="color: #2b91af"&gt;Bitmap&lt;/span&gt;(iWidth, iHeight);&lt;p&gt;从一个继承自Image类的对象中创建Graphics对象&lt;/p&gt;&lt;span style="color: #2b91af"&gt;Graphics &lt;/span&gt;g = &lt;span style="color: #2b91af"&gt;Graphics&lt;/span&gt;.FromImage(myImage);&lt;p&gt;复制全屏幕。得到全屏幕了，你想去像素也就简单多了。&lt;/p&gt;g.CopyFromScreen(&lt;span style="color: blue"&gt;new &lt;/span&gt;&lt;span style="color: #2b91af"&gt;Point&lt;/span&gt;(0, 0), &lt;span style="color: blue"&gt;new &lt;/span&gt;&lt;span style="color: #2b91af"&gt;Point&lt;/span&gt;(0, 0), &lt;span style="color: blue"&gt;new &lt;/span&gt;&lt;span style="color: #2b91af"&gt;Size&lt;/span&gt;(iWidth, iHeight));&lt;p&gt;好了，接着我们上面描述继续开发，我们需要的窗体，这里有一个技巧就是，用一个基本完全透明的窗体覆盖住Window剩下的我们好操作。&lt;/p&gt;&lt;span style="color: #2b91af"&gt;GetColors &lt;/span&gt;getColors = &lt;span style="color: blue"&gt;new &lt;/span&gt;&lt;span style="color: #2b91af"&gt;GetColors&lt;/span&gt;();&lt;br/&gt;getColors.Tag = &lt;span style="color: blue"&gt;this&lt;/span&gt;;&lt;br/&gt;getColors.ShowDialog();&lt;p&gt;在这个新窗体中，我们在Load事件中简单的写两句即可。&lt;/p&gt;&lt;span style="color: blue"&gt;this&lt;/span&gt;.MaximizedBounds = &lt;span style="color: #2b91af"&gt;Screen&lt;/span&gt;.PrimaryScreen.Bounds;&lt;br/&gt;&lt;span style="color: blue"&gt;this&lt;/span&gt;.WindowState = &lt;span style="color: #2b91af"&gt;FormWindowState&lt;/span&gt;.Maximized;&lt;br/&gt;&lt;span style="color: blue"&gt;this&lt;/span&gt;.FormBorderStyle = &lt;span style="color: #2b91af"&gt;FormBorderStyle&lt;/span&gt;.None;&lt;br/&gt;&lt;br/&gt;&lt;span style="color: blue"&gt;this&lt;/span&gt;.Opacity = 0.01;最后的这个就是透明度了，哈哈，你可以改成 1 试试&lt;p&gt;窗体单击关闭&lt;/p&gt;&lt;span style="color: blue"&gt;private void &lt;/span&gt;GetColors_Click(&lt;span style="color: blue"&gt;object &lt;/span&gt;sender, &lt;span style="color: #2b91af"&gt;EventArgs &lt;/span&gt;e)&lt;br/&gt;   {&lt;br/&gt;       &lt;span style="color: blue"&gt;this&lt;/span&gt;.Close();&lt;br/&gt;   }&lt;p&gt;当然更多的操作，比如窗体的鼠标，窗体的其他一些美工，都要靠自己了，你也可以，用其他的办法给窗体定位，或者，取指定窗体的颜色。&lt;/p&gt;&lt;span style="color: blue"&gt;private void &lt;/span&gt;GetColors_MouseMove(&lt;span style="color: blue"&gt;object &lt;/span&gt;sender, &lt;span style="color: #2b91af"&gt;MouseEventArgs &lt;/span&gt;e)&lt;br/&gt;{&lt;br/&gt;    &lt;span style="color: #2b91af"&gt;MainForm &lt;/span&gt;Mymainform = (&lt;span style="color: #2b91af"&gt;MainForm&lt;/span&gt;)&lt;span style="color: blue"&gt;this&lt;/span&gt;.Tag;&lt;br/&gt;    &lt;span style="color: blue"&gt;if &lt;/span&gt;(e.X &amp;gt; Mymainform.Left &amp;amp;&amp;amp; e.X &amp;lt; Mymainform.Left + Mymainform.Width &amp;amp;&amp;amp; e.Y &amp;gt; Mymainform.Top &amp;amp;&amp;amp; e.Y &amp;lt; Mymainform.Top + Mymainform.Width)&lt;br/&gt;    {&lt;br/&gt;        Mymainform.Location=Mymainform.Location == Mymainform.formLeft ? Mymainform.formRight:Mymainform.formLeft;&lt;br/&gt;    }&lt;br/&gt;}当然这个方法就是解决咱们前面遇到的取色窗体覆盖的问题啦。哈哈，点不到，点不到.......&lt;p&gt;单击关闭透明窗体&lt;/p&gt;tm.Enabled = &lt;span style="color: blue"&gt;false&lt;/span&gt;;&lt;br/&gt;&lt;span style="color: blue"&gt;this&lt;/span&gt;.Location = formLoad;&lt;br/&gt;&lt;span style="color: blue"&gt;this&lt;/span&gt;.TopMost = &lt;span style="color: blue"&gt;false&lt;/span&gt;;释放资源，得到颜色            picColor.BackColor = bmp.GetPixel(0, 0);&lt;br/&gt;&lt;br/&gt;&lt;br/&gt;            txtARGB.Text = &lt;span style="color: #a31515"&gt;&amp;quot;0x&amp;quot; &lt;/span&gt;+ picColor.BackColor.ToArgb().ToString(&lt;span style="color: #a31515"&gt;&amp;quot;x&amp;quot;&lt;/span&gt;).ToUpper();&lt;br/&gt;            txtRGB.Text = picColor.BackColor.R.ToString().ToLower() + &lt;span style="color: #a31515"&gt;&amp;quot;,&amp;quot; &lt;/span&gt;+ picColor.BackColor.G.ToString().ToLower() + &lt;span style="color: #a31515"&gt;&amp;quot;,&amp;quot; &lt;/span&gt;+ picColor.BackColor.B.ToString().ToLower();&lt;br/&gt;            txtL.Text = &lt;span style="color: #a31515"&gt;&amp;quot;#&amp;quot; &lt;/span&gt;+ picColor.BackColor.R.ToString(&lt;span style="color: #a31515"&gt;&amp;quot;x&amp;quot;&lt;/span&gt;).PadLeft(2, &lt;span style="color: #a31515"&gt;'0'&lt;/span&gt;) + picColor.BackColor.G.ToString(&lt;span style="color: #a31515"&gt;&amp;quot;x&amp;quot;&lt;/span&gt;).PadLeft(2, &lt;span style="color: #a31515"&gt;'0'&lt;/span&gt;) + picColor.BackColor.B.ToString(&lt;span style="color: #a31515"&gt;&amp;quot;x&amp;quot;&lt;/span&gt;).PadLeft(2, &lt;span style="color: #a31515"&gt;'0'&lt;/span&gt;);&lt;br/&gt;&lt;br/&gt;            g.Dispose();&lt;br/&gt;            gimg.Dispose();&lt;br/&gt;&lt;br/&gt;            bmp.Dispose(); &lt;span style="color: green"&gt;&lt;br/&gt;&lt;/span&gt;&lt;p&gt;哈哈，好了，一个取色器做好了。&lt;/p&gt;&lt;p&gt;剩下的大家自己可以扩展了，可以按Ctrl去颜色，也可以取到颜色放到剪贴板中，总之呢，最难解决的就是拿到像素点颜色了，我们都已经拿到了，还有什么难的呢？&lt;/p&gt;&lt;p&gt;代码下载&lt;/p&gt;&lt;p&gt;&lt;a href="http://files.cnblogs.com/hihell/GetColor.rar"&gt;GetColor.rar&lt;/a&gt;&lt;/p&gt;&lt;img src="http://www.cnblogs.com/hihell/aggbug/2178660.html?type=1" width="1" height="1" alt=""/&gt;&lt;p&gt;&lt;a href="http://www.cnblogs.com/hihell/archive/2011/09/16/2178660.html" target="_blank"&gt;本文链接&lt;/a&gt;&lt;/p&gt;</content></entry><entry><id>http://www.cnblogs.com/hihell/archive/2011/09/15/2177569.html</id><title type="text">KingDZ 变菜鸟，每日一个C#小实例之---玩转鼠标</title><summary type="text">今天给大家带来的实例是一个大家一个相对接触比较少的东东，C#控制鼠标。哈哈，这个我想有些童鞋可以自己研究一下，大家可以简单的模仿一个按键精灵出来。 如果更变态的，那么哥们你强大了，这玩意可以开发“科技类软件”，----哇咔咔，WG了，呵呵，不过偶是“好yin”怎么会研究那个呢？ 呵呵，好了不和大家胡诌了，下面开始吧。 控制鼠标可以限制鼠标的移动范围，控制鼠标的位置，控制鼠标的左右键，显示和隐藏鼠标。 控制鼠标用到了我们的系统的API---“什么你不知道系统的API是什么？”问问谷歌大神去吧。 首先我们先得到鼠标的位置，只有抓到这个老鼠，好进行下一步的操作啊。 首先声明一点就是.Ne...</summary><published>2011-09-15T06:57:00Z</published><updated>2011-09-15T06:57:00Z</updated><author><name>KingDZ</name><uri>http://www.cnblogs.com/hihell/</uri></author><link rel="alternate" href="http://www.cnblogs.com/hihell/archive/2011/09/15/2177569.html"/><link rel="alternate" type="text/html" href="http://www.cnblogs.com/hihell/archive/2011/09/15/2177569.html"/><content type="html">&lt;p&gt;今天给大家带来的实例是一个大家一个相对接触比较少的东东，C#控制鼠标。哈哈，这个我想有些童鞋可以自己研究一下，大家可以简单的模仿一个按键精灵出来。&lt;/p&gt;  &lt;p&gt;如果更变态的，那么哥们你强大了，这玩意可以开发“科技类软件”，----哇咔咔，WG了，呵呵，不过偶是“好yin”怎么会研究那个呢？&lt;/p&gt;  &lt;p&gt;呵呵，好了不和大家胡诌了，下面开始吧。&lt;/p&gt;  &lt;p&gt;控制鼠标可以限制鼠标的移动范围，控制鼠标的位置，控制鼠标的左右键，显示和隐藏鼠标。&lt;/p&gt;  &lt;p&gt;控制鼠标用到了我们的系统的API---“什么你不知道系统的API是什么？”问问谷歌大神去吧。&lt;/p&gt;  &lt;p&gt;首先我们先得到鼠标的位置，只有抓到这个老鼠，好进行下一步的操作啊。&lt;/p&gt;  &lt;p&gt;首先声明一点就是.Net并没有提供改变鼠标指针位置、模拟点击操作的函数。&lt;/p&gt;  &lt;p&gt;所以我们只能去找 Windows API 了。&lt;/p&gt;  &lt;p&gt;&lt;a href="http://images.cnblogs.com/cnblogs_com/hihell/201109/2011091514562835.png"&gt;&lt;img style="background-image: none; border-right-width: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px; padding-top: 0px" title="1" border="0" alt="1" src="http://images.cnblogs.com/cnblogs_com/hihell/201109/201109151456306820.png" width="297" height="157" /&gt;&lt;/a&gt;哈哈，效果，这个我们首先需要引用调用API的命名空间&amp;#160; &lt;/p&gt;  &lt;span style="color: blue"&gt;using &lt;/span&gt;System.Runtime.InteropServices;&lt;p&gt;然后我们即可调用&amp;#160; &lt;/p&gt;[&lt;span style="color: #2b91af"&gt;DllImport&lt;/span&gt;(&lt;span style="color: #a31515"&gt;&amp;quot;User32&amp;quot;&lt;/span&gt;)]&lt;p&gt;然后 我们用准备工作做好了，我们可以开始我们下面的道路了，我们首先需要一个timer&amp;#160; 用来无时无刻得到我们的鼠标位置，然后我们需要的当然是一个坐标来展示我们的数据了啊&lt;/p&gt;&lt;span style="color: #2b91af"&gt;Timer &lt;/span&gt;timer;&lt;br/&gt;&lt;span style="color: #2b91af"&gt;Point &lt;/span&gt;p = &lt;span style="color: blue"&gt;new &lt;/span&gt;&lt;span style="color: #2b91af"&gt;Point&lt;/span&gt;(1,1);&lt;p&gt;好了，我们有了上面两个全局的变量，可以开始我们的整体效果楼，哈哈哈。&lt;/p&gt;[&lt;span style="color: #2b91af"&gt;DllImport&lt;/span&gt;(&lt;span style="color: #a31515"&gt;&amp;quot;User32&amp;quot;&lt;/span&gt;)]&lt;br/&gt; &lt;span style="color: blue"&gt;public extern static bool &lt;/span&gt;GetCursorPos(&lt;span style="color: blue"&gt;ref &lt;/span&gt;&lt;span style="color: #2b91af"&gt;Point &lt;/span&gt;cPoint);&lt;p&gt;记住一定要用到&amp;#160; ref 否则会出问题的。接下来的就好办多了&lt;/p&gt;&lt;span style="color: blue"&gt;private void &lt;/span&gt;Form1_Load(&lt;span style="color: blue"&gt;object &lt;/span&gt;sender, &lt;span style="color: #2b91af"&gt;EventArgs &lt;/span&gt;e)&lt;br/&gt;  {&lt;br/&gt;      timer = &lt;span style="color: blue"&gt;new &lt;/span&gt;&lt;span style="color: #2b91af"&gt;Timer&lt;/span&gt;();&lt;br/&gt;      timer.Interval = 1;&lt;br/&gt;      timer.Tick += &lt;span style="color: blue"&gt;new &lt;/span&gt;&lt;span style="color: #2b91af"&gt;EventHandler&lt;/span&gt;(timer_Tick);&lt;br/&gt;      timer.Enabled=&lt;span style="color: blue"&gt;true&lt;/span&gt;;&lt;br/&gt;  }&lt;br/&gt;&lt;br/&gt;  &lt;span style="color: blue"&gt;void &lt;/span&gt;timer_Tick(&lt;span style="color: blue"&gt;object &lt;/span&gt;sender, &lt;span style="color: #2b91af"&gt;EventArgs &lt;/span&gt;e)&lt;br/&gt;  {&lt;br/&gt;      GetCursorPos(ref p);&lt;br/&gt;      lblX.Text = p.X.ToString();&lt;br/&gt;      lblY.Text = p.Y.ToString();&lt;br/&gt;  }&lt;p&gt;OK，完成了，大家是一下吧，，上面的那个GetCursorPos其实就是我们需要获取鼠标坐标的函数。&lt;/p&gt;&lt;p&gt;好了，下面我们来实现限定鼠标移动的范围。&lt;/p&gt;&lt;p&gt;限制移动鼠标需要ClipCursor和GetWindowRect来实现&lt;/p&gt;&lt;p&gt;首先我们先想办法限制鼠标的移动，将鼠标限制在摸一个窗体里面&lt;/p&gt;&lt;p&gt;&lt;a href="http://images.cnblogs.com/cnblogs_com/hihell/201109/201109151456315033.png"&gt;&lt;img style="background-image: none; border-right-width: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px; padding-top: 0px" title="·" border="0" alt="·" src="http://images.cnblogs.com/cnblogs_com/hihell/201109/201109151456344184.png" width="280" height="112" /&gt;&lt;/a&gt;&lt;/p&gt;[&lt;span style="color: #2b91af"&gt;DllImport&lt;/span&gt;(&lt;span style="color: #a31515"&gt;&amp;quot;User32&amp;quot;&lt;/span&gt;)]&lt;br/&gt;&lt;span style="color: blue"&gt;public extern static int &lt;/span&gt;ClipCursor(&lt;span style="color: blue"&gt;ref &lt;/span&gt;&lt;span style="color: #2b91af"&gt;Rect &lt;/span&gt;r);&lt;br/&gt;[&lt;span style="color: #2b91af"&gt;DllImport&lt;/span&gt;(&lt;span style="color: #a31515"&gt;&amp;quot;User32&amp;quot;&lt;/span&gt;)]&lt;br/&gt;&lt;span style="color: blue"&gt;public extern static int &lt;/span&gt;GetWindowRect(&lt;span style="color: blue"&gt;int &lt;/span&gt;h, &lt;span style="color: blue"&gt;ref &lt;/span&gt;&lt;span style="color: #2b91af"&gt;Rect &lt;/span&gt;r);&lt;p&gt;好了，这两个函数都得到了。下面我们继续 上面那个 Rect&lt;/p&gt;&lt;p&gt;是一个结构类型，我将 Rect声明成&lt;/p&gt;&lt;span style="color: blue"&gt;public struct &lt;/span&gt;&lt;span style="color: #2b91af"&gt;Rect&lt;br/&gt;&lt;/span&gt;{&lt;br/&gt;    &lt;span style="color: blue"&gt;public int &lt;/span&gt;Left;&lt;br/&gt;    &lt;span style="color: blue"&gt;public int &lt;/span&gt;Top;&lt;br/&gt;    &lt;span style="color: blue"&gt;public int &lt;/span&gt;Right;&lt;br/&gt;    &lt;span style="color: blue"&gt;public int &lt;/span&gt;Bottom;&lt;br/&gt;}&lt;p&gt;然后为的就是方便操作，你也可以根据自己的办法想象开来。当然后面也是为了都得到窗体句柄做准备。&lt;/p&gt;&lt;span style="color: blue"&gt;public void &lt;/span&gt;Lock(&lt;span style="color: #2b91af"&gt;Form &lt;/span&gt;objectForm)&lt;br/&gt;{&lt;br/&gt;    &lt;span style="color: #2b91af"&gt;Rect &lt;/span&gt;formRect = &lt;span style="color: blue"&gt;new &lt;/span&gt;&lt;span style="color: #2b91af"&gt;Rect&lt;/span&gt;();&lt;br/&gt;    GetWindowRect(objectForm.Handle.ToInt32(), &lt;span style="color: blue"&gt;ref &lt;/span&gt;formRect);&lt;br/&gt;    ClipCursor(&lt;span style="color: blue"&gt;ref &lt;/span&gt;formRect);&lt;br/&gt;}&lt;p&gt;objectForm.Handle.ToInt32(),得到句柄。关于句柄的具体用途，我在这里就不深入的解说了，可能我们以后的实例中会碰到，我们到时见在慢慢的解说。&lt;/p&gt;Lock(&lt;span style="color: blue"&gt;this&lt;/span&gt;);&lt;p&gt;好了，完成，当然恢复鼠标的移动范围想简单的多了，只需要回复坐标即可。&lt;/p&gt;&lt;span style="color: blue"&gt;private void &lt;/span&gt;btnUnlock_Click(&lt;span style="color: blue"&gt;object &lt;/span&gt;sender, &lt;span style="color: #2b91af"&gt;EventArgs &lt;/span&gt;e)&lt;br/&gt;{&lt;br/&gt;    &lt;span style="color: #2b91af"&gt;Rect &lt;/span&gt;ur = &lt;span style="color: blue"&gt;new &lt;/span&gt;&lt;span style="color: #2b91af"&gt;Rect&lt;/span&gt;();&lt;br/&gt;    ur.Left = 0;&lt;br/&gt;    ur.Top = 0;&lt;br/&gt;    ur.Bottom = &lt;span style="color: #2b91af"&gt;Screen&lt;/span&gt;.PrimaryScreen.WorkingArea.Bottom;&lt;br/&gt;    ur.Right = &lt;span style="color: #2b91af"&gt;Screen&lt;/span&gt;.PrimaryScreen.WorkingArea.Right;&lt;br/&gt;    ClipCursor(&lt;span style="color: blue"&gt;ref &lt;/span&gt;ur);&lt;br/&gt;}&lt;p&gt;我们继续吧，下面我们做的是设置鼠标的位置，用按钮来控制鼠标显示的位置。&lt;/p&gt;&lt;p&gt;&lt;a href="http://images.cnblogs.com/cnblogs_com/hihell/201109/201109151456368909.png"&gt;&lt;img style="background-image: none; border-right-width: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px; padding-top: 0px" title="1" border="0" alt="1" src="http://images.cnblogs.com/cnblogs_com/hihell/201109/201109151456398093.png" width="264" height="157" /&gt;&lt;/a&gt;&lt;/p&gt;&lt;p&gt;毫无疑问，我们还是找到如何定位鼠标的函数&lt;/p&gt;[&lt;span style="color: #2b91af"&gt;DllImport&lt;/span&gt;(&lt;span style="color: #a31515"&gt;&amp;quot;User32&amp;quot;&lt;/span&gt;)]&lt;br/&gt;&lt;span style="color: blue"&gt;public extern static void &lt;/span&gt;SetCursorPos(&lt;span style="color: blue"&gt;int &lt;/span&gt;x,&lt;span style="color: blue"&gt;int &lt;/span&gt;y);&lt;br/&gt;&lt;br/&gt;剩下的就简单多了&lt;span style="color: blue"&gt;private void &lt;/span&gt;btnMove_Click(&lt;span style="color: blue"&gt;object &lt;/span&gt;sender, &lt;span style="color: #2b91af"&gt;EventArgs &lt;/span&gt;e)&lt;br/&gt;{&lt;br/&gt;    SetCursorPos(&lt;span style="color: #2b91af"&gt;Convert&lt;/span&gt;.ToInt32(txtX.Text), &lt;span style="color: #2b91af"&gt;Convert&lt;/span&gt;.ToInt32(txtY.Text));&lt;br/&gt;}&lt;p&gt;下面我来操作鼠标的左键和右键，显示与隐藏鼠标和设置双击鼠标的时间间隔等&lt;/p&gt;&lt;p&gt;通常使用API函数SwapMouseButton、ShowCursor、SetDoubleClickTime和GetDoubleClickTime对鼠标进行设置。&lt;/p&gt;&lt;p&gt;我们下面就是先鼠标单击选中事件，哈哈，看讲解。我们需要一个关于鼠标的所有枚举。&lt;/p&gt;[&lt;span style="color: #2b91af"&gt;Flags&lt;/span&gt;]&lt;br/&gt;&lt;span style="color: blue"&gt;enum &lt;/span&gt;&lt;span style="color: #2b91af"&gt;MouseEventFlag &lt;/span&gt;: &lt;span style="color: blue"&gt;uint&lt;br/&gt;&lt;/span&gt;{&lt;br/&gt;    Move = 0x0001,&lt;br/&gt;    LeftDown = 0x0002,&lt;br/&gt;    LeftUp = 0x0004,&lt;br/&gt;    RightDown = 0x0008,&lt;br/&gt;    RightUp = 0x0010,&lt;br/&gt;    MiddleDown = 0x0020,&lt;br/&gt;    MiddleUp = 0x040,&lt;br/&gt;    XDown = 0x0080,&lt;br/&gt;    XUp = 0x0100,&lt;br/&gt;    Wheel = 0x0800,&lt;br/&gt;    VirtualDesk = 0x4000,&lt;br/&gt;    Absolute = 0x8000&lt;br/&gt;}&lt;p&gt;这个每个枚举值是什么意思，大家自己看一下即可。&lt;/p&gt;&lt;p&gt;const int Move = 0x0001; 移动鼠标   &lt;br /&gt;const int LeftDown = 0x0002; 模拟鼠标左键按下   &lt;br /&gt;const int LeftUp = 0x0004; 模拟鼠标左键抬起   &lt;br /&gt;const int RightDown = 0x0008; 模拟鼠标右键按下   &lt;br /&gt;const int RightUp = 0x0010; 模拟鼠标右键抬起   &lt;br /&gt;const int MiddleDown = 0x0020; 模拟鼠标中键按下   &lt;br /&gt;const int MiddleUp = 0x0040; 模拟鼠标中键抬起   &lt;br /&gt;const int Absolute = 0x8000; 标示是否采用绝对坐标&lt;/p&gt;[&lt;span style="color: #2b91af"&gt;DllImport&lt;/span&gt;(&lt;span style="color: #a31515"&gt;&amp;quot;user32.dll&amp;quot;&lt;/span&gt;)]&lt;br/&gt;&lt;span style="color: blue"&gt;public static extern void &lt;/span&gt;mouse_event(&lt;span style="color: #2b91af"&gt;MouseEventFlag &lt;/span&gt;flags, &lt;span style="color: blue"&gt;int &lt;/span&gt;dx, &lt;span style="color: blue"&gt;int &lt;/span&gt;dy, &lt;span style="color: blue"&gt;uint &lt;/span&gt;data, &lt;span style="color: #2b91af"&gt;UIntPtr &lt;/span&gt;extraInfo);&lt;br/&gt;&lt;br/&gt;&lt;span style="color: blue"&gt;private void &lt;/span&gt;btnO_Click(&lt;span style="color: blue"&gt;object &lt;/span&gt;sender, &lt;span style="color: #2b91af"&gt;EventArgs &lt;/span&gt;e)&lt;br/&gt;{&lt;br/&gt;    SetCursorPos(&lt;span style="color: #2b91af"&gt;Convert&lt;/span&gt;.ToInt32(txtX.Text), &lt;span style="color: #2b91af"&gt;Convert&lt;/span&gt;.ToInt32(txtY.Text));&lt;br/&gt;    mouse_event(&lt;span style="color: #2b91af"&gt;MouseEventFlag&lt;/span&gt;.LeftDown, 0, 0, 0, &lt;span style="color: #2b91af"&gt;UIntPtr&lt;/span&gt;.Zero);&lt;br/&gt;    mouse_event(&lt;span style="color: #2b91af"&gt;MouseEventFlag&lt;/span&gt;.LeftDown, 0, 0, 0, &lt;span style="color: #2b91af"&gt;UIntPtr&lt;/span&gt;.Zero);&lt;br/&gt;}&lt;p&gt;好了，大家简单的理解一下吧，这里本想给大家解释一下的，后来其实看了也没什么，大家可以去MSDN查找相关资料&lt;/p&gt;&lt;p&gt;&lt;a title="http://msdn.microsoft.com/en-us/library/ms646260%28v=VS.85%29.aspx" href="http://msdn.microsoft.com/en-us/library/ms646260%28v=VS.85%29.aspx"&gt;http://msdn.microsoft.com/en-us/library/ms646260%28v=VS.85%29.aspx&lt;/a&gt;&lt;/p&gt;&lt;p&gt;&lt;a title="http://msdn.microsoft.com/en-us/library/ms646260(v=VS.85).aspx" href="http://msdn.microsoft.com/en-us/library/ms646260(v=VS.85).aspx"&gt;http://msdn.microsoft.com/en-us/library/ms646260(v=VS.85).aspx&lt;/a&gt;&lt;/p&gt;这两个链接有他们的说明 &lt;p&gt;当然，为了简单起见上面的代码你可以写成&lt;/p&gt;mouse_event(&lt;span style="color: #2b91af"&gt;MouseEventFlag&lt;/span&gt;.LeftDown, 0, 0, 0, 0);&lt;br/&gt;&lt;br/&gt;其他的代码俺就不解释了&lt;p&gt;两次连续的鼠标左键单击事件 构成一次鼠标双击事件：   &lt;br /&gt;&lt;/p&gt;mouse_event(&lt;span style="color: #2b91af"&gt;MouseEventFlag&lt;/span&gt;.LeftDown | &lt;span style="color: #2b91af"&gt;MouseEventFlag&lt;/span&gt;.LeftUp, 0, 0, 0, &lt;span style="color: #2b91af"&gt;UIntPtr&lt;/span&gt;.Zero);&lt;br/&gt;mouse_event(&lt;span style="color: #2b91af"&gt;MouseEventFlag&lt;/span&gt;.LeftDown | &lt;span style="color: #2b91af"&gt;MouseEventFlag&lt;/span&gt;.LeftUp, 0, 0, 0, &lt;span style="color: #2b91af"&gt;UIntPtr&lt;/span&gt;.Zero);&lt;p&gt;好了下面我们再说几个，鼠标的操作，俺就说完了。&lt;/p&gt;[&lt;span style="color: #2b91af"&gt;DllImport&lt;/span&gt;(&lt;span style="color: #a31515"&gt;&amp;quot;User32&amp;quot;&lt;/span&gt;)]&lt;br/&gt; &lt;span style="color: blue"&gt;public static extern int &lt;/span&gt;ShowCursor(&lt;span style="color: blue"&gt;bool &lt;/span&gt;bshow);&lt;br/&gt;&lt;br/&gt; &lt;span style="color: blue"&gt;private void &lt;/span&gt;btnHide_Click(&lt;span style="color: blue"&gt;object &lt;/span&gt;sender, &lt;span style="color: #2b91af"&gt;EventArgs &lt;/span&gt;e)&lt;br/&gt; {&lt;br/&gt;     ShowCursor(&lt;span style="color: blue"&gt;false&lt;/span&gt;);&lt;br/&gt; }&lt;br/&gt;&lt;br/&gt; &lt;span style="color: blue"&gt;private void &lt;/span&gt;btnShow_Click(&lt;span style="color: blue"&gt;object &lt;/span&gt;sender, &lt;span style="color: #2b91af"&gt;EventArgs &lt;/span&gt;e)&lt;br/&gt; {&lt;br/&gt;     ShowCursor(&lt;span style="color: blue"&gt;true&lt;/span&gt;);&lt;br/&gt; }哈哈，其他的就不试了，大家自己尝试一下吧。如果发现问题，欢迎致电 KingDZ，谢谢大家&lt;br/&gt;&lt;a href="http://files.cnblogs.com/hihell/GetPoint.rar"&gt;代码下载链接&lt;/a&gt;&lt;img src="http://www.cnblogs.com/hihell/aggbug/2177569.html?type=1" width="1" height="1" alt=""/&gt;&lt;p&gt;&lt;a href="http://www.cnblogs.com/hihell/archive/2011/09/15/2177569.html" target="_blank"&gt;本文链接&lt;/a&gt;&lt;/p&gt;</content></entry><entry><id>http://www.cnblogs.com/hihell/archive/2011/09/14/2176461.html</id><title type="text">KingDZ 变菜鸟，每日一个C#小实例之---旋转的图片</title><summary type="text">上一个例子我们实现的是百叶窗的效果，这节课的例子我们实现的是旋转的图片效果，哈哈，这节课离不开GDI的操作，各位小菜菜们，我们一起来写我们的代码吧。 下面是效果图，为了实现我们下面的效果，我们必须要知道几个技术点。 TranslateTransform的使用，我们首先把这张图片的圆心移动到中心位置，也就是说我们要转移中心点 Bitmap bmp; Bitmap background; Graphics g; private void pictureBox1_Click(object sender, EventArgs e) { bmp ...</summary><published>2011-09-14T09:40:00Z</published><updated>2011-09-14T09:40:00Z</updated><author><name>KingDZ</name><uri>http://www.cnblogs.com/hihell/</uri></author><link rel="alternate" href="http://www.cnblogs.com/hihell/archive/2011/09/14/2176461.html"/><link rel="alternate" type="text/html" href="http://www.cnblogs.com/hihell/archive/2011/09/14/2176461.html"/><content type="html">&lt;p&gt;上一个例子我们实现的是百叶窗的效果，这节课的例子我们实现的是旋转的图片效果，哈哈，这节课离不开GDI的操作，各位小菜菜们，我们一起来写我们的代码吧。&lt;/p&gt;  &lt;p&gt;下面是效果图，为了实现我们下面的效果，我们必须要知道几个技术点。&lt;/p&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;p&gt;&lt;a href="http://images.cnblogs.com/cnblogs_com/hihell/201109/201109141733064611.png"&gt;&lt;img style="background-image: none; border-right-width: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px; padding-top: 0px" title="1" border="0" alt="1" src="http://images.cnblogs.com/cnblogs_com/hihell/201109/201109141733095747.png" width="246" height="226" /&gt;&lt;/a&gt;&lt;/p&gt;  TranslateTransform&lt;p&gt;的使用，我们首先把这张图片的圆心移动到中心位置，也就是说我们要转移中心点&lt;/p&gt;&lt;span style="color: #2b91af"&gt;    Bitmap &lt;/span&gt;bmp;&lt;br/&gt;    &lt;span style="color: #2b91af"&gt;Bitmap &lt;/span&gt;background;&lt;br/&gt;    &lt;span style="color: #2b91af"&gt;Graphics &lt;/span&gt;g;&lt;br/&gt;    &lt;span style="color: blue"&gt;private void &lt;/span&gt;pictureBox1_Click(&lt;span style="color: blue"&gt;object &lt;/span&gt;sender, &lt;span style="color: #2b91af"&gt;EventArgs &lt;/span&gt;e)&lt;br/&gt;    {&lt;br/&gt;        bmp = (&lt;span style="color: #2b91af"&gt;Bitmap&lt;/span&gt;)pictureBox1.Image.Clone();   &lt;span style="color: green"&gt;//复制到图像&lt;br/&gt;         &lt;/span&gt;background = &lt;span style="color: blue"&gt;new &lt;/span&gt;&lt;span style="color: #2b91af"&gt;Bitmap&lt;/span&gt;(pictureBox1.Width, pictureBox1.Height, System.Drawing.Imaging.PixelFormat.Format48bppRgb);&lt;br/&gt;&lt;br/&gt;        g = &lt;span style="color: #2b91af"&gt;Graphics&lt;/span&gt;.FromImage(background);&lt;br/&gt;        g.TranslateTransform(background.Width / 2, background.Height / 2);&lt;br/&gt;&lt;br/&gt;    }&lt;p&gt;注意到上面的复制图像的办法，我们以前已经看到过了，下面说的是&amp;#160; System.Drawing.Imaging.PixelFormat.Format48bppRgb&lt;/p&gt;&lt;p&gt;PixelFormat&amp;#160; 是一个枚举&amp;#160;&amp;#160;&amp;#160; 指定图像中每个像素的颜色数据的格式。&lt;/p&gt;&lt;p&gt;&lt;font style="background-color: #ffff00"&gt;Indexed&lt;/font&gt;   &lt;br /&gt;该像素数据包含颜色索引值，这意味着这些值是系统颜色表中颜色的索引，而不是单个颜色值。&lt;/p&gt;&lt;p&gt;&lt;font style="background-color: #ffff00"&gt;Gdi&lt;/font&gt;   &lt;br /&gt;像素数据包含 GDI 颜色。&lt;/p&gt;&lt;p&gt;&lt;font style="background-color: #ffff00"&gt;Alpha&lt;/font&gt;   &lt;br /&gt;像素数据包含没有进行过自左乘的 alpha 值。&lt;/p&gt;&lt;p&gt;&lt;font style="background-color: #ffff00"&gt;PAlpha&lt;/font&gt;   &lt;br /&gt;像素格式包含自左乘的 alpha 值。&lt;/p&gt;&lt;p&gt;&lt;font style="background-color: #ffff00"&gt;Extended&lt;/font&gt;   &lt;br /&gt;保留。&lt;/p&gt;&lt;p&gt;&lt;font style="background-color: #ffff00"&gt;Canonical&lt;/font&gt;   &lt;br /&gt;默认像素格式，每像素 32 位。 此格式指定 24 位颜色深度和一个 8 位 alpha 通道。&lt;/p&gt;&lt;p&gt;&lt;font style="background-color: #ffff00"&gt;Undefined&lt;/font&gt;   &lt;br /&gt;未定义像素格式。&lt;/p&gt;&lt;p&gt;&lt;font style="background-color: #ffff00"&gt;DontCare&lt;/font&gt;   &lt;br /&gt;没有指定像素格式。&lt;/p&gt;&lt;p&gt;&lt;font style="background-color: #ffff00"&gt;Format1bppIndexed&lt;/font&gt;   &lt;br /&gt;指定像素格式为每像素 1 位，并指定它使用索引颜色。 因此颜色表中有两种颜色。&lt;/p&gt;&lt;p&gt;&lt;font style="background-color: #ffff00"&gt;Format4bppIndexed&lt;/font&gt;   &lt;br /&gt;指定格式为每像素 4 位而且已创建索引。&lt;/p&gt;&lt;p&gt;&lt;font style="background-color: #ffff00"&gt;Format8bppIndexed&lt;/font&gt;   &lt;br /&gt;指定格式为每像素 8 位而且已创建索引。 因此颜色表中有 256 种颜色。&lt;/p&gt;&lt;p&gt;&lt;font style="background-color: #ffff00"&gt;Format16bppGrayScale&lt;/font&gt;   &lt;br /&gt;像素格式为每像素 16 位。 该颜色信息指定 65536 种灰色调。&lt;/p&gt;&lt;p&gt;&lt;font style="background-color: #ffff00"&gt;Format16bppRgb555&lt;/font&gt;   &lt;br /&gt;指定格式为每像素 16 位；红色、绿色和蓝色分量各使用 5 位。 剩余的 1 位未使用。&lt;/p&gt;&lt;p&gt;&lt;font style="background-color: #ffff00"&gt;Format16bppRgb565&lt;/font&gt;   &lt;br /&gt;指定格式为每像素 16 位；红色分量使用 5 位，绿色分量使用 6 位，蓝色分量使用 5 位。&lt;/p&gt;&lt;p&gt;&lt;font style="background-color: #ffff00"&gt;Format16bppArgb1555&lt;/font&gt;   &lt;br /&gt;像素格式为每像素 16 位。 该颜色信息指定 32,768 种色调，其中 5 位为红色，5 位为绿色，5 位为蓝色，1 位为 alpha。&lt;/p&gt;&lt;p&gt;&lt;font style="background-color: #ffff00"&gt;Format24bppRgb&lt;/font&gt;   &lt;br /&gt;指定格式为每像素 24 位；红色、绿色和蓝色分量各使用 8 位。&lt;/p&gt;&lt;p&gt;&lt;font style="background-color: #ffff00"&gt;Format32bppRgb&lt;/font&gt;   &lt;br /&gt;指定格式为每像素 32 位；红色、绿色和蓝色分量各使用 8 位。 剩余的 8 位未使用。&lt;/p&gt;&lt;p&gt;&lt;font style="background-color: #ffff00"&gt;Format32bppArgb&lt;/font&gt;   &lt;br /&gt;指定格式为每像素 32 位；alpha、红色、绿色和蓝色分量各使用 8 位。&lt;/p&gt;&lt;p&gt;&lt;font style="background-color: #ffff00"&gt;Format32bppPArgb&lt;/font&gt;   &lt;br /&gt;指定格式为每像素 32 位；alpha、红色、绿色和蓝色分量各使用 8 位。 根据 alpha 分量，对红色、绿色和蓝色分量进行自左乘。&lt;/p&gt;&lt;p&gt;&lt;font style="background-color: #ffff00"&gt;Format48bppRgb&lt;/font&gt;   &lt;br /&gt;指定格式为每像素 48 位；红色、绿色和蓝色分量各使用 16 位。&lt;/p&gt;&lt;p&gt;&lt;font style="background-color: #ffff00"&gt;Format64bppArgb&lt;/font&gt;   &lt;br /&gt;指定格式为每像素 64 位；alpha、红色、绿色和蓝色分量各使用 16 位。&lt;/p&gt;&lt;p&gt;&lt;font style="background-color: #ffff00"&gt;Format64bppPArgb&lt;/font&gt;   &lt;br /&gt;指定格式为每像素 64 位；alpha、红色、绿色和蓝色分量各使用 16 位。 根据 alpha 分量，对红色、绿色和蓝色分量进行自左乘。&lt;/p&gt;&lt;p&gt;&lt;font style="background-color: #ffff00"&gt;Max&lt;/font&gt;   &lt;br /&gt;此枚举的最大值。&lt;/p&gt;&lt;p&gt;我们采用&lt;/p&gt;Format24bppRgb即可。 &lt;p&gt;好了，第一步贮备完成了，已经将背景画好了，而且经坐标的原点转移到图片中心位置。下面我们开始自定义自己的&amp;#160; 事件&lt;/p&gt;&lt;p&gt;当然最简单的就是用到了，timer控件 ，这里我自己声明一个全局的&amp;#160; &lt;/p&gt;&lt;span style="color: #2b91af"&gt;Timer &lt;/span&gt;tm;tm = &lt;span style="color: blue"&gt;new &lt;/span&gt;&lt;span style="color: #2b91af"&gt;Timer&lt;/span&gt;();&lt;br/&gt;&lt;br/&gt;       &lt;p&gt;然后 &lt;/p&gt;&lt;p&gt;tm.Interval = 100;&lt;/p&gt;&lt;p&gt;tm.Tick += &lt;span style="color: blue"&gt;new &lt;/span&gt;EventHandler(tm_Tick);&lt;/p&gt;&lt;p&gt;tm.Enabled = &lt;span style="color: blue"&gt;true&lt;/span&gt;;&lt;/p&gt;&lt;span style="color: blue"&gt;void &lt;/span&gt;tm_Tick(&lt;span style="color: blue"&gt;object &lt;/span&gt;sender, &lt;span style="color: #2b91af"&gt;EventArgs &lt;/span&gt;e)&lt;br/&gt;{&lt;br/&gt;    g.Clear(Color.White);&lt;br/&gt;    g.RotateTransform(10.0f);&lt;br/&gt;    g.DrawImage(bmp, -bmp.Width / 2, -bmp.Height / 2);&lt;br/&gt;&lt;br/&gt;    &lt;span style="color: #2b91af"&gt;Graphics &lt;/span&gt;gn = pictureBox1.CreateGraphics();&lt;br/&gt;    gn.DrawImage(background, 0, 0);&lt;br/&gt;&lt;br/&gt;}&lt;br/&gt;&lt;font face="微软雅黑"&gt;首先是清空PictureBox里面所有东东，为下面重新绘制做准备。&lt;/font&gt;g.RotateTransform(10.0f);每一次Time——Tick事件，将图片旋转10度。 g.DrawImage(bmp, -bmp.Width / 2, -bmp.Height / 2);&lt;span style="color: #2b91af"&gt;Graphics &lt;/span&gt;gn = pictureBox1.CreateGraphics();&lt;br/&gt;gn.DrawImage(background, 0, 0);&lt;p&gt;将图片与背景一起完成。&lt;/p&gt;&lt;p&gt;好了下面我们实现的是，按指定角度旋转图片。这个需要一个文本框，用来输入旋转角度。&lt;/p&gt;&lt;p&gt;&lt;a href="http://images.cnblogs.com/cnblogs_com/hihell/201109/201109141733168459.png"&gt;&lt;img style="background-image: none; border-bottom: 0px; border-left: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top: 0px; border-right: 0px; padding-top: 0px" title="2" border="0" alt="2" src="http://images.cnblogs.com/cnblogs_com/hihell/201109/201109141733208888.png" width="310" height="279" /&gt;&lt;/a&gt;&lt;/p&gt;&lt;p&gt;首先，将整个窗体都变成一张画布。&lt;/p&gt;g = &lt;span style="color: blue"&gt;this&lt;/span&gt;.CreateGraphics();&lt;br/&gt;g.Clear(Color.White);&lt;p&gt;然后我们得到 图片&lt;/p&gt;&lt;p&gt;&amp;#160;&lt;/p&gt;&lt;span style="color: #2b91af"&gt;Image &lt;/span&gt;img = pictureBox1.Image;&lt;p&gt;&amp;#160;&lt;/p&gt;&lt;p&gt;得到活动窗体的 长和宽 &lt;/p&gt;PointF center = &lt;span style="color: blue"&gt;new &lt;/span&gt;PointF(&lt;span style="color: blue"&gt;this&lt;/span&gt;.Size.Width / 2, Size.Height / 2);&lt;p&gt;然后画一个矩形&amp;#160; 得到这个矩形的中心点坐标&lt;/p&gt;RectangleF re = &lt;span style="color: blue"&gt;new &lt;/span&gt;RectangleF(center.X, center.Y, img.Width, img.Height);&lt;br/&gt;&lt;br/&gt;PointF pCenter = &lt;span style="color: blue"&gt;new &lt;/span&gt;PointF(re.X + re.Width / 2, re.Y + re.Height / 2);&lt;span style="color: green"&gt;//移动到矩形中心点坐标&lt;br/&gt;&lt;/span&gt;g.TranslateTransform(pCenter.X, pCenter.Y);&lt;br/&gt;&lt;span style="color: green"&gt;//旋转指定的角度&lt;br/&gt;&lt;/span&gt;g.RotateTransform(&lt;span style="color: #2b91af"&gt;Convert&lt;/span&gt;.ToInt32(txtRotate.Text));&lt;br/&gt;&lt;span style="color: green"&gt;//准备画图  旋转之后，坐标变负&lt;br/&gt;&lt;/span&gt;g.TranslateTransform(-pCenter.X, -pCenter.Y);&lt;br/&gt;&lt;span style="color: green"&gt;//在矩形中绘制图形&lt;br/&gt;&lt;/span&gt;g.DrawImage(img, re);&lt;br/&gt;&lt;span style="color: green"&gt;//重置坐标原点&lt;br/&gt;&lt;/span&gt;g.ResetTransform();&lt;p&gt;&amp;#160;&lt;/p&gt;&lt;p&gt;好了，这节课程的小例子结束了。欢迎大家拍砖&lt;/p&gt;&lt;p&gt;&amp;#160;&lt;/p&gt;&lt;p&gt;哈哈哈。&lt;/p&gt;&lt;p&gt;&lt;a href="http://files.cnblogs.com/hihell/RotatePic.rar"&gt;RotatePic.rar&lt;/a&gt;&lt;/p&gt;&lt;img src="http://www.cnblogs.com/hihell/aggbug/2176461.html?type=1" width="1" height="1" alt=""/&gt;&lt;p&gt;&lt;a href="http://www.cnblogs.com/hihell/archive/2011/09/14/2176461.html" target="_blank"&gt;本文链接&lt;/a&gt;&lt;/p&gt;</content></entry><entry><id>http://www.cnblogs.com/hihell/archive/2011/09/14/2176167.html</id><title type="text">KingDZ 变菜鸟，每日一个C#小实例之---百叶窗图片展示</title><summary type="text">这回给大家做的一个效果图如下： 看到了吗？哈哈，我们C# 也可以做出来很好的效果哦，我们下面开始吧。 首先大家要熟悉 Bitmap 的用法，因为我们这次就是用到了这种位图。。还有可能需要大家了解一些GDI的绘图操作，以方便我们这节课程的应用。首先我们先直接给 PictrueBox 指定一张图片。 好了，下面的一个技巧就是 直接将 PictrueBox 里面的图片复制到 Bitmap 里面去 这么着我们就可以很简单的去操作这张图片了。 background = (Bitmap)pic.Image.Clone(); //克隆图片到 Bitmap 中去...</summary><published>2011-09-14T06:34:00Z</published><updated>2011-09-14T06:34:00Z</updated><author><name>KingDZ</name><uri>http://www.cnblogs.com/hihell/</uri></author><link rel="alternate" href="http://www.cnblogs.com/hihell/archive/2011/09/14/2176167.html"/><link rel="alternate" type="text/html" href="http://www.cnblogs.com/hihell/archive/2011/09/14/2176167.html"/><content type="html">&lt;p&gt;这回给大家做的一个效果图如下：&lt;/p&gt;  &lt;p&gt;&lt;a href="http://images.cnblogs.com/cnblogs_com/hihell/201109/201109141432416401.png"&gt;&lt;img style="background-image: none; border-bottom: 0px; border-left: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top: 0px; border-right: 0px; padding-top: 0px" title="1" border="0" alt="1" src="http://images.cnblogs.com/cnblogs_com/hihell/201109/20110914143258135.png" width="203" height="293" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;看到了吗？哈哈，我们C# 也可以做出来很好的效果哦，我们下面开始吧。&lt;/p&gt;  &lt;p&gt;首先大家要熟悉 Bitmap&amp;#160; 的用法，因为我们这次就是用到了这种位图。。还有可能需要大家了解一些GDI的绘图操作，以方便我们这节课程的应用。首先我们先直接给 PictrueBox 指定一张图片。&lt;/p&gt;  &lt;p&gt;&lt;a href="http://images.cnblogs.com/cnblogs_com/hihell/201109/201109141433136737.png"&gt;&lt;img style="background-image: none; border-bottom: 0px; border-left: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top: 0px; border-right: 0px; padding-top: 0px" title="·" border="0" alt="·" src="http://images.cnblogs.com/cnblogs_com/hihell/201109/201109141433211117.png" width="198" height="272" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;好了，下面的一个技巧就是 直接将&amp;#160; PictrueBox&amp;#160; 里面的图片复制到 Bitmap 里面去 这么着我们就可以很简单的去操作这张图片了。&lt;/p&gt;              background = (&lt;span style="color: #2b91af"&gt;Bitmap&lt;/span&gt;)pic.Image.Clone();  &lt;span style="color: green"&gt;//克隆图片到 Bitmap 中去。&lt;br/&gt;&lt;br/&gt;&lt;/span&gt;&lt;p&gt;好了，下面我们将这张图片的像素拆开。&lt;/p&gt;&lt;span style="color: blue"&gt;int &lt;/span&gt;dw = background.Width / 10;            &lt;span style="color: green"&gt;//按照每个图片30个像素分解图片&lt;br/&gt;&lt;/span&gt;&lt;span style="color: blue"&gt;int &lt;/span&gt;dh = background.Height;             &lt;span style="color: green"&gt;//图片的高度&lt;br/&gt;&lt;/span&gt;&lt;span style="color: #2b91af"&gt;Graphics &lt;/span&gt;g = pic.CreateGraphics();      &lt;span style="color: green"&gt;//创建一个 Graphics&lt;br/&gt;&lt;/span&gt;Point[] myPoint = &lt;span style="color: blue"&gt;new &lt;/span&gt;Point[10];        &lt;span style="color: green"&gt;//得到一个坐标数组&lt;br/&gt;&lt;/span&gt;&lt;span style="color: blue"&gt;for &lt;/span&gt;(&lt;span style="color: blue"&gt;int &lt;/span&gt;x = 0; x &amp;lt; 10; x++)             &lt;br/&gt;{&lt;br/&gt;    myPoint[x].Y = 0;&lt;br/&gt;    myPoint[x].X = x * dw;&lt;br/&gt;}好了，我已经稍微写了一些注释，其实，简单的理解一下，就是说我们将这张图片&amp;#160; 给分解开了，为下面的重绘做准备。&lt;p&gt;百叶窗，顾名思义，就是一张图片分成几部分，然后依次展示即可。&lt;/p&gt;&lt;span style="color: green"&gt;//开始重绘&lt;br/&gt;    &lt;/span&gt;&lt;span style="color: #2b91af"&gt;Bitmap &lt;/span&gt;bitmap = &lt;span style="color: blue"&gt;new &lt;/span&gt;&lt;span style="color: #2b91af"&gt;Bitmap&lt;/span&gt;(background.Width, background.Height);&lt;br/&gt;    &lt;span style="color: green"&gt;//循环分解成了多少张图片&lt;br/&gt;    &lt;/span&gt;&lt;span style="color: blue"&gt;for &lt;/span&gt;(&lt;span style="color: blue"&gt;int &lt;/span&gt;i = 0; i &amp;lt; dw; i++)&lt;br/&gt;    {&lt;br/&gt;        &lt;span style="color: green"&gt;//取上面数据中对应的坐标点&lt;br/&gt;        &lt;/span&gt;&lt;span style="color: blue"&gt;for &lt;/span&gt;(&lt;span style="color: blue"&gt;int &lt;/span&gt;j = 0; j &amp;lt; 10; j++)&lt;br/&gt;        {&lt;br/&gt;            &lt;span style="color: blue"&gt;for &lt;/span&gt;(&lt;span style="color: blue"&gt;int &lt;/span&gt;k = 0; k &amp;lt; dh; k++)&lt;br/&gt;            {&lt;br/&gt;                bitmap.SetPixel(myPoint[j].X + i, myPoint[j].Y + k, background.GetPixel(myPoint[j].X + i, myPoint[j].Y + k));&lt;br/&gt;                &lt;span style="color: green"&gt;//SetPixel  (X坐标，Y坐标，这个点的颜色)&lt;br/&gt;                //开始重绘&lt;br/&gt;            &lt;/span&gt;}&lt;br/&gt;        }&lt;br/&gt;        pic.Refresh();   &lt;span style="color: green"&gt;//不断的刷新pic，出现页面假死现象，其实可以用多线程解决&lt;br/&gt;        &lt;/span&gt;pic.Image = bitmap;&lt;br/&gt;    }&lt;p&gt;好了，现在我们其实主要需要理解的就是，上面的那三层循环了，最外面的是循环每一个&amp;#160; 分解后的图片的 X坐标【可以这么理解，就是每个小图片的原点X坐标】&lt;/p&gt;&lt;p&gt;第二个循环代表的是&amp;#160; 每个小图片的 像素，大家可以自己看一下，其实就是用&amp;#160; bitmap 不断的取像素，然后一点点的重绘图片。&lt;/p&gt;&lt;p&gt;页面这么着实现，会造成假死现象，大家可以使用多线程的方法，优化我们的代码。&lt;/p&gt;&lt;p&gt;好了，就说这么多巴，大家可以自己实现纵向百叶窗效果。&lt;/p&gt;&lt;p&gt;&lt;a href="http://images.cnblogs.com/cnblogs_com/hihell/201109/201109141433327879.png"&gt;&lt;img style="background-image: none; border-bottom: 0px; border-left: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top: 0px; border-right: 0px; padding-top: 0px" title="·" border="0" alt="·" src="http://images.cnblogs.com/cnblogs_com/hihell/201109/201109141433384362.png" width="198" height="274" /&gt;&lt;/a&gt;&lt;/p&gt;&lt;p&gt;代码下载&lt;/p&gt;&lt;p&gt;&lt;a href="http://files.cnblogs.com/hihell/ManyPic.rar"&gt;ManyPic.rar&lt;/a&gt;&lt;/p&gt;&lt;img src="http://www.cnblogs.com/hihell/aggbug/2176167.html?type=1" width="1" height="1" alt=""/&gt;&lt;p&gt;&lt;a href="http://www.cnblogs.com/hihell/archive/2011/09/14/2176167.html" target="_blank"&gt;本文链接&lt;/a&gt;&lt;/p&gt;</content></entry></feed>
