C/C++
windless0530
这个作者很懒,什么都没留下…
展开
-
VS2008中影响exe大小的和速度的选项
原贴地址:http://www.cppblog.com/woaidongmao/archive/2009/10/19/98920.aspx 我个人的经验,在这些工作都做了之后,如果还是压缩不下来二进制文件大小,可以考虑过一遍map文件中的符号表,看一下占空间最大的symbol都是哪些,是否可以优化掉,是否可以改为动态链接,等等。 以下是原文: -------转载 2010-03-16 09:46:00 · 5606 阅读 · 2 评论 -
关于属性HTTPONLY的COOKIE的获取
IE8以上,InternetGetCookieEx可以传参数INTERNET_COOKIE_HTTPONLY (值为0x2000) 来获取这类COOKIE,但在IE6上就没办法了。所以,获取COOKIE最稳妥的方式还是要属自己去解析文本。原创 2010-05-21 20:31:00 · 8756 阅读 · 0 评论 -
获取系统发呆(IDLE)时间(上次用户动作时间)
用GetLastInputInfo得到上次用户操作时的tick count,和当前tick count作对比。原创 2010-05-25 17:35:00 · 929 阅读 · 0 评论 -
枚举占用某DLL的进程
<br />见如下CheckProcess函数:<br /> <br />用法:<br />INT nProc = CheckProcess(_T("wininet.dll");<br /> <br />#include <windows.h>#include <tchar.h>#include <Tlhelp32.h>#include <stdio.h>BOOL CheckModules(DWORD dwPID, LPCTSTR szFileName){ HANDLE hMo原创 2010-08-03 13:21:00 · 1070 阅读 · 0 评论 -
检查系统和程序内存使用情况
检查当前操作系统内存情况:void CheckMemorySystem(){ MEMORYSTATUS memStatus = {0}; memStatus.dwLength = sizeof(MEMORYSTATUS); GlobalMemoryStatus(&memStatus); // to do : memStatus记录了系统内存使用信息} 检查某个程序(以当前程序为例)内存使用情况:void CheckMemoryProcess(){原创 2010-06-09 11:17:00 · 1054 阅读 · 0 评论 -
查找历史纪录的代码
来源:http://topic.csdn.net/u/20090908 ... 4-322d0a5886ca.html可以查到:URL、标题、访问时间、更新时间、过期时间。访问次数暂时没搞定。#include #include #include #include #define OUTPUT_HISTORY_FILE "C://url_history.txt"#define ONLY_QUERY_HTTP // 只显示网页URL纪录,否则会包括本地文件等。原创 2010-06-11 16:58:00 · 1456 阅读 · 1 评论 -
查看进程CPU占用率的方法
<br />typedef struct _THREAD_INFO { LARGE_INTEGER CreateTime; DWORD dwUnknown1; DWORD dwStartAddress; DWORD StartEIP; DWORD dwOwnERPID; DWORD dwThreadId; DWORD dwCurrentPriority; DWORD dwBasePriority; DWORD dwCo原创 2010-08-19 11:24:00 · 791 阅读 · 0 评论 -
获取本地IP地址
<br /> ULONG addr_ip_long = 0; WSADATA winsockData; if (WSAStartup(MAKEWORD(2, 0), &winsockData) != 0) { char szHostName[255] = {0}; if (0 == gethostname(szHostName, 255)) { hostent *ent = gethostbyname(szHostNam原创 2010-09-14 18:49:00 · 579 阅读 · 0 评论 -
判断IP为局域网IP的代码
<br />// ip is a DWORDreturn ((ip & 0xff000000) == 0x0a000000 || (ip & 0xfff00000) == 0xac100000 || (ip & 0xffff0000) == 0xc0a80000);原创 2010-09-14 17:42:00 · 1299 阅读 · 1 评论 -
字符编码笔记:ASCII、Unicode、UTF-8、UTF-16、UCS、BOM、Endian
<br />http://witmax.cn/character-encoding-notes.html<br /> 字符编码笔记:ASCII,Unicode和UTF-8<br />作者: 阮一峰 <br />版权声明:自由转载-非商用-非衍生-保持署名 | Creative Commons BY-NC-ND 3.0 <br />最后修改时间:2007年10月29日 09:46 <br />今天中午,我突然想搞清楚Unicode和UTF-8之间的关系,于是就开始在网上查资料。 <br />结果,这个问题比我转载 2011-01-13 17:25:00 · 1074 阅读 · 0 评论 -
vc++ socket实现的支持断点续传的下载器
网上找了一堆代码,有用wininet的,还有用socket的,整理了半天,还是觉得socket靠谱。只支持内存中断点续传。如果要加上在磁盘上断点续传,原理也差不多,不是本文重点。注释:1. CByteBufferVector是一个缓存池,动态分配BYT原创 2011-09-22 11:16:33 · 4487 阅读 · 0 评论 -
boost内存池技术
http://www.cnitblog.com/schkui/archive/2007/04/16/25775.aspxPool分配是一种分配内存方法,用于快速分配同样大小的内存块, 尤其是反复分配/释放同样大小的内存块的情况。1. pool 快速分配小块内存,如果pool无法提供小块内存给用户,返回0。 Example:转载 2012-02-18 18:50:45 · 2356 阅读 · 0 评论 -
Q_DECLARE_METATYPE 的一个坑(有时候会现诡异编译错误)
因为 Q_DECLARE_METATYPE 是一个宏。借用一句话:“宏是万恶之源”。什么恶呢?就是,如果它的参数当中有逗号",",会被当成参数分隔符。所以,当你试图这么写:Q_DECLARE_METATYPE(QMap);你就会发现编译不过,并且抓狂了。解决方法嘛,当然很简单:参照Q_DECLARE_METATYPE的宏定义,自己把它展开,编译器就不会再犯傻了。原创 2012-03-02 15:47:31 · 7509 阅读 · 2 评论 -
COOKIE格式与读写相关
1. COOKIE文件格式:COOKIE文件为操作系统cookies目录下的一堆txt文件。文件名格式为:@[数字].txt即,同一个域下可能有多个cookie文件:elf@sohu[1].txtelf@sohu[2].txtelf@sohu[3].txt文件名中的数字含义不明。实际上,浏览网页时,浏览器会根据cookies目录下index.dat中的索引信息去定位原创 2010-06-07 16:05:00 · 5678 阅读 · 3 评论 -
解决mac osx编译libevent找不到openssl目录的问题
用如下方式去configure(指定openssl的实际路径)./configure --prefix=/usr/local CPPFLAGS="-I/usr/local/Cellar/openssl/1.0.2h_1/include" LDFLAGS="-I/usr/local/Cellar/openssl/1.0.2h_1/lib"然后再make原创 2016-08-09 20:23:06 · 9870 阅读 · 0 评论 -
解决编译thrift时报错的问题
先这样configure./configure --prefix=/usr/local/ --with-boost=/usr/local CXXFLAGS="-g -O2"然后再make原创 2016-08-09 20:57:35 · 8106 阅读 · 0 评论 -
ubuntu 14.04 安装 gcc 6.1 心得
中间各种错误就不提了,最终安装成功的方法如下:1. 下载gcc 6.1https://gcc.gnu.org/mirrors.html解压到目录,设为[gcc_dir]2. 下载gcc依赖库:gmp: https://gmplib.org/#DOWNLOADmpfr: http://www.mpfr.org/mpfr-current/#download原创 2016-08-13 16:40:27 · 4540 阅读 · 0 评论 -
根据日期(年月日)得到星期几的方法
需要包含头文件"AtlComTime.h"。COleDateTime dateTime;dateTime.SetDate(wYear, wMonth, wDay);SYSTEMTIME tmTime;tmTime.wDayOfWeek = dateTime.GetDayOfWeek() - 1;需要注意的是COleDateTime的GetDayOfWeek()方法返回的星期原创 2010-05-19 18:05:00 · 1331 阅读 · 0 评论 -
InternetSetCookieEx和InternetGetCookieEx使用tip(COOKIE文件格式)
这两个函数都要注意,szCookieName这个参数不太好使,最好设为NULL,然后在写cookie时手动写在内容里:"my_cookie_name=my_cookie_value; path=/; expires=Wed, 30-Mar-11 09:00:00 GMT; domain=.csdn.net"读的时候整个读出来然后自己解析。 另外,InternetGetCookieE原创 2010-05-12 17:43:00 · 16477 阅读 · 6 评论 -
LINUX遍历文件夹
#include void traverse(const char *dir_name){ struct dirent *ent = NULL; DIR *p_dir = NULL; p_dir = opendir(dir_name); while (NULL != (ent = readdir(p_dir))) { char found[MAX_STR_LEN]; memset(found, 0, MAX_STR_LEN * sizeof(char)); spri原创 2010-07-07 19:14:00 · 902 阅读 · 0 评论 -
InternetConnect的URL参数不要加“http://”
否则会出错,而且不是在InternetConnect的时候,而是在HttpSendRequest的时候。 另外,也不要带/后面的部分,那些算object。原创 2010-03-17 18:55:00 · 3900 阅读 · 0 评论 -
详解4字节对齐
http://blog.chinaunix.net/u1/56757/showart_441080.html 摘要: 编译器通常采用的默认字节对齐规则:对于类型T,在n bit系统中,保证变量首地址在min(sizeof(T), n/8)字节位置上,以保证最少读周期。 以下为原文: -----------------其实我也是一条分割线---------转载 2010-03-18 17:52:00 · 5598 阅读 · 0 评论 -
关于SendMessage的返回
如果目标窗口的创建线程和SendMessage线程是不同线程,则SendMessage会发送消息,并等待目标线程返回后返回。 否则,SendMessage实质会起User32.dll,直接执行窗体的消息响应函数,在函数返回后返回。原创 2010-03-18 16:44:00 · 1771 阅读 · 0 评论 -
窗口阴影效果:窗口类style属性添加CS_DROPSHADOW
但是有一个问题:这个效果会在一开始创建窗口时就生效。如果希望实现创建窗口后,窗口暂时不显示,那么此时这个阴影还是会出现,看起来就很怪。 为了试图在窗口真正显示时才显示边框,我尝试过以下几种办法: 1. 在CreateWindowEx时,不设WS_VISIBLE,而是在之后再SetWindowLongPtr,加上WS_VISIBLE属性;2. 在CreateWindowEx时,窗原创 2010-03-24 12:06:00 · 9433 阅读 · 0 评论 -
两个SYSTEMTIME比较差异(秒数、天数……)的方法
原贴地址:http://topic.csdn.net/t/20040707/08/3151675.html 我稍微加工了一下: ====================Begin==================== time_t FileTimeToTime_t(const FILETIME &ft){ ULARGE_INTEGER ui;转载 2010-03-30 10:25:00 · 10158 阅读 · 2 评论 -
保证SetForegroundWindow成功
在SetForegroundWindow之前比较早的时候(比如main函数里)调用一下以下代码: DWORD dwTimeout = -1; SystemParametersInfo(SPI_GETFOREGROUNDLOCKTIMEOUT, 0, (LPVOID)&dwTimeout, 0); if (dwTimeout >= 100) { Sys原创 2010-04-14 11:40:00 · 7494 阅读 · 0 评论 -
内嵌另一个文件,在运行时“吐出来”的办法
这事好像有点流氓: // 在resource.h中:#define IDR_MY_ANOTHER_FILE 120// 在rc文件中:IDR_MY_ANOTHER_FILE RCDATA _T("D:/myfile.txt")// 定义函数:LPVOID GetResourceData(LPCTSTR lpName, LPCTSTR原创 2010-04-02 13:05:00 · 737 阅读 · 0 评论 -
COM的HTML控件
http://www.experts-exchange.com/Programming/Languages/C/Q_24038236.html /* CWebPage.c This is a Win32 C application (ie, no MFC, WTL, nor even any C++ -- just plain C) that demonstratesh转载 2010-04-15 19:18:00 · 2113 阅读 · 0 评论 -
解决COM显示HTML,无法copy、paste的问题
这两个操作默认是被屏蔽了的,需要手动拦截按键消息然后处理。 如果嵌入HTML的窗口拿不到WM_KEYDOWN这样的消息,就只好直接在消息循环里拦截了: { while (0 != (r = GetMessage(&msg, NULL, 0, 0))) { if (r == -1) { break; }原创 2010-04-15 19:23:00 · 1872 阅读 · 0 评论 -
Windows登录、锁屏的判定以及消息捕捉
如果窗口想获取相关消息,需要注册Session的Notification,需要Wtsapi32.dll中的两个函数:WTSRegisterSessionNotification和WTSUnRegisterSessionNotification,分别在窗口创建和销毁的时候调用。typedef BOOL (WINAPI *WTSRegisterSessionNotification)(HWND,原创 2010-04-17 13:39:00 · 13146 阅读 · 1 评论 -
遍历进程、杀进程
这是一段杀自己的其它进程实例的代码(MyProc.exe)。 static void CloseOthers(){ static const int c_sMaxProcesses = 1024; DWORD aProcesses[c_sMaxProcesses]; ZeroMemory(aProcesses, c_sMaxProcesses * size原创 2010-04-17 15:47:00 · 1434 阅读 · 0 评论 -
Debug内存泄露的简单代码
需要跑两次程序。每一次需要如下代码: #ifdef _DEBUG _CrtSetDbgFlag( _CRTDBG_ALLOC_MEM_DF | _CRTDBG_CHECK_ALWAYS_DF | _CRTDBG_LEAK_CHECK_DF );#endif F5跑完程序,就会在output窗口中打出检查到的内存泄露分配ID和前几个字节数据。 然后就原创 2010-04-06 11:34:00 · 661 阅读 · 0 评论 -
文本读写与编码格式(1)----文本格式判断(基于文件的FileMap)
class SourceConv{ // ... enum e_fileType { typeInvalid = -1, typeAnsi = 0, // ansi typeUnicode, // unicode typeRevUnicode, // 逆字节序的unic原创 2010-04-07 15:44:00 · 583 阅读 · 0 评论 -
文本读写与编码格式(2)----ansi与unicode文本读写方式
#ifdef _UNICODEtypedef std::wifstream t_ifs;typedef std::wofstream t_ofs;typedef std::wstring t_str;#elsetypedef std::ifstream t_ifs;typedef std::ofstream t_ofs;typedef std::string t_str原创 2010-04-07 15:50:00 · 959 阅读 · 0 评论 -
不定参数个数函数写法
示例1:初始化一个数组:template void InitArray(T *dstArray, int c, ...){ va_list arg; va_start(arg, c); for (int i = 0; i < c; i++) { dstArray[i] = va_arg(arg, T); }原创 2010-04-21 14:12:00 · 873 阅读 · 0 评论 -
获取IE的user agent
const DWORD c_dwSizeIn = MAX_PATH;DWORD dwSizeOut = 0;char *szAgent = new char[c_dwSizeIn];ZeroMemory(szAgent, c_dwSizeIn * sizeof(char));HRESULT hRes = UrlMkGetSessionOption(URLMON_OPTION_USERAGENT, (LPVOID)szAgent, c_dwSizeIn, &dwSizeOut, 0); 不知道原创 2010-06-24 17:12:00 · 3518 阅读 · 0 评论 -
Ubuntu 14.04 安装boost-python并配置工程指南
先是在MAC OSX上折腾半天无关,又花了点时间折腾Ubuntu,好歹OK了,在这里记录一下过程。1. 安装python-devsudo apt-get install python-dev2. 手动安装boost下载boost源代码并解压到某个目录(假设为[boost-src]),然后编译boost(c++11 +python +fPIC)./bootst原创 2016-09-23 09:40:52 · 6860 阅读 · 1 评论