<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>SIDE-ALICE &#187; 软件开发SoftDev</title>
	<atom:link href="http://sidealice.com/category/%e6%8a%80%e6%9c%aftechnology/%e8%bd%af%e4%bb%b6%e5%bc%80%e5%8f%91softdev/feed/" rel="self" type="application/rss+xml" />
	<link>http://sidealice.com</link>
	<description>..::欢迎来到SIDE-ALICE::..	[ACG+Tech+Orz]</description>
	<lastBuildDate>Fri, 30 Jul 2010 07:53:04 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.0.1</generator>
		<item>
		<title>How to restore tabs when firefox crashed!（崩溃后如何恢复firefox tab记录）</title>
		<link>http://sidealice.com/2010/05/how-to-restore-tabs-when-firefox-crashed%ef%bc%88%e5%b4%a9%e6%ba%83%e5%90%8e%e5%a6%82%e4%bd%95%e6%81%a2%e5%a4%8dfirefox-tab%e8%ae%b0%e5%bd%95%ef%bc%89/</link>
		<comments>http://sidealice.com/2010/05/how-to-restore-tabs-when-firefox-crashed%ef%bc%88%e5%b4%a9%e6%ba%83%e5%90%8e%e5%a6%82%e4%bd%95%e6%81%a2%e5%a4%8dfirefox-tab%e8%ae%b0%e5%bd%95%ef%bc%89/#comments</comments>
		<pubDate>Sat, 29 May 2010 20:17:43 +0000</pubDate>
		<dc:creator>AirForce</dc:creator>
				<category><![CDATA[技术Technology]]></category>
		<category><![CDATA[软件开发SoftDev]]></category>
		<category><![CDATA[backup]]></category>
		<category><![CDATA[crash]]></category>
		<category><![CDATA[firefox]]></category>
		<category><![CDATA[restore]]></category>
		<category><![CDATA[tab]]></category>

		<guid isPermaLink="false">http://sidealice.com/?p=1904</guid>
		<description><![CDATA[为了帮助那些firefox崩溃后，tab恢复错误的厄童鞋找数据，我花几分钟讲下自己的教训和心得。给大家到时候处乱不惊。 大家一定要记住！ firefox崩溃以后，点击恢复tab点错了，千万不要慌，最最关键不要关闭firefox。 这个时候你的firefox目录会有一个bakcup文件的哈。 vista系统下面firefox保存在：C:\Users\af\AppData\Roaming\Mozilla\Firefox\Profiles\XXXX.default 目录里面： sessionstore.bak 这个文件是备份的，你上一次成功打开的tab数据，每次firefox关闭了这个文件就会保存tab数据以供下一次恢复。 所以千万不要随意关闭firefox。。。 如果要恢复，最笨最笨的办法是去找出来sessionstore.bak里面的数据条目，按照http查看最简单，一条一条爬吧。。。。聪明的方法需要写个算法，可惜我没时间了，等聪明的童鞋去写吧。。。。]]></description>
		<wfw:commentRss>http://sidealice.com/2010/05/how-to-restore-tabs-when-firefox-crashed%ef%bc%88%e5%b4%a9%e6%ba%83%e5%90%8e%e5%a6%82%e4%bd%95%e6%81%a2%e5%a4%8dfirefox-tab%e8%ae%b0%e5%bd%95%ef%bc%89/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>niconico SDK 开发包.</title>
		<link>http://sidealice.com/2010/04/niconico-sdk-%e5%bc%80%e5%8f%91%e5%8c%85/</link>
		<comments>http://sidealice.com/2010/04/niconico-sdk-%e5%bc%80%e5%8f%91%e5%8c%85/#comments</comments>
		<pubDate>Sat, 17 Apr 2010 16:30:12 +0000</pubDate>
		<dc:creator>AirForce</dc:creator>
				<category><![CDATA[软件开发SoftDev]]></category>
		<category><![CDATA[api]]></category>
		<category><![CDATA[niconico]]></category>
		<category><![CDATA[sdk]]></category>

		<guid isPermaLink="false">http://sidealice.com/?p=1897</guid>
		<description><![CDATA[http://help.nicovideo.jp/jksdk/ 环境需求: CPU: Pentium4 2.0GHz以上 メモリ: 1.0GB以上 OS: Windows XP/Windows Vista/Windows 7 ランタイム: Visual C++ 2008 SP1 ランタイム API详细介绍: API概要 各APIの大まかな説明です。 Interface IJKNiCOM 主インターフェイスです。 JKNiCOM を使用する際は 本インスタンス が常に存在しなければなりません。 ICommentWindow コメントウィンドウ制御用インターフェイスです。 IChannelCollection 公式チャンネル一覧取得用インターフェイスです。IEnumerableをサポートしています IRadioChannelCollection ラジオチャンネル一覧取得用インターフェイスです。IEnumerableをサポートしています IUserChannelCollection ユーザーチャンネル一覧取得用インターフェイスです。IEnumerableをサポートしています IChannel チャンネル情報保持用インターフェイスです Types TPlayStatus 再生状態を示す列挙子です TNotify 通知コードを示す列挙子です 目前接口提供C#和VBScript两个方法.]]></description>
		<wfw:commentRss>http://sidealice.com/2010/04/niconico-sdk-%e5%bc%80%e5%8f%91%e5%8c%85/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Silverlight Development</title>
		<link>http://sidealice.com/2007/07/silverlight-development/</link>
		<comments>http://sidealice.com/2007/07/silverlight-development/#comments</comments>
		<pubDate>Fri, 20 Jul 2007 07:34:47 +0000</pubDate>
		<dc:creator>AirForce</dc:creator>
				<category><![CDATA[软件开发SoftDev]]></category>
		<category><![CDATA[Silverlight]]></category>

		<guid isPermaLink="false">http://sidealice.com/?p=1051</guid>
		<description><![CDATA[Silverlight Development Using the .NET Framework The following QuickStart topics demonstrate how to create managed Silverlight-based applications using C# and Visual Basic. This content pertains to the Microsoft Silverlight 1.1 Alpha (May 2007) release. * Getting Started with Silverlight Development * Building Dynamic User Interfaces with Silverlight * Networking and Communication in Silverlight * Interaction [...]]]></description>
		<wfw:commentRss>http://sidealice.com/2007/07/silverlight-development/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>附正则表达式简介</title>
		<link>http://sidealice.com/2006/05/%e9%99%84%e6%ad%a3%e5%88%99%e8%a1%a8%e8%be%be%e5%bc%8f%e7%ae%80%e4%bb%8b/</link>
		<comments>http://sidealice.com/2006/05/%e9%99%84%e6%ad%a3%e5%88%99%e8%a1%a8%e8%be%be%e5%bc%8f%e7%ae%80%e4%bb%8b/#comments</comments>
		<pubDate>Sun, 07 May 2006 06:52:19 +0000</pubDate>
		<dc:creator>AirForce</dc:creator>
				<category><![CDATA[软件开发SoftDev]]></category>
		<category><![CDATA[正则表达式]]></category>

		<guid isPermaLink="false">http://sidealice.com/?p=947</guid>
		<description><![CDATA[附正则表达式简介 CODE 　\ 将下一个字符标记为一个特殊字符、或一个原义字符、或一个 后 　 向引用、或一个八进制转义符。例如，’n’ 匹配字符 &#8220;n&#8221;。’\n’ 　 匹配一个换行符。序列 ’\\’ 匹配 &#8220;\&#8221; 而 &#8220;\(&#8221; 则匹配 &#8220;(&#8220;。 　 　^ 匹配输入字符串的开始位置。如果设置了 RegExp 对象的 　 Multiline 属性，^ 也匹配 ’\n’ 或 ’\r’ 之后的位置。 　 　$ 匹配输入字符串的结束位置。如果设置了 RegExp 对象的 　 Multiline 属性，$ 也匹配 ’\n’ 或 ’\r’ 之前的位置。 　 　* 匹配前面的子表达式零次或多次。例如，zo* 能匹配 &#8220;z&#8221; 以及 　 &#8220;zoo&#8221;。 * 等价于{0,}。 　 [...]]]></description>
		<wfw:commentRss>http://sidealice.com/2006/05/%e9%99%84%e6%ad%a3%e5%88%99%e8%a1%a8%e8%be%be%e5%bc%8f%e7%ae%80%e4%bb%8b/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>浅谈HOOK技术在VC编程中的应用 [转]</title>
		<link>http://sidealice.com/2005/09/%e6%b5%85%e8%b0%88hook%e6%8a%80%e6%9c%af%e5%9c%a8vc%e7%bc%96%e7%a8%8b%e4%b8%ad%e7%9a%84%e5%ba%94%e7%94%a8-%e8%bd%ac/</link>
		<comments>http://sidealice.com/2005/09/%e6%b5%85%e8%b0%88hook%e6%8a%80%e6%9c%af%e5%9c%a8vc%e7%bc%96%e7%a8%8b%e4%b8%ad%e7%9a%84%e5%ba%94%e7%94%a8-%e8%bd%ac/#comments</comments>
		<pubDate>Sat, 10 Sep 2005 05:51:45 +0000</pubDate>
		<dc:creator>AirForce</dc:creator>
				<category><![CDATA[软件开发SoftDev]]></category>
		<category><![CDATA[HOOK]]></category>
		<category><![CDATA[vc]]></category>

		<guid isPermaLink="false">http://sidealice.com/?p=807</guid>
		<description><![CDATA[浅谈HOOK技术在VC编程中的应用 作者： 中国电波传播研究所青岛分所郎锐 出处： yesky 摘要： 本文针对HOOK技术在VC编程中的应用进行讨论，并着重对应用比较广泛的全局HOOK做了阐述。 引言 Windows操作系统是建立在事件驱动机制之上的，系统各部分之间的沟通也都是通过消息的相互传递而实现的。但在通常情况下，应用程序只能处理来自进程内部的消息或是从其他进程发过来的消息，如果需要对在进程外传递的消息进行拦截处理就必须采取一种被称为HOOK（钩子）的技术。钩子是Windows操作系统中非常重要的一种系统接口，用它可以轻松截获并处理在其他应用程序之间传递的消息，并由此可以完成一些普通应用程序难以实现的特殊功能。基于钩子在消息拦截处理中的强大功能，本文即以VC++ 6.0为编程背景对钩子的基本概念及其实现过程展开讨论。为方便理解，在文章最后还给出了一个简单的有关鼠标钩子的应用示例。 钩子的基本原理 钩子的本质是一段用以处理系统消息的程序，通过系统调用，将其挂入到系统。钩子的种类有很多，每一种钩子负责截获并处理相应的消息。钩子机制允许应用程序截获并处理发往指定窗口的消息或特定事件，其监视的窗口即可以是本进程内的也可以是由其他进程所创建的。在特定的消息发出，并在到达目的窗口之前，钩子程序先行截获此消息并得到对其的控制权。此时在钩子函数中就可以对截获的消息进行各种修改处理，甚至强行终止该消息的继续传递。 任何一个钩子都由系统来维护一个指针列表（钩子链表），其指针指向钩子的各个处理函数。最近安装的钩子放在链的开始，最早安装的钩子则放在最后，当钩子监视的消息出现时，操作系统调用链表开始处的第一个钩子处理函数进行处理，也就是说最后加入的钩子优先获得控制权。在这里提到的钩子处理函数必须是一个回调函数（callback function），而且不能定义为类成员函数，必须定义为普通的C函数。在使用钩子时可以根据其监视范围的不同将其分为全局钩子和线程钩子两大类，其中线程钩子只能监视某个线程，而全局钩子则可对在当前系统下运行的所有线程进行监视。显然，线程钩子可以看作是全局钩子的一个子集，全局钩子虽然功能强大但同时实现起来也比较烦琐：其钩子函数的实现必须封装在动态链接库中才可以使用。 钩子的安装与卸载 由于全局钩子具有相当的广泛性而且在功能上完全覆盖了线程钩子，因此下面就主要对应用较多的全局钩子的安装与使用进行讨论。前面已经提过，操作系统是通过调用钩子链表开始处的第一个钩子处理函数而进行消息拦截处理的。因此，为了设置钩子，只需将回调函数放置于链首即可，操作系统会使其首先被调用。在具体实现时由函数SetWindowsHookEx()负责将回调函数放置于钩子链表的开始位置。SetWindowsHookEx()函数原型声明如下: HHOOK SetWindowsHookEx(int idHook; HOOKPROC lpfn; HINSTANCE hMod; DWORD dwThreadId); 其中：参数idHook 指定了钩子的类型，总共有如下13种： WH_CALLWNDPROC 系统将消息发送到指定窗口之前的&#8221;钩子&#8221; WH_CALLWNDPROCRET 消息已经在窗口中处理的&#8221;钩子&#8221; WH_CBT 基于计算机培训的&#8221;钩子&#8221; WH_DEBUG 差错&#8221;钩子&#8221; WH_FOREGROUNDIDLE 前台空闲窗口&#8221;钩子&#8221; WH_GETMESSAGE 接收消息投递的&#8221;钩子&#8221; WH_JOURNALPLAYBACK 回放以前通过WH_JOURNALRECORD&#8221;钩子&#8221;记录的输入消息 WH_JOURNALRECORD 输入消息记录&#8221;钩子&#8221; WH_KEYBOARD 键盘消息&#8221;钩子&#8221; WH_MOUSE 鼠标消息&#8221;钩子&#8221; WH_MSGFILTER 对话框、消息框、菜单或滚动条输入消息&#8221;钩子&#8221; WH_SHELL 外壳&#8221;钩子&#8221; WH_SYSMSGFILTER 系统消息&#8221;钩子&#8221; 参数lpfn为指向钩子处理函数的指针，即回调函数的首地址；参数hMod则标识了钩子处理函数所处模块的句柄；第四个参数dwThreadId 指定被监视的线程，如果明确指定了某个线程的ID就只监视该线程，此时的钩子即为线程钩子；如果该参数被设置为0，则表示此钩子为监视系统所有线程的全局钩子。此函数在执行完后将返回一个钩子句柄。 虽然对于线程钩子并不要求其象全局钩子一样必须放置于动态链接库中，但是推荐其也在动态链接库中实现。因为这样的处理不仅可使钩子可为系统内的多个进程访问，也可以在系统中被直接调用，而且对于一个只供单进程访问的钩子，还可以将其钩子处理过程放在安装钩子的同一个线程内，此时SetWindowsHookEx()函数的第三个参数也就是该线程的实例句柄。 在SetWindowsHookEx()函数完成对钩子的安装后，如果被监视的事件发生，系统马上会调用位于相应钩子链表开始处的钩子处理函数进行处理，每一个钩子处理函数在进行相应的处理时都要考虑是否需要把事件传递给下一个钩子处理函数。如果要传递，就通过函数CallNestHookEx()来解决。尽管如此，在实际使用时还是强烈推荐无论是否需要事件传递而都在过程的最后调用一次CallNextHookEx( )函数，否则将会引起一些无法预知的系统行为或是系统锁定。该函数将返回位于钩子链表中的下一个钩子处理过程的地址，至于具体的返回值类型则要视所设置的钩子类型而定。该函数的原型声明如下： LRESULT CallNextHookEx(HHOOK hhk;int nCode;WPARAM wParam;LPARAM lParam); 其中，参数hhk为由SetWindowsHookEx()函数返回的当前钩子句柄；参数nCode为传给钩子过程的事件代码；参数wParam和lParam 则为传给钩子处理函数的参数值，其具体含义同设置的钩子类型有关。 最后，由于安装钩子对系统的性能有一定的影响，所以在钩子使用完毕后应及时将其卸载以释放其所占资源。释放钩子的函数为UnhookWindowsHookEx()，该函数比较简单只有一个参数用于指定此前由SetWindowsHookEx()函数所返回的钩子句柄，原型声明如下： BOOL UnhookWindowsHookEx(HHOOK hhk);]]></description>
		<wfw:commentRss>http://sidealice.com/2005/09/%e6%b5%85%e8%b0%88hook%e6%8a%80%e6%9c%af%e5%9c%a8vc%e7%bc%96%e7%a8%8b%e4%b8%ad%e7%9a%84%e5%ba%94%e7%94%a8-%e8%bd%ac/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Flash8API Full !!!</title>
		<link>http://sidealice.com/2005/09/flash8api-full/</link>
		<comments>http://sidealice.com/2005/09/flash8api-full/#comments</comments>
		<pubDate>Sat, 10 Sep 2005 05:50:23 +0000</pubDate>
		<dc:creator>AirForce</dc:creator>
				<category><![CDATA[软件开发SoftDev]]></category>
		<category><![CDATA[api]]></category>
		<category><![CDATA[flash]]></category>

		<guid isPermaLink="false">http://sidealice.com/?p=805</guid>
		<description><![CDATA[&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;- Download Flash 8 here: http://www.macromedia.com/software/flashplayer/public_beta/ &#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;- getVersion() =&#62; WIN 8,0,0,434 &#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;- BEFORE TESTING ANY NEW FEATURES: &#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;- 1) Use Flash MX or MX2004 to create SWF version 6 or 7 ! 2) patch the SWF to version 8 (use my tool here: http://www.develotec.com/fto8.exe !!) (alternatively, use the XML patch for flash MX 2004 publishing profile &#8216;default.xml&#8217; [...]]]></description>
		<wfw:commentRss>http://sidealice.com/2005/09/flash8api-full/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>[个人备份]数据结构算法集&#8212;C++语言实现</title>
		<link>http://sidealice.com/2005/09/%e4%b8%aa%e4%ba%ba%e5%a4%87%e4%bb%bd%e6%95%b0%e6%8d%ae%e7%bb%93%e6%9e%84%e7%ae%97%e6%b3%95%e9%9b%86-c%e8%af%ad%e8%a8%80%e5%ae%9e%e7%8e%b0/</link>
		<comments>http://sidealice.com/2005/09/%e4%b8%aa%e4%ba%ba%e5%a4%87%e4%bb%bd%e6%95%b0%e6%8d%ae%e7%bb%93%e6%9e%84%e7%ae%97%e6%b3%95%e9%9b%86-c%e8%af%ad%e8%a8%80%e5%ae%9e%e7%8e%b0/#comments</comments>
		<pubDate>Sat, 10 Sep 2005 05:50:17 +0000</pubDate>
		<dc:creator>AirForce</dc:creator>
				<category><![CDATA[软件开发SoftDev]]></category>
		<category><![CDATA[c++]]></category>
		<category><![CDATA[数据结构]]></category>
		<category><![CDATA[算法]]></category>

		<guid isPermaLink="false">http://sidealice.com/?p=803</guid>
		<description><![CDATA[数据结构算法集&#8212;C++语言实现 阅读：120　　发表时间：2005-5-13 21:29:02　来源：转载　作者：ihualan 本文关键字:数据结构算法集&#8212;C++语言实现&#124;C++语言，C++语言基础&#124; 这是我学数据结构编写的算法，我把他整理出来，都是基本算法，供大家学习。我使用c++面向对象形式编写，各种算法都封装在各自的类里，如果想增加功能，在相应的类里增加函数即可。我对树和图的构造也做了一些人性化设计，输入更加形象化，你可能看不懂，没关系漫漫来。各种类都使用模版设计，可以对各种数据类型操作（整形，字符，浮点） /////////////////////////// //       // //     堆栈数据结构     stack.h                  // //       // ////////////////////////// #include&#60;iostream.h&#62; template&#60;class Type&#62;class Stack; template&#60;class Type&#62; class StackNode { friend class Stack&#60;Type&#62;; private: Type data; StackNode&#60;Type&#62; *link; StackNode(Type D=0,StackNode&#60;Type&#62; *L=NULL):link(L),data(D){} }; template&#60;class Type&#62; class Stack { public: Stack():top(NULL),NumItem(0){} void Push(Type item); Type Pop(); Type GetTop(); void MakeEmpty(); bool ISEmpty(); int [...]]]></description>
		<wfw:commentRss>http://sidealice.com/2005/09/%e4%b8%aa%e4%ba%ba%e5%a4%87%e4%bb%bd%e6%95%b0%e6%8d%ae%e7%bb%93%e6%9e%84%e7%ae%97%e6%b3%95%e9%9b%86-c%e8%af%ad%e8%a8%80%e5%ae%9e%e7%8e%b0/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>[个人备份]用遗传算求最值</title>
		<link>http://sidealice.com/2005/09/%e4%b8%aa%e4%ba%ba%e5%a4%87%e4%bb%bd%e7%94%a8%e9%81%97%e4%bc%a0%e7%ae%97%e6%b1%82%e6%9c%80%e5%80%bc/</link>
		<comments>http://sidealice.com/2005/09/%e4%b8%aa%e4%ba%ba%e5%a4%87%e4%bb%bd%e7%94%a8%e9%81%97%e4%bc%a0%e7%ae%97%e6%b1%82%e6%9c%80%e5%80%bc/#comments</comments>
		<pubDate>Sat, 10 Sep 2005 05:49:34 +0000</pubDate>
		<dc:creator>AirForce</dc:creator>
				<category><![CDATA[软件开发SoftDev]]></category>
		<category><![CDATA[遗传算法]]></category>

		<guid isPermaLink="false">http://sidealice.com/?p=801</guid>
		<description><![CDATA[#include &#60;stdio.h&#62; #include &#60;math.h&#62; #define M 80 /*//种群大小*/ #define T 200 /* //终止代数*/ #define Pc 0.6 /* //交叉概率*/ #define Pm 0.001 /*//变异概率*/ #define Clength 20 /*//定义编码的码长*/ /*//初始化种群*/ /*//将种群的数值映射到长度为10的二进值代码,然后连接生成染色体长度为20*/ void initialize(char newgenetic[][Clength],char oldgenetic[][Clength],int n) { float flag1,flag2;/*//用于控制种群随机数的符号*/ float var_x1,var_x2;/*//两个随机数*/ int i,j; /*//i控制种群的个数,j控制每个数值到二进值代码的位置*/ int remainder,quotient; /*//余数,商*/ float temp; char var_ch1[Clength/2],var_ch2[Clength/2]; /*//对应的两个随机数的长度为10的而进值代码*/ int gclength=Clength; srand((unsigned)time(NULL));/*//伪随机种子*/ for(i=0;i&#60;n;i++) { flag1=(float)rand()/32738; [...]]]></description>
		<wfw:commentRss>http://sidealice.com/2005/09/%e4%b8%aa%e4%ba%ba%e5%a4%87%e4%bb%bd%e7%94%a8%e9%81%97%e4%bc%a0%e7%ae%97%e6%b1%82%e6%9c%80%e5%80%bc/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>[个人备份]说说字符集</title>
		<link>http://sidealice.com/2005/09/%e4%b8%aa%e4%ba%ba%e5%a4%87%e4%bb%bd%e8%af%b4%e8%af%b4%e5%ad%97%e7%ac%a6%e9%9b%86/</link>
		<comments>http://sidealice.com/2005/09/%e4%b8%aa%e4%ba%ba%e5%a4%87%e4%bb%bd%e8%af%b4%e8%af%b4%e5%ad%97%e7%ac%a6%e9%9b%86/#comments</comments>
		<pubDate>Sat, 10 Sep 2005 05:48:04 +0000</pubDate>
		<dc:creator>AirForce</dc:creator>
				<category><![CDATA[软件开发SoftDev]]></category>

		<guid isPermaLink="false">http://sidealice.com/?p=799</guid>
		<description><![CDATA[由于作者是美国人的缘故，我发现Windows下的几本名著（如《Windows程序设计》，Jeffrey Richter的《Windows 核心编程》）对字符集的讲解都不甚透彻。现在这里对一些易让人迷惑的问题进行澄清，并指明一些编程时容易出错的问题（我自己就犯过）。 先解释几个概念： 字符集：根据编码特性而分，字符集可分为三类。 l         窄字符集（SBCS） 每个代码由一个字节进行表示，比如ANSI。 l         多字节字符集（MBCS） 字符集中的代码或者是单字节，或者是多字节，比如DBCS，GB2312等。 l         宽字节字符集   字符集中每个字符由两个字节表示。比如UNICODE 代码页：在UNICODE和DBCS中由于包含的代码十分多，为了使用方便就需要对这些代码进行组织。组织的方法就是把不同国家的代码分别放入不同的代码页。 字符集与代码页的关系：由上可知，对于UNICODE和DBCS，代码页是从属于字符集的。但对于SBCS类的字符集（比如ANSI）和DBCS之外的MBCS字符集（比如GB2312等）他们则只对应于一个代码页。 下面看一段潜在有问题的程序： void ConverAndOutputString(HDC hdc,LPWSTR wstr, int length,int x,int y) { int nret; int sizebuffer= 2*length; char* lpBuffer=new char[sizebuffer]; nret=WideCharToMultiByte(CP_ACP,0,wstr , length, lpBuffer, sizebuffer ,NULL,NULL); TextOut(hdc,x,y, lpBuffer,nret); delete[]lpBuffer; } 这段程序很简单，只是把一个宽字符串转为DBCS串而后按指定的坐标进行输出。Jeffrey Richter在他的《Windows核心编程》中的第26页也用几乎的相同的方法进行字符串转换。但这段程序其实是有问题的。问题出在转换字符串时不应该硬编码指定代码页，而应该根据当前字体进行动态获取。否则在某些情况下将无法把wstr中的UNICODE字符转换到正确的代码。如果你用上述代码进行中文输出，你将很有幸看到很多问号被自动添加到你的字符串中。 解决的办法也很简单，但首先你要熟悉如下两个个API函数：       int GetTextCharset(HDC hdc);//这个API用来得到当前字体的字符集。        BOOL TranslateCharsetInfo(           DWORD* pSrc,        // information           [...]]]></description>
		<wfw:commentRss>http://sidealice.com/2005/09/%e4%b8%aa%e4%ba%ba%e5%a4%87%e4%bb%bd%e8%af%b4%e8%af%b4%e5%ad%97%e7%ac%a6%e9%9b%86/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>关于API HOOK拦截封包原理</title>
		<link>http://sidealice.com/2005/07/%e5%85%b3%e4%ba%8eapi-hook%e6%8b%a6%e6%88%aa%e5%b0%81%e5%8c%85%e5%8e%9f%e7%90%86/</link>
		<comments>http://sidealice.com/2005/07/%e5%85%b3%e4%ba%8eapi-hook%e6%8b%a6%e6%88%aa%e5%b0%81%e5%8c%85%e5%8e%9f%e7%90%86/#comments</comments>
		<pubDate>Wed, 13 Jul 2005 04:03:40 +0000</pubDate>
		<dc:creator>AirForce</dc:creator>
				<category><![CDATA[软件开发SoftDev]]></category>
		<category><![CDATA[api]]></category>
		<category><![CDATA[HOOK]]></category>

		<guid isPermaLink="false">http://sidealice.com/?p=632</guid>
		<description><![CDATA[作者：不详 　来源于：TTee.com 外挂网 http://soft.ttee.com/Article/Catalog32/95.html 我自己做的apihook，是用了陷阱式和导入表式封装在同一个类里的。源代码还没整理，而且是用delphi编写的。本人最近忙其他一个程序，加上工作忙，所以现找来网上的一篇关于apihook的文章。 本论坛很多朋友是用C＋＋的，所以转贴了一篇C＋＋的，原理写的蛮清楚的，用的HOOK方式是陷阱式的。 PS：大名鼎鼎的WPE就是一个优秀的API Hook，怎么样？你也可以编个WPE出来：） ＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝ 利用hook截获进程的API调用 作者：Redspider 截获API是个很有用的东西，比如你想分析一下别人的程序是怎样工作的。这里我介绍一下一种我自己试验通过的方法。 首先，我们必须设法把自己的代码放到目标程序的进程空间里去。Windows Hook可以帮我们实现这一点。SetWindowsHookEx的声明如下： HHOOK SetWindowsHookEx( int idHook, // hook type HOOKPROC lpfn, // hook procedure HINSTANCE hMod, // handle to application instance DWORD dwThreadId // thread identifier ); 具体的参数含义可以翻阅msdn，没有msdn可谓寸步难行。 这里Hook本身的功能并不重要，我们使用它的目的仅仅只是为了能够让Windows把我们的代码植入别的进程里去。hook Type我们任选一种即可，只要保证是目标程序肯定会调用到就行，这里我用的是WH_CALLWNDPROC。lpfn和hMod分别指向我们的钩子代码及其所在的dll，dwThreadId设为0，表示对所有系统内的线程都挂上这样一个hook，这样我们才能把代码放到别的进程里去。 之后，我们的代码就已经进入了系统内的所有进程空间了。必须注意的是，我们只需要截获我们所关心的目标程序的调用，因此还必须区分一下进程号。我们自己的钩子函数中，第一次运行将进行最重要的API重定向的工作。也就是通过将所需要截获的API的开头几个字节改为一个跳转指令，使其跳转到我们的API中来。这是最关键的部分。这里我想截三个调用，ws2_32.dll中的send和recv、user32.dll中的GetMessageA。 DWORD dwCurrentPID = 0; HHOOK hOldHook = NULL; DWORD pSend = 0; [...]]]></description>
		<wfw:commentRss>http://sidealice.com/2005/07/%e5%85%b3%e4%ba%8eapi-hook%e6%8b%a6%e6%88%aa%e5%b0%81%e5%8c%85%e5%8e%9f%e7%90%86/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>
