
Windows编程
HarbinZJU
这个作者很懒,什么都没留下…
展开
-
使用SiteLock模板,保护你的ActiveX控件
当我们为网站开发ActiveX控件的时候,也许会出于保密或者保护控件功能由指定网站独享的目的,希望限制使用此控件的域。SiteLock是微软提出的针对ActiveX安全的一个解决方案。可以帮助ActiveX控件只运行在指定域里面。SiteLock功能在IE浏览器未被木马攻击的情况是可以信任的。这个功能实现原理比较简单,在控件任何方法入口加上域的检查:1. 在控件内获取IE浏原创 2011-11-25 14:56:55 · 1546 阅读 · 0 评论 -
关于Windows内核对象句柄在进程空间内的存储
当一个进程被初始化时,系统会为它分配一个句柄表。该句柄表只用于内核对象(简单的说就是由CreateFile, CreateMutex, CreateXXXX这类函数创建的对象),不用于用户对象或G D I 对象。下表显示了进程的句柄表的样子,它是个数据结构的数组。每个结构都包含一个指向内核对象的指针、一个访问屏蔽和一些标志。索引内核对象内存块的指针访问屏蔽(标志原创 2010-08-27 22:13:00 · 1157 阅读 · 0 评论 -
Mutex与CRITICAL_SECTION的比较
Mutex与CRITICAL_SECTION,这两个用于线程同步的对象,使用起来方法和作用都很相似,但还是有些许区别,参考下表(摘自 Windows核心编程),可以帮助选择最合适的对象。互斥对象与关键代码段的比较特性互斥对象关键代码段运行速度慢(内核对象)快(用户模式)是否能够跨进程边界来使用是否声明HANDLE原创 2010-08-27 22:04:00 · 1400 阅读 · 0 评论 -
Windows消息机制要点
1. 窗口过程 每个窗口会有一个称为窗口过程的回调函数(WndProc),它带有四个参数,分别为:窗口句柄(Window Handle),消息ID(Message ID),和两个消息参数(wParam, lParam),当窗口收到消息时系统就会调用此窗口过程来处理消息。(所以叫回调函数)2 消息类型 1) 系统定义消息(System-Defined Messages) 在SDK转载 2010-08-23 16:34:00 · 700 阅读 · 0 评论 -
分析与理解MFC消息反射机制
前言:我曾写过一篇文章对通知消息WM_NOTIFY进行分析,消息反射是MFC中对通知消息的处理方式,两者之间关系十分紧密,因此,我写了这篇文章,希望能够描绘出通知消息的完整印象。消息反射的基础知识1、消息反射解释:父窗口将控制子窗口发给它的通知消息,首先反射回子窗口进行处理(即给控制子窗口一个机会,让控制子窗口处理此消息),这样通知消息就有机会能被子窗口自身进行处理。转载 2010-11-06 18:26:00 · 1151 阅读 · 1 评论 -
深度剖析消息反射机制
摘要:在前面我们分析了控件通知消息WM_NOTIFY,和WM_NOTIFY紧密联系的还有一个MFC新特性:消息反射。本文中,我想就这个问题作一个全面的论述,如果有错误,还望各路大虾批评指正。 什么是消息反射? 在windows里面,子控件经常向父控件发送消息,例如很多子控件要绘制自己的背景,就可能向父窗口发送消息WM_CTLCOLOR。对于从子控件发来的消息,父控件有可能在转载 2010-11-06 17:01:00 · 996 阅读 · 1 评论 -
VC 双缓冲绘图
在图形图象处理编程过程中,双缓冲是一种基本的技术。我们知道,如果窗体在响应WM_PAINT消息的时候要进行复杂的图形处理,那么窗体在重绘时由于过频的刷新而引起闪烁现象。解决这一问题的有效方法就是双缓冲技术。 因为窗体在刷新时,总要有一个擦除原来图象的过程OnEraseBkgnd,它利用背景色填充窗体绘图区,然后在调用新的绘图代码进行重绘,这样一擦一写造成了图象颜色的反差。当WM_PAIN转载 2010-11-12 13:11:00 · 896 阅读 · 0 评论 -
MFC程序员的WTL指南系列 (WTL for MFC Programmers Series)
这系列文章介绍了WTL界面开发的一些基础知识,写得浅显易懂,推荐。源文地址:http://www.codeproject.com/KB/wtl/wtl4mfc1.aspx中文版本:http://vckbase.com/document/listdoc.asp?sclsid=1704转载 2012-01-02 19:34:19 · 1239 阅读 · 0 评论 -
深入探讨MFC消息循环和消息泵
首先,应该清楚MFC的消息循环(::GetMessage,::PeekMessage),消息泵(CWinThread::PumpMessage) 和MFC的消息在窗口之间的路由是两件不同的事情。在MFC的应用程序中(应用程序类基于CWinThread继承),必须要有一个消息循环,他的作用是 从应用程序的消息队列中读取消息,并把它派送出去(::DispatchMessage)。而消息路由是指消息派送转载 2010-08-27 22:18:00 · 787 阅读 · 0 评论 -
WM_PAINT和WM_DRAWITEM/OnPaint()和与OnDrawItem()区别
OnDrawItem是画窗口中的子控件的,因为它的入口参数LPDRAWITEMSTRUCT带入不同子控件的相关参数,而且,你得把字控件设置成“自画”类型,才会调用到OnDrawItem,顺便说一下自画,不是所有设置成自画类型的控件都会调用父窗口的OnDrawItem,例如ListBox的自画,你就必须重载CListBox的DrawItem方法和MeasureItem方法才可以,但象菜单,按钮等的自转载 2010-11-01 10:55:00 · 2611 阅读 · 0 评论 -
任务管理器中每一列的含义是什么?
列描述PID(进程标识符) 唯一标识所运行进程的编号。用户名 运行该进程的用户帐户。会话标识 标识进程所有者的编号。当多个用户登录时,每个用户都有一个唯一的会话标识。CPU 的使用 自上次更新以来,进程使用 CPU 的时间百分比(列标题中列为“CPU”)。转载 2011-12-14 15:36:06 · 3497 阅读 · 0 评论 -
如何使用BHO定制你的Internet Explorer浏览器
原文:微软公司 Dino Esposito编译:朱先中原文出处:Browser Helper Objects: The Browser the Way You Want It一、简介 有时,你可能需要一个定制版本的浏览器。在这种情况下,你可以自由地把一些新颖但又不标准的特征增加到一个浏览器上。结果,你最终有的只是一个新但不标准的浏览器。Web浏览器控件只是浏览器的分析引擎。这转载 2011-11-26 12:00:46 · 1320 阅读 · 0 评论 -
悬浮窗口(智能隐藏和显示)的一种实现方案
悬浮窗口应该具有的特性为了实现让用户能方便打开软件主窗口,又不对用户界面造成明显的视觉干扰,悬浮窗口应该有以下特点:和主窗口是二选一的关系,主窗口显示时自动隐藏,主窗口被全部遮挡时自动显示始终置前,不被其它窗口遮挡,全屏播放电影、截图软件截图等情形时,取消置前。支持全窗口拖动半透明效果,鼠标移上时全为不透明为了使隐藏和出现不显得突兀,支持淡入淡出效果点击悬浮窗时,呼出主窗口,并隐藏原创 2011-11-29 12:37:28 · 13122 阅读 · 0 评论 -
如何设置进程(线程)在指定的CPU上运行
实现方法进程与指定cpu绑定:SetProcessAffinityMask(GetCurrentProcess(), dwMask);线程与指定cpu绑定:SetThreadAffinityMask(GetCurrentThread(),dwMask);dwMask为CPU序号的或运算值:1(0001)代表只运行在CPU1,2(0010)代表只运行在CPU2,3(0011)代表原创 2011-11-29 15:54:12 · 17639 阅读 · 4 评论 -
用InternetCheckConnection 判断是否接通外网
InternetCheckConnection 通过尝试连接特定的网址,可以用来判断目前机器是否接通外网。例如:BOOL bConnected = InternetCheckConnection(_T("http://www.google.com"), FLAG_ICC_FORCE_CONNECTION, 0);使用时第二个参数一定要设置为FLAG_ICC_FORCE_CONNECTI原创 2011-11-10 16:41:54 · 14858 阅读 · 0 评论 -
Windows Phone 7 应用开发环境设置,Hello World!
iOS,Android的应用开发竞争已经十分激烈了,Windows Phone 7会不会成为我们的一片蓝海呢?12月初应用数量数据:苹果:590,138 (59.95%),安卓:320,315 (32.54%),黑莓:43, 544 (4.42%),Windows Phone:35, 479 (3.60%)。Windows Phone 7的绝地大反攻已经开始了,现在动手还不算太晚!原创 2011-12-04 23:09:31 · 1611 阅读 · 0 评论 -
设置大小合适的Win7休眠文件Hiberfil.SYS
Hiberfil.SYS 是 Windows 休眠功能(Windows Hibernation)将内存数据与会话保存至硬盘、以便计算机断电重新启动后可以快速恢复会话所需的内存镜像文件。在早期版本的 Windows 中,Hiberfil.SYS 文件的大小等同于物理内存大小;而在 Windows 7 中,Hiberfil.SYS 可以在物理内存大小的 50%-100% 的范围自行调整。因此, W转载 2011-12-04 15:33:02 · 12930 阅读 · 0 评论 -
WS_EX_TOOLWINDOW 属性的陷阱
WS_EX_TOOLWINDOW,带有这个属性的窗口有以下特点:1. 不在任务栏显示。2. 不显示在Alt+Tab的切换列表中。3. 在任务管理器的窗口管理Tab中不显示。我们可能会出于某种目的会为我们的窗口设置这个属性,但有一个副作用,就是这个窗口被拖动时,可以被拖动到任务栏里面去。图片中,任务栏后面那个模糊的身影,就是我那悲催的窗口。出现这个情况,如果程序再有窗原创 2011-12-05 17:44:10 · 32031 阅读 · 3 评论 -
隐藏窗口任务栏图标的三种方法
本文介绍三种方法,可以实现隐藏窗口在任务栏中的图标。其中前两种比较坑爹,不建议使用。方法1:ModifyStyleEx(WS_EX_APPWINDOW,WS_EX_TOOLWINDOW);为窗口设置WS_EX_TOOLWINDOW属性。会有以下效果:1. 窗口图标不在任务栏显示。2. 窗口不显示在Alt+Tab的切换列表中。3. 在任务管理器的应用程序Tab原创 2011-12-06 20:22:30 · 27968 阅读 · 3 评论 -
小心GetTickCount的溢出和误差问题
GetTickCountMSDN里有这么一句:The elapsed time is stored as a DWORD value. Therefore, the time will wrap around to zero if the system is run continuously for 49.7 days.就是说系统启动49.7天以后,就又从0开始了而且这个数原创 2012-02-16 15:46:07 · 5282 阅读 · 0 评论 -
暂时提高UI响应速度的几行代码
特定时间内,有大量绘制操作可能触发,优先处理WM_PAINT消息。MSG msg;while (::PeekMessage(&msg, NULL, WM_PAINT, WM_PAINT, PM_REMOVE)){DispatchMessage(&msg);}原创 2012-04-09 09:42:21 · 937 阅读 · 0 评论 -
半透明窗口中显示标准控件(控件与文字不透明)的实现方案(附源码)
和大家分享一下在半透明窗口中显示标准控件的实现方案。通过层叠窗口可以简单实现半透明与不规则形状窗口的效果,但在其上显示标准控件(控件与文字不透明)却是件比较有挑战的事情,这里会给出一个可行的解决方案。同时实现了一些可重用的窗口类,有相关需求时可以进行引用。先看一下效果图:一、半透明窗口实现原理绘制半透明窗口的通常做法是为窗口设置WS_EX_LAYERED属性,通过Updat原创 2012-08-25 16:42:08 · 14405 阅读 · 8 评论 -
如何设置ListViewCtrl的最小列宽(How to set a minimum column width)
NOTIFY_CODE_HANDLER(HDN_TRACK, OnColumnDraging)NOTIFY_CODE_HANDLER(HDN_ITEMCHANGING, OnColumnDraging)LRESULT CListViewComponent::OnColumnDraging(int wParam, LPNMHDR lParam, BOOL &bHandled){原创 2012-10-11 12:37:20 · 1865 阅读 · 0 评论 -
IE保护模式下ActiveX控件打不开共享内存的解决方案
原文:http://www.cppblog.com/Streamlet/archive/2012/10/25/193831.html 感谢溪流漫话的投递IE保护模式下,ActiveX控件会打不开别的进程创建的共享内存,原因是IE运行在低完整性级别权限下,一般应用程序运行在中完整性级别。别的应用程序创建的共享内存,即使赋予Everyone权限,ActiveX控件仍然会打不开。解决方案转载 2012-10-25 14:16:21 · 4488 阅读 · 0 评论 -
VBScript脚本无法运行的解决方案
原文:http://www.cppblog.com/Streamlet/archive/2012/10/25/193835.html 感谢溪流漫话的投递现象——运行任何 .vbs 脚本,Windows Script Host 提示 找不到脚本“xxx.vbs”的脚本引擎“VBScript”。网页中的 vbscript 脚本无响应,也无任何报错。转载 2012-10-25 14:17:09 · 11210 阅读 · 0 评论 -
什么是窗口子类化
如果你曾经在 Windows 环境下编过程序,有时候就会发现:有一个现成的窗口,几乎有你所需要的全部功能,但还不完全一样。如果你需要一个具有过滤特殊字符功能的 Edit 控件。当然最直接的方法就是自己用代码来实现,但这的确是一个费时又很困难的任务,而子类化就可以用来做这种事情。 子类化允许你接管被子类化的窗口,使你对它有绝对的控制权。举个例子了来阐明一下:例如你需要一个只接受十转载 2012-11-15 20:29:54 · 3653 阅读 · 0 评论 -
在Visual Studio中使用VMWare插件进行远程调试
远程调试大家都不陌生,连接到虚拟机调试也大同小异。连接虚拟机是因为有些Bug只在XP机器上出现,在Win8的开发机上无法进行调试。这里要介绍的是用VMWare(9.0版本)自带的VS插件来简化整个调试过程。下图就是VMWare插件,按钮功能包括Debug,Attach等,最右的扳手是设置虚拟机。 在VMWare中配置虚拟机(XP系统)1. 创建新管理员账号,用户名密码和主机相同原创 2012-11-17 13:41:23 · 13275 阅读 · 0 评论 -
指定Webbrowser控件所用IE内核版本
如果电脑上安装了IE8或者之后版本的IE浏览器,Webbrowser控件会使用IE7兼容模式来显示网页内容。解决方法是在注册表中为你的进程指定引用IE的版本号。比如我的程序叫做a.exe对于32位程序HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Internet Explorer\MAIN\FeatureControl\FEATURE_BROW转载 2013-06-28 15:43:20 · 38127 阅读 · 7 评论 -
你真的懂任务管理器中有关内存的参数Private(提交大小)和working set(工作设置)吗?
任务管理器中跟内存相关有两个重要的指标Private(提交大小)和working set(工作设置)。如下图所示:这两个指标在process explorer中叫做Private Bytes和Working Set。而在VMMap中,他们则分别被叫做Private和Total Working Set。我这里也用Private和working set来称呼他们。转载 2013-09-17 18:09:06 · 4707 阅读 · 0 评论 -
如何获取系统任务栏位置
下面的代码用来判断任务栏位于屏幕的下方、下方、左侧还是右侧。APPBARDATA taskbar = {0}; taskbar.cbSize = sizeof(APPBARDATA); SHAppBarMessage(ABM_GETTASKBARPOS, &taskbar);switch(taskbar.uEdge){case ABE_BOTTOM: break;ca原创 2012-08-22 16:14:35 · 2991 阅读 · 0 评论 -
Debug依赖的CRT、MFC库、ATL库、OpenMP库文件
在没有安装开发环境的电脑上运行Debug版本的程序,需要拷贝相关文件到目标机。以VS2012为例,这些依赖文件在以下位置:C:\Program Files\Microsoft Visual Studio 10.0\VC\redist原创 2012-08-22 16:05:20 · 2322 阅读 · 0 评论 -
SHGetSpecialFolderPath 获取系统预设的目录
比较实用的就是获取Program Files的目录,这个目录当系统装在不同的盘下,或者64位系统下都会不同,hard code是最差的办法了。使用CSIDL_PROGRAM_FILES参数动态获取这个路径。特别地,CSIDL_PROGRAM_FILES,在64位系统下面,如果你的程序是32位的,这个参数仍然会定位到C:\Program Files (x86)http://msdn.原创 2011-09-18 23:15:32 · 3694 阅读 · 0 评论 -
CEdit控件内回车换行方法
以下两个属性设置为true:multilinewant return 代码中换行使用 \r\n原创 2012-06-04 14:05:34 · 4188 阅读 · 0 评论 -
C++函数举例:获取当前模块句柄
当前模块的句柄在程序进入点可以获得,一般做法是保存为一个全局变量,以后使用这个全局变量即可。但有时在写一些比较通用的代码时刚好要用到模块句柄,如果还去访问这个全局变量就破坏了代码的通用性。下面函数可以取得当前模块的句柄,无须保存,随调随得:01./* 02. 通过一个地址取模块句柄 03.*/ 04.inline HMODULE ModuleHandleBy转载 2012-06-08 15:46:55 · 5524 阅读 · 0 评论 -
UNICODE、UTF-8、ANSI的故事
很久很久以前,有一群人,他们决定用8个可以开合的晶体管来组合成不同的状态,以表示世界上的万物。他们看到8个开关状态是好的,于是他们把这称为"字节"。再后来,他们又做了一些可以处理这些字节的机器,机器开动了,可以用字节来组合出很多状态,状态开始变来变去。他们看到这样是好的,于是它们就这机器称为"计算机"。开始计算机只在美国用。八位的字节一共可以组合出256(2的8次方)种不同的状态。他们把其中的编号转载 2012-02-08 10:00:40 · 952 阅读 · 0 评论 -
【转载】字符,字节和编码
[转载自:http://www.regexlab.com/zh/encoding.htm]摘要:本文介绍了字符与编码的发展过程,相关概念的正确理解。举例说明了一些实际应用中,编码的实现方法。然后,本文讲述了通常对字符与编码的几种误解,由于这些误解而导致乱码产生的原因,以及消除乱码的办法。本文的内容涵盖了“中文问题”,“乱码问题”。掌握编码问题的关键是正确地理解相关概念,编码所涉及的技术其实转载 2012-06-30 17:54:20 · 1009 阅读 · 0 评论 -
【QC开发相关】解决无法创建TDConnection(OTAClient.dll中提供)对象的问题(错误0x800703e6)
在使用VS2008、VS2010开发C#程序时,使用OTAClient.dll做一些QC相关操作,会遇到创建TDConnection失败的情况,错误码是0x800703e6。具体错误信息为:System.BadImageFormatException: Retrieving the COM class factory for component with CLSID{C5CBD7B2-49原创 2012-08-14 16:02:56 · 6560 阅读 · 1 评论 -
解决调用dumpbin.exe、editbin.exe等工具mspdb100.dll 找不到的问题
1. 打开普通命令行窗口,先运行vc/bin/下的vcvars32.bat更改当前目录,再调用这些工具2. 使用VS提供的命令行窗口。原创 2012-08-14 15:51:17 · 3936 阅读 · 0 评论 -
使用rebase进行dll基地址重定位
假设有3个模块,一个user.exe,另外两个是A.dll,B.dll。 在编译链接各个模块时,我利用VS默认的base address,这样user.exe的默认基地址是0x00400000h,A或B的基地址是0x10000000h。这样,当加载器加载User.exe(它同时隐式链接A,B)。这样,A,B就会有一个被迫改变默认的基地址;从而导致映像文件里的机器代码指令(包含的硬编码地址)与加转载 2012-08-20 14:27:04 · 2365 阅读 · 0 评论 -
Detours使用说明
Detours使用说明 1 介绍2 Detours API hook2.1 hook DLL 中的函数2.2 hook自定义c 函数2.3 hook类成员函数2.4 DetourCreateProcessWithDll2.5 Detouring by Address 1 介绍 Api hook包括两部分:api调用的截取和api函数的重定向。通过api转载 2013-12-05 15:33:06 · 4330 阅读 · 0 评论