随笔分类 -  C/C++

C/C++代码
摘要:Windows密码查看器实现原理 在程序员眼中,Windows的用户界面就是一个由无数个大小窗口组合在一起的整体。密码框也不例外, 它是一个具有ES_PASSWORD风格的"Edit"类子窗口控制。既然它是一个窗口,就难免具有一些Windows窗口所共有的特性: 有一个窗口过程;可以接收消息。或许你已经知道,向文本框发送一个WM_GETTEXTLENGTH消息,就能获得文本框中的字符串长度。 如果向文本框发送一个WM_GETTEXT消息,就能获得文本框中的字符串。这两个消息对密码框同样有效,因为它们都是基于 "Edit"类所创建的子窗口控制,只是风格不同 阅读全文
posted @ 2013-08-02 18:04 编程狂热者 阅读(1793) 评论(0) 推荐(0)
摘要:UTF-8: 3字节一个字符UNICODE: 2字节一个字符GB2312: 1字节一个字符例子:“你”字的UTF-8编码: E4 BD A0 11100100 10111101 10100000“你”的Unicode编码: 4F 60 01001111 01100000按照UTF-8的编码规则,分解如下:xxxx0100 xx111101 xx100000,把除了x之外的数字拼接在一起,就变成“你”的Unicode编码了。注意UTF-8的最前面3个1,表示整个UTF-8串是由3个字节构成的。经过UTF-8编码之后,再也不会出现敏感字符了,因为最高位始终为1。... 阅读全文
posted @ 2013-07-15 17:29 编程狂热者 阅读(3775) 评论(0) 推荐(0)
摘要:在软件的编码和实现中,我们可能会碰到个一个比较头疼的问题--编码,不同字符间的编码和解码,你确定了解各种字符的编码吗?一个朋友问到了我这个问题,我虽然能回答一两个出来,但是感觉已经有点模糊,混乱了,在网上搜了搜,在书上翻了翻,总结一下吧。首先按照字符编码的历程来看:1. ASCII我们需要了解的最早编码是ASCII码。它用7个二进制位来表示,由于那个时期生产的大多数计算机使用8位大小的字节,因此用户不仅可以存放所有可能的ASCII字符,而且有整整一位空余下来。如果你技艺高超,可以将该位用做自己离奇的目的:WordStar中那个发暗的灯泡实际上设置这个高位,以指示一个单词中的最后一个字母,同时这 阅读全文
posted @ 2013-07-15 17:25 编程狂热者 阅读(665) 评论(0) 推荐(0)
摘要:用法要使用Boost.Regex, 你需要包含头文件"boost/regex.hpp". Regex是本书中两个需要独立编译的库之一(另一个是Boost.Signals)。你会很高兴获知如果你已经构建了Boost— —那只需在命令提示符下打一行命令——就可以自动链接了(对于Windows下的编译器),所以你不需要为指出那些库文件要用而费心。你要做的第一件事就是声明一个类型basic_regex的变量。这是该库的核心类之一,也是存放正则表达式的地方。创建这样一个变量很简单;只要将一个含有你要用的正则表达式的字符串传递给构造函数就行了。boost::regex reg(&quo 阅读全文
posted @ 2013-07-15 13:48 编程狂热者 阅读(1066) 评论(0) 推荐(1)
摘要:Unicode :宽字节字符集 1. 如何取得一个既包含单字节字符又包含双字节字符的字符串的字符个数? 可以调用Microsoft Visual C++的运行期库包含函数_mbslen来操作多字节(既包括单字节也包括双字节)字符串。 调用strlen函数,无法真正了解字符串中究竟有多少字符,它只能告诉你到达结尾的0之前有多少个字节。 2. 如何对DBCS(双字节字符集)字符串进行操作? 函数 描述 PTSTR CharNext ( LPCTSTR ); 返回字符串中下一个字符的地址 PTSTR CharPrev ( LPCTSTR, LPCTSTR ); ... 阅读全文
posted @ 2013-07-15 11:41 编程狂热者 阅读(490) 评论(0) 推荐(0)
摘要:本文档介绍了如何在你的C + +程序中嵌入Mozilla的JavaScript引擎SpiderMonkey的。JavaScript被广泛用于在浏览器中运行的客户端脚本。但Mozilla的JavaScript引擎是一个库,可以链接到任何C + +程序,不只是一个浏览器。许多应用程序都可以从中受益脚本。这些程序可以执行JavaScript代码,使用C + +的SpiderMonkey的API。SpiderMonkey的做什么JavaScript引擎编译和执行脚本包含JavaScript语句和函数。引擎处理执行脚本所需要的对象,内存分配和清理垃圾收集,它不再需要的对象。SpiderMonkey的支持 阅读全文
posted @ 2013-07-12 11:30 编程狂热者 阅读(2069) 评论(0) 推荐(0)
摘要:最近对v8 javascript引擎比较感兴趣,发现PHP上已经有了一个V8js扩展,就在自己的macbook air上装了一个玩玩,记录一下安装过程。1.安装v8 javscript引擎。按照V8上的wiki http://code.google.com/p/v8/wiki/BuildingWithGYP 上的说明安装,基本没有什么问题。//svn checkout v8源代码$svn checkout http://v8.googlecode.com/svn/trunk/ v8$cd v8//这个版本的v8需要使用GYP安装,不知道是啥,不过只要下面命令就可以$make dependenc 阅读全文
posted @ 2013-07-11 17:44 编程狂热者 阅读(610) 评论(0) 推荐(0)
摘要:#include#include#include#include#include#pragma comment(lib,"WinInet.lib")using namespace std;int main(){ HINTERNET hINet, hHttpFile; char szSizeBuffer[32]; DWORD dwLengthSizeBuffer = sizeof(szSizeBuffer); hINet = InternetOpen("IE6.0", INTERNET_OPEN_TYPE_PRECONFIG, NULL, NULL, 0 阅读全文
posted @ 2013-07-08 18:36 编程狂热者 阅读(12444) 评论(0) 推荐(1)
摘要:译序有些网友对为什么D2JSP能运行JavaScript脚本程序感到奇怪,因此我翻译了这篇文章,原文在这里。这篇教程手把手教你如何利用SpiderMonkey创建一个能执行JavaScript脚本的C++程序,并让JavaScript脚本操纵你的C++程序的内部数据、操作。从这篇教程可以看到在SpiderMonkey引擎的帮助下,让C++程序支持JavaScript脚本是一件很容易的事,更棒的是SpiderMonkey也可以在Macintosh和Unix平台使用。SpiderMonkey是Gecko(Firefox浏览器的内核)的JavaScript脚本引擎,详细文档请看这里。以下为翻译内容。 阅读全文
posted @ 2013-07-08 14:11 编程狂热者 阅读(779) 评论(0) 推荐(0)
摘要:GBK和UTF8之间的转换可以使用MultiByteToWideChar和WideCharToMultiByte两个API,方法是先把它们转换为中间编码Unicode,再转换为对应的编码即可。#include #include //GBK编码转换到UTF8编码int GBKToUTF8(unsigned char * lpGBKStr,unsigned char * lpUTF8Str,int nUTF8StrLen){wchar_t * lpUnicodeStr = NULL;int nRetLen = 0;if(!lpGBKStr) //如果GBK字符串为NULL则出错退出return 0 阅读全文
posted @ 2013-06-28 13:17 编程狂热者 阅读(5206) 评论(0) 推荐(0)
摘要:引言:编写高效简洁的C语言代码,是许多软件工程师追求的目标。本文就工作中的一些体会和经验做相关的阐述,不对的地方请各位指教。第一招:以空间换时间计算机程序中最大的矛盾是空间和时间的矛盾,那么,从这个角度出发逆向思维来考虑程序的效率问题,我们就有了解决问题的第1招--以空间换时间。例如:字符串的赋值。方法A:通常的办法:#define LEN 32char string1 [LEN];memset (string1,0,LEN);strcpy (string1,"This is a example!!");方法B:const char string2[LEN] =" 阅读全文
posted @ 2013-06-05 08:22 编程狂热者 阅读(271) 评论(0) 推荐(0)
摘要:在VC10 visual studio 2010 旗舰版 中安装BOOST的正则表达式库(VC6 类似 换下名字目录而已)1.下载boost.1.53.0版本http://sourceforge.net/projects/boost/files/boost/1.53.0/boost_1_53_0.7z/download 2.解压到C盘boost目录 3.从CMD进入C:/boost/libs/regex/build目录 4.从VC6安装目录找 文件并把这个文件拖到 第3步的CMD窗口 回车C:\Program Files (x86)\Microsoft Visual Studio 10.0\V 阅读全文
posted @ 2013-05-18 18:14 编程狂热者 阅读(326) 评论(0) 推荐(0)
摘要:1 源码无私奉献 2 3 void CClipboardDlg::OnBnClickedButton1() 4 { 5 // TODO: 在此添加控件通知处理程序代码 6 //打开剪贴板 7 if(OpenClipboard()){ 8 CString str; 9 HANDLE hClip;10 char *pBuf;11 //清空剪贴板12 EmptyClipboard();13 GetDlgItemText(IDC_EDIT_SEND,str);14 //分配剪贴板数... 阅读全文
posted @ 2013-05-04 09:34 编程狂热者 阅读(239) 评论(0) 推荐(0)
摘要:代码 不解释:View Code 1 // GetProcessList.cpp : 定义控制台应用程序的入口点。 2 // 3 4 #include "stdafx.h" 5 6 7 char* _w2s(const WCHAR* ws) 8 { 9 char *sz;10 size_t len;11 size_t converted;12 len = wcslen(ws)+1;13 converted=0;14 sz = (char*)malloc(len*sizeof(char));15 wcstombs_s(&co... 阅读全文
posted @ 2013-05-04 08:11 编程狂热者 阅读(229) 评论(0) 推荐(0)
摘要:const,c\c++中非常常用的关键字。 首先我们看看const有那些修饰方法。 最前面我们来看一个问题。char *p = "123"; 可能有的人不知道,这里的这个"123"是存储在常量区的,不容许修改的。 也就是说它是个const类型的。 标准的写法应该是char const *p = "123"; 至于为什么编译器容许上面的那个不标准的写法,可能是因为兼容性的问题吧。 char p[4] = "123";//这个和上面的开始大不一样的啊。切入正题。 const int s = 0; 上面的很容易理解。但带 阅读全文
posted @ 2013-02-17 17:02 编程狂热者 阅读(166) 评论(0) 推荐(0)
摘要:搜索(search)算法:find()、find_if()、search()、binary_search()【二分查找】、count【计数】()和count_if()分类排序(sorting)与通用排序(ordering)算法:sort()、partial_sort()【局部】、merge()【合并】、partition()【分】、rotate()【轮流】、reverse()【反转】和randow_shuffle()【随机洗牌】删除(deletion)算法:unique()【唯一】和remove(清除)算术(numeric)算法:accumulate()【积累+】、partial_sum()【 阅读全文
posted @ 2013-02-06 11:22 编程狂热者 阅读(319) 评论(0) 推荐(0)