随笔分类 - VC++
摘要:MFC框架由于古老,其与模板的结合比ATL/WTL差远了,其中一大原因就是因为宏的大量使用。最近封装MFC窗口类(CWnd)时,实在不想机械性地使用虚函数机制了,就想试试通过模板的手法实现代码的复用性。真的动起手来,其实发现也没那么麻烦。
阅读全文
摘要:在VC中加载Flash动画,一种很方便的方式就是在IDE的类向导生成一个IShockwaveFlash接口的包装类。但小弟十分不喜欢VC的可视化向导,几乎很少用,总是喜欢直接拿代码说话。
下面写段播放Flash的简单代码:
阅读全文
摘要:一般Windows下的系统文件(夹)只让受限帐户读取而不让写入和修改。如果要开启写操作权限就需要手动修改文件(夹)的用户帐户安全权限(这操作当然要在管理员帐户下执行).
阅读全文
摘要:每次分配内存系统都会分配一个内存序列标志,通过_CrtIsMemoryBlock函数可以获取这个序列标志值以及分配的文件名和行号位置
阅读全文
摘要:内联挂钩API原理在于用JMP指令替换目标函数地址的前几个字节,当程序运行到这里就JMP到自己的函数中.需要注意的是自己的函数和目标函数的调用规范、参数、返回值都要一致以保持堆栈平衡.
阅读全文
摘要:利用全局钩子可以注入DLL到当前的所有进程,若要注入到特定的进程中可用CreateRemoteThread函数.
阅读全文
摘要:我以前用Spy++能轻易捕捉360软件界面,除了一些应用DHTML制作的窗体.昨天我再用Spy++捕捉的时候捕捉不到了,甚至连最外围的对话框都捕捉不到,显然是做了类似拦截API的处理.下面我也模拟一下这种效果,让自己的程序窗口不能被捕捉.
阅读全文
摘要:小弟之前有篇关于监控文件(夹)的文章,利用的是API函数ReadDirectoryChangesW,当时图方便啊,使用ReadDirectoryChangesW进行同步监控文件(夹),现在突然发现自己居然没有手段让运行阻塞的ReadDirectoryChangesW函数的线程正常地退出,继而导致很多资源无法释放,恼火了.无奈之下只好又写了异步的版本。思考再三,由于监控过程不存在可收缩性的考虑,也就没有使用完成端口模型,使用重叠I/O模型就足够了。
阅读全文
摘要:MFC类CAsyncMonikerFile可以用来从Internet上下载文件,其原理在于利用了COM对象Moniker.
阅读全文
摘要:每次分配、重新分配或释放内存时都会调用分配挂钩函数,这个挂钩函数可以通过_CrtSetAllocHook函数来设置.
阅读全文
摘要:在MFC开发环境中,当运行退出了,Visual Studio会在输出窗口提示是否有内存泄漏。也可以借助MFC类CMemoryState动态地检测并输出内存泄漏信息.
在非MFC框架中,需要借助CRT函数实现这些功能.
阅读全文
摘要://枚举所有桌面BOOL EnumDesktops( HWINSTA hwinsta, DESKTOPENUMPROC lpEnumFunc, LPARAM lParam);//打开获取用户输入的桌面窗口HDESK OpenInputDesktop( DWORD dwFlags, BOOL fInherit, ACCESS_MASK dwDesiredAccess );如:HDESK hOrigi...
阅读全文
摘要:Windows API经常需要回调函数,而在C++开发中面向对象当行其道,若能让C++类的成员函数成为回调函数,简直就是大善!
阅读全文
摘要:使用MFC开发,当程序退出时,Visual Studio会在输出窗口提供关于内存泄漏信息的提示,但也仅仅是在退出后才给出提示,如果想在运行过程中在输出窗口看到关于当前内存泄漏的信息,就需要借助MFC类CMemoryState.
阅读全文
摘要:__FILE__和__LINE__对于我们调试程序非常有用,__FILE__定义为字符串表示,__LINE__定义为数字表示,编写一函数封装一下,用%s和%d格式化为字符串是相当地简单,但是如果定义一个宏来表示就有点麻烦了.借鉴《Windows核心编程》里的例子,先来一实验:#pragma message(__FILE__"("#__LINE__"):字符串!")可惜编译不过,编译器不接受"#"符...
阅读全文
摘要:用代码模拟键盘鼠标操作,主要用到keybd_event/mouse_event或者SendInput API函数.
阅读全文
摘要:用SetWindowsHookEx可以截获Windows中的消息,然而对于更高级一点的Windows事件(如:弹出菜单事件、ATL+TAB切换事件等等),可以用SetWinEventHook来截获.
阅读全文
摘要:字符串的ASCII和UNICODE之间的转换很常用,Win32提供了API函数MultiByteToWideChar和WideCharToMultiByte来提供这种功能。但凡Win32的API,参数调用都不会少,因此使用起来也就觉得有点繁琐。ATL3中提供了字符串转换宏,如T2W、A2T等,不过使用它们需要借助本地变量,因此在使用之前需要声明USES_CONVERSION宏来声明本地变量.而且还有个很大的缺陷:转换宏总是使用栈存储,它们在运行时调用_alloca在本地栈上分配额外的空间,如果在函数中循环地进行转换,很可能因为栈空间用尽而崩溃,因为栈空间在函数退出后才能释放。还有个很严重的问题:若在C++ catch块中使用转换宏,_alloca调用会搅乱栈上的异常跟踪信息而使程序崩溃。
阅读全文

浙公网安备 33010602011771号