摘要:TL 的思路是,每次在系统调用 WndProc 的时候,让它鬼使神差地先走到我们的另一处代码,让我们有机会修改堆栈中的 hWnd。这处代码可能是类似这样的:__asm{ mov dword ptr [esp+4], pThis ;调用 WndProc 时,堆栈结构为:RetAddr, hWnd, message, wParam, lParam, ... 故 [esp+4] jmp WndProc}由于 pThis 和 WndProc 需要被事先修改(但又无法在编译前定好),所以我们需要运行的时候去修改这部分代码。先弄一个小程序探测下这两行语句的机器码:LRESULT CALLBACK WndP
阅读全文
摘要:对界面进行封装,一般都是一个窗口一个类,比如实现一个最基本的窗口类CMyWnd,你一定会把窗口过程作为这个类的成员函数,但是使用WINAPI创建窗口时必须注册类WNDCLASS,里面有个成员数据lpfnWndProc需要WNDPROC的函数指针,一般想法就是把窗口类的消息处理函数指针传过去,使用静态类成员函数,或者全局的消息处理函数,否则无法转换到WNDPROC。静态消息处理函数:缺点,消息处理函数无法获取到窗口对象的窗口句柄。全局消息处理函数:无法得到窗口类对象指针。一种解决方法是用窗口列表,开一个结构数组,窗口类对象创建窗口的时候把窗口HWND和this指针放入数组,全局消息处理函数遍历数
阅读全文
摘要:原文:http://www.coderess.com/?p=43(我的另外一个博客)本文主要包括以下内容: 1、简单理解Windows的消息 2、一段简单的Win32消息循环程序 3、进一步深入理解Windows消息 4、队列消息和非队列消息 5、WM_COMMAND和WM_NOTIFY 1、简单理解Windows的消息 消息,就是指Windows发出的一个通知,告诉应用程序某个事情发生了。 举个例子来说,鼠标单击某应用程序的一个按钮。这时,Windows(操作系统)给应用程序发送这个消息,通知应用程序该按钮被点击,应用程序将进行相应反应。 消息一般用一个32位的数来标识,这个数唯一地标识这个
阅读全文
摘要:下列简要介绍关于程序自启动的几个操作注册表常用API函数: 以下着重说明RegCreateKeyEx的几个重要参数:__in HKEY hKey 指定给父键句柄或者根目录 :HKEY_CLASSES_ROOT HKEY_CURRENT_CONFIG HKEY_CURRENT_USER HKEY_LOCAL_MACHINE HKEY_USERS __in LPCTSTR lpSubK...
阅读全文
摘要:1、问题的提出: 在Windows3.x中,不存在WM_NOTIFY消息,控制子窗口的通知消息同菜单的命令消息及加速键消息一样,均使用WM_COMMAND来发送,此时,根据WM_COMMAND消息传递的做法,可知道含有如下的传递结构: wParam high-order : Notify Code :(如TTN_NEEDTEXT) wParam low-order : ControlID lPar...
阅读全文
摘要:本文涉及 : char跟CString转换、string跟char转换、string 跟CString转换 还有BSTR转换成char*、char*转换成BSTR、CString转换成BSTR、BSTR转换成CString的我们经常写程序比如文件路径需要用到一般都是char*类型的变量作为参数传递,有些函数参数却是string或者CString,造成了经常需要转换,在这里我总结了一下:char跟C...
阅读全文
摘要:1.ANSIC与Unicode字符 两者区别就不多少了,一个单字节一个双字节,Unicode可以表示更多的字符,适合诸如汉字的文字系统. 定义使用宽字符:2.声明Unicode字符与及字符串方法: _T()宏需要包含tchar.h[代码]WinNt.h定义了一下宏:[代码]可以利用以上宏来定义:在Visual Studio新建工程,一般都开启了Unicode选项,直接就可以定义宽字符。[代码]3....
阅读全文