2011年8月

Hook技术简介

钩子(Hook),是Windows消息处理机制的一个平台,应用程序可以在上面设置子程以监视指定窗口的某种消息,而且所监视的窗口可以是其他进程所创建的。当消息到达后,在目标窗口处理函数之前处理它。钩子机制允许应用程序截获处理window消息或特定事件。
钩子实际上是一个处理消息的程序段,通过系统调用,把它挂入系统。每当特定的消息发出,在没有到达目的窗口前,钩子程序就先捕获该消息,亦即钩子函数先得到控制权。这时钩子函数即可以加工处理(改变)该消息,也可以不作处理而继续传递该消息,还可以强制结束消息的传递。这和前面我博客的窗口子类化都异曲同工,但是Hook可强大多了,我是这两天才开始看的,所以略知皮毛。

- 阅读剩余部分 -

windows下安装,配置gcc编译器

在Windows下使用gcc编译器:


1.首先介绍下MinGW


MinGW是指只用自由软件来生成纯粹的Win32可执行文件的编译环境,它是Minimalist GNU on Windows的略称。

  实际上 MinGW 并不是一个 单纯的C/C++ 编译器,而是一套 GNU 工具集合。除开 GCC 以外,MinGW 还包含有一些其他的 GNU 程序开发工具 (比如 gawk bison 等等)。
开发 MinGW 是为了那些不喜欢工作在 Linux(FreeBSD) 操作系统而留在 Windows 的人提供一套符合 GNU 的 GNU 工作环境。
所以,使用 MinGW 我们就可以像在 Linux 下一样使用 GNU 程序开发工具。
GCC 就是 MinGW 的核心所在,GCC 是一套支持众多计算机程序语言的编译系统,而且在语言标准的实现上是最接近于标准的。并且 GCC 几乎可以移植到目前所有可用的计算机平台。(我的电脑上就还装有 DevKitPro,里面包含 GCC 的 ARM(for GBA/DS/GP32) 和 MIPS(for PSP) 版本。)
GCC 本身不像 VC 那样拥有IDE 界面(在 Windows 上也存在 Dev C++ 之类的支持 MinGW 编译器的 IDE)。源代码编辑你可以选用任何你喜欢的文本编辑器(据说微软的开发人员包括 VC 的开发都不用 VC 所带的 IDE 编辑器,而是选用 GNU 的 VIM 编辑器)。然后使用 make 等工具来进行软件项目的编译、链接、打包乃至发布。而像 cvs(svn) 源代码版本控制工具可以让世界上任何一个角落的人都可以参与到软件项目中来。


2.下载MinGW


一种方法是到Sourceforge(http://sourceforge.net/project/showfiles.php?group_id=2435)下载一个MinGW-2.0.0-3.exe。

但是我配置的时候我电脑上安装了codeblocks,已经自带了MinGW。


3.环境变量的配置


在(系统属性-->高级-->环境变量-->系统变量 中)(以下目录都根据自己的电脑MinGW所在位置不同而改变)

a.在PATH的值中加入“C:Program FilesMinGWStudioMinGWbin”。这是寻找gcc编译器的路径。如果PATH中还有其他内容,需要用英文状态下分号进行分割

b.新建LIBRARY_PATH变量,在其值中加入“C:Program FilesMinGWStudioMinGWlib”。这是标准库存放的路径。

c.新建C_INCLUDE_PATH变量,在其值中加入“C:Program FilesMinGWStudioMinGWinclude”。这是Include查找头文件的路径。


4.验证gcc是否正常运行


在cmd控制台窗口下面,输入gcc -v。若已经成功安装好,会显示gcc的版本信息。

 

windows程序设计之窗口子类化

这几天都在家里,赶上了暑假,没啥事情可做,就做些小玩意。虽然都没什么技术含量,但自己毕竟是新手,做得不是很好,代码都得参考下别人的。委屈今天看到一个博客上面写的是关于SDK的窗口子类化,什么是窗口子类化,其实说得简单点就是有个多功能的窗口,你对它有绝对的控制权得意。举个例子好了,你自己写了一个软件,上面有个编辑框,在这里面只能输入“我是笨蛋”,(基本上没人会喜欢你的软件)客户要是想输入其他的,都输不进去。这就有一种思想,软件是我做的,我对它有绝对的控制权。


- 阅读剩余部分 -

windows程序设计之编辑框简介

今天碰到一个很无语的问题,创个编辑框创建了两个多小时,就是不知道哪里出问题。

后来我就索性新建一个最简单的工程进行测试,就创建一个窗口,然后中间加个长方形的编辑框(*^__^*)。

结果出丑了,编辑框是出来了,结果无法编辑,就连焦点都没法设置大哭

看代码:

- 阅读剩余部分 -

(转)线程中 CloseHandle()函数的使用

CloseHandle()函数的使用??

很多程序在创建线程都这样写的:
............
ThreadHandle = CreateThread(NULL,0,.....);
CloseHandel(ThreadHandle );
。。。。。
这不是刚好创建又关闭了吗?线程怎么运行呢?

================================================

Closing a thread handle does not terminate the associated thread. To remove a thread object, you must terminate the thread, then close all handles to the thread.

- 阅读剩余部分 -