All Stories

关于shellapi.h/shlobj.h头文件和宏定义冲突

昨天在给LLYF ProcessHelper添加TrayIcon功能,代码是从LLYF Spy 那部分完全Paste 过来的,结果编译的时候说NIF_INFO没有定义,还有szInfo、uTimeout这些凡是说要IE Version5.0 以上支持部分都说没有定义,可是我在LLYF Spy 里好好的呀,还以为是XP 的问题,马上退到2000 下,结果一样。于是我打开ShellApi.h看,在那个函数和结果定义前加上#define _WIN32_IE 0x0600,编译是勉强通过了,但是功能没有实现,并没有Balloon ToolTip 出现。后来在看Project Options,发现有个NO_WIN32_LEAN_AND_MEAN定义,是因为有一个函数里调用了SHBrowseForFolder,要加shlobj.h 这个头文件,于是意识到可能和这个有关。搜索了一下,我的程序里并没有调用到这个函数(我晕),于是把这个函数体全部注释掉,把这个头文件和宏也删了,编译和运行都正常了。

关于OutputDebugString 的模拟

从这篇文章中可以知道,通过简单的几步设置,便可模拟OutputDebugString,可以用下面的代码描述:

使用OutputDebugString 调试窗口程序

学编程是从DOS下开始的,用了一定时间的TC2.0,使得养成了用printf 输出变量值进行调试的坏习惯。到了写窗口程序时,就遇到了些麻烦。 窗口程序没有方便的进行控制台输出的方法(其实是我不知道),于是,用了几年的用MessageBox 进行输出的调试手段,太麻烦了,因为MessageBox 会打断程序流程,还要人为手动让它继续运行,这是最让人恼火的。

LLYF Spy WIP && Others

今天看了一下Shotgun 那个端口进程关联的代码,那是在Win2000 下可以运行的,虽然得不到(System)8#进程的信息,但可以在普通账号下运行。到XP 下有点小问题,只是因为2000 和XP 对句柄类型表示的枚举值不同,2000下是0x1A,而XP是经0x1C,改了就可以像2000下运行了。

LLYF SocketCapture wip

这是一个用于拦截WinSock API 的程序,主要的目的并不是为了截获数据包,而是为了能从第三方角度方便地观察二进制程序调用WinSock API 的情况,最直接最原始一点的想法,是为了能比较方便地调试自己写的Windows 网络应用程序。

多系统共享Delphi

完成多系统共享BCB6之后,我开始尝试多系统共享Delphi 7 Studio Enterprise (简称D7)和Delphi 2005 Studio (简称D7)。

多系统共享BCB6

同一个硬盘上装了多系统,原来一直用Win2000 来写程序,在Win2000 下装了Borland C++ Builder 6,还有一些其它的编程工具,每次写完一个完整点的程序,在Win2000下运行正常后,还要跑到WinXP 下试试,于是想要有时候能在WinXP下也运行BCB6。不想再装一次BCB了,主要是因为光驱坏了,硬盘上也没有BCB6 的光盘镜像,所以就试试能否共享原来安装在Win2000 下的那份BCB6。经试验成功:

LLYFSpy wip && LLYF DebugCapture

今天给LLYFSpy加了进程信息查看功能,可以查看当前进程所有模块信息,内存信息,文件映射,所有进程列表,服务列表,以及设备驱动程序列表,其实就是把原来LLYF ProcessHelper 里的代码搬了过来。虽说没有写新的代码,但我想这样可以给我组织程序结构有些启发。

LLYF CaptureHelper && Dev-Cpp

前天花了一天时间用BCB 做了个MDI界面的抓图程序,当然功能非常简单,连DX的图都不能抓,但不知道怎么的,注册热键的时候有问题,郁闷。还有就是MDI 的我用TabControl 来切换页面,想方便一点,还会发现,在切换时,桌面会刷新。晕得很。