随笔分类 -  VC文档

上一页 1 2 3 4 5 6 7 ··· 9 下一页
阻止全局钩子的加载
摘要:网上有一篇关于这个问题的文章,题目叫《防止全局钩子的侵入》,作者不祥。文中简单分析了一下钩子的原理,然后使用了微软的Detours库进行 API拦截。如果只是为了拦截一个函数,使用Detours好像有点儿浪费。本文不使用Detours库,直接对LoadLibraryExW函数进行拦截。先说一下全局钩子是怎么进入到我们的程序里来的。假如有个程序A安装了WH_GETMESSAGE的全局钩子,钩子函数在B.dll中,那么当其它程 序在调用GetMessage函数从自己的消息队列中取消息的时候,系统发现程序A安装了WH_GETMESSAGE的全局钩子,就会检查调用 GetMessage的进程是否加载了 阅读全文
posted @ 2011-03-31 02:04 °ι 、曲 终 阅读(784) 评论(0) 推荐(0)
一个简单的读写注册表实例
摘要:说明注册表是Windows重要组成部分,注册表记录了大量有关电脑软硬件的信息。注册表中的值通过其名称标识。值名称由与键名相同的字符组成。值本身可以是字符串、二进制数据或者是32位无符号值。在这里我们主要运用以下技巧:预定义的注册表键注册表包含了几个预定义键:HKEY_LOCAL_MACHINE 包含描述计算机及其配置的条目。其中包括关于处理器、系统主板、内存和已安装的软件和硬件的信息。 HKEY_CLASSES_ROOT 是与文档类型和 OLE\COM 相关的信息的支持键。这个键是 HKEY_LOCAL_MACHINE的从属键。 HKEY_USERS 用作默认用户首选设置,也作为单个用户的首选 阅读全文
posted @ 2011-03-31 02:04 °ι 、曲 终 阅读(284) 评论(0) 推荐(0)
干干净净杀死进程
摘要:要杀掉某个程序的进程,可以输入下面的命令便可以杀死其运行实例:tskill 程序名 但是我想在自己写的代码里实现tskill的功能该如何做呢?最安全的杀死进程的方法是向运行程序的主窗口发送WM_CLOSE消息。HWND hwnd = // 获得主窗口PostMessage(hwnd, WM_CLOSE, 0, 0); 发送此消息后,通常应该等待直到进程确实终止:HANDLE hp = OpenProcess(SYNCHRONIZE|PROCESS_TERMINATE,FALSE,pid);WaitForSingleObject(hp, 5000); // 等待5秒 当进程终止时,它发出状态信号 阅读全文
posted @ 2011-03-31 02:01 °ι 、曲 终 阅读(369) 评论(0) 推荐(0)
如何枚举系统当前进程
摘要:首先, 调用 CreateToolhelp32Snapshot() 获得当前运行进程的快照,这个函数返回包含正在运行进程的快照句柄。其原形是:HANDLE WINAPI CreateToolhelp32Snapshot(DWORD dwFlags,DWORD th32ProcessID);其中:dwFlags表示要包含在快照的内容为TH32CS_SNAPPROCESS表示在快照中包含进程列表;th32ProcessID是进程号,为0表示当前进程。返回值是一个句柄,如果没有进程正在运行,则返回INVALID_HANDLE_VALUE(可用GetLastError()获得),反之可用获取返回的进程 阅读全文
posted @ 2011-03-31 02:01 °ι 、曲 终 阅读(262) 评论(0) 推荐(0)
在单独线程中执行对象成员函数
摘要:问题的提出实际上所有线程都是用来处理C函数的,而不是C++类成员函数。标准库中提供一个API函数,这个函数以回调函数指针作为线程的执行代码并在单独的线程中 调用回调函数。问题是在这样的线程库中不能创建执行对象成员函数的线程;只能使用普通的函数。因此,下列代码是失败的:// 启动线程库函数的线程int thr_create (void (*pf)(), void* prm, thread_t* pth);#include "class1.h"int func (void *param ){thread_t t1;// 下列调用导致编译器错误: "Cannot con 阅读全文
posted @ 2011-03-31 02:00 °ι 、曲 终 阅读(465) 评论(0) 推荐(0)
实现程序互斥运行的几种方法
摘要:在WIN32下,实现程序互斥运行的方法有很多种,我简单分析以下几种不同的实现:在VC下的实现Visual C++ 是WIN32编程最主要也是最强大的编程工具这一,引用一名话来说VC就是“只有你想不到的,没有VC做不到的”。废话少说,下面看看用VC是如何这个功能。使用编译器来实现(使用MFC框架)在.cpp文件开头加上以下几行:#pragma data_seg("Shared") int volatile g_lAppInstance =0;#pragma data_seg()我们来看一下上面的内容:第一句 #pragma data_seg("Shared" 阅读全文
posted @ 2011-03-31 02:00 °ι 、曲 终 阅读(729) 评论(0) 推荐(0)
在Dll中创建对话框并调用
摘要:第一步创建一“MFC AppWizard (dll)”工程,接下来选择“Regular Dll using shared MFC DLL”,点击“Finish”。添加一对话框资源到工程中,从菜单中选择Insert->Resource,添加一“Dialog”,选择“New”,至此对话框已添加到DLL工程中。为对话框添加一新类,如:CTest,基类为CDialog。在MFCDLL.cpp中(因创建的工程为MFCDLL)添加接口函数:extern "C" __declspec(dllexport) void Show(){ AFX_MANAGE_STATE(AfxGetSt 阅读全文
posted @ 2011-03-31 01:56 °ι 、曲 终 阅读(283) 评论(0) 推荐(0)
将Lua嵌入到自己的程序中
摘要:什么是LuaLua是具有简单数据描述的扩展编程语言(动态解析语言)。它提供了非常好的面向对象编程, 函数式编程(functional programming),数据驱动式编程(data-driven programming), 它可以作为一个强大、轻量的脚本语言,供任何需要的程序使用。 Lua 以一个用 clean C 写成的库形式提供。(所谓 Clean C ,指的 ANSI C 和 C++ 中共通的一个子集)Lua例子(FOR 循环)for i=1,10 do -- the first program in every language io.write("Hello world 阅读全文
posted @ 2011-03-31 01:54 °ι 、曲 终 阅读(859) 评论(0) 推荐(0)
C++指针专题
摘要:数组的指针、指针数组以及指向指针的指针考虑数组的指针的时候我们要同时考虑类型和维数这两个属性。换一句话,就是说一个数组排除在其中存储的数值,那么可以用类型和维数来位置表示他的种类。一维数组在c和c++中数组的指针就是数组的起始地址(也就第一个元素的地址),而且标准文档规定数组名代表数组的地址(这是地址数值层面的数组表示)。例如:int a[10];int *p;p=&a[0]//和p=a是等价的。因为a是数组名,所以他是该数组的地址,同时因为第一个元素为a[0],那么&a[0]也代表了该数组的地址。但是我们是不是就说一个数组名 和该数组的第一个元素的&运算是一回事呢?在 阅读全文
posted @ 2011-03-31 01:52 °ι 、曲 终 阅读(272) 评论(0) 推荐(0)
图像与文字的合成
摘要:概述前几天要做一段程序,把文字和位图图像合成并保存为位图文件。但问了好久都没人给一个满意的答复,只好在黑暗中摸索,费了一番功夫,实现了图像与文字的合成,并且可用鼠标拖动文字。现在我把代码贴出,希望能给需要的朋友以帮助。关键函数int SetDIBits( HDC hdc, // 兼容DC的句柄 HBITMAP hbmp, // 兼容位图的句柄 UINT uStartScan, // 扫描起始行的编号 UINT cScanLines, // 扫描的行的数目 CONST VOID *lpvBits, // 位图缓冲区的指针,要求已经分配空间 CONST BITMAPINFO *lpbmi, // 阅读全文
posted @ 2011-03-31 01:49 °ι 、曲 终 阅读(273) 评论(0) 推荐(0)
透明位图的显示
摘要:摘要包含透明色的位图的绘制方法有多种,最简单的方法是调用现成的函数:TransparentBlt,也可以通过自己的代码实现类似 TransparentBlt的功能,实现过程也有两种形式,一种是事先做一张掩码位图,另一种是动态生成掩码位图。本文将介绍动态生成掩码位图绘制具有 透明区域位图的方法。TransparentBlt 函数的使用TransparentBlt 函数在Windows98/Windows2000以上版本运行,系统中需要包含 Msimg32.dll,使用时可以链接 Msimg32.lib。Windows98下的TransparentBlt会产生资源泄漏,所以不建议在WIN98下使用 阅读全文
posted @ 2011-03-31 01:48 °ι 、曲 终 阅读(245) 评论(0) 推荐(0)
位图的淡入淡出显示
摘要:我们经常在AboutBox中显示一幅关于公司或自己讯息的位图,有没有想过让这幅位图有更酷的效果?比如加上淡入淡出效果?只要有了这个CAlphaCtrl控件就可以轻松实现。CAlphaCtrl是从CStatic继承而来。使用时只要把CalphaCtrl加入窗体,然后调用LoadAlphaBitmap(UINT uID, int iTimer)函数就可以实现位图的淡入淡出。其中uID是位图的资源ID,iTimer是位图显示时间间隔,值愈小显示愈快。下面就来说一说CalphaCtrl是如何实现的。关键的一个实现函数是一个win32 API: AlphaBlend,此函数可以实现图像的透明显示,相关的 阅读全文
posted @ 2011-03-31 01:46 °ι 、曲 终 阅读(339) 评论(0) 推荐(0)
一个透明位图类的例子
摘要:个类可以插入到任何一个程序当中,它提供一个统一的接口,接口函数接收图象的资源索引号、长、宽3个参数。当然,你也可以加上一个父窗口的指针参数,用来决定该类对象Create行为,便于指定该图象代表的窗口应该依附在哪个父窗口之上。编写这个类需要熟悉对CRgn类的运用。如成员函数CombineRgn和SetWindowRgn,具体信息请查阅msdn。那么好,下面我们来一步步创建这个类。首先要准备一幅用来展示在UI上的图象,自己定义一种透明色,用该色来填充透明部分,这里要注意的是,透明色应该是该图象中颜色最少的色,还要注意的是透明和非透明的交界处一定要求清晰,不能存在过渡色。这里我使用的是RGB(255 阅读全文
posted @ 2011-03-31 01:44 °ι 、曲 终 阅读(266) 评论(0) 推荐(0)
VC实现自绘图形输出到bmp文件
摘要:实现方法要把文本和图形保存到位图文件,只要对掌握位图结构有一定的了解,一切都ok呢。先必须要创建内存设备环境,然后内存设备环境创建的DIB区域,别忘 了还要创建个CBitmap对象,CBitmap对象必须和DIB区域关联起来,把CBitmap对象选择到当前设备环境,然后在当前设备环境输出文本和 图形就可以了。具体实现代码如下void CTestSaveBmpView::SaveAsBmp(CString filename){ //定义图形大小 int iWidth = 800; int iHeight = 600; int iPixel = 16; //图形格式参数 LPBITMAPINFO 阅读全文
posted @ 2011-03-31 01:43 °ι 、曲 终 阅读(354) 评论(0) 推荐(0)
QQ 静态截图程序模拟实现
摘要:下载文件:http://files.cnblogs.com/rogee/QQ%E9%9D%99%E6%80%81%E6%88%AA%E5%9B%BE%E7%A8%8B%E5%BA%8F%E6%A8%A1%E6%8B%9F%E5%AE%9E%E7%8E%B0.rar看到QQ这样的截图实在忍心不住想,是怎以实现的?想了许久想到一个实现法子,下面就让我给大家展示一下,模拟QQ静态模拟截图,我写的代码比较乱, 是想到哪写到哪,我想肯实还有比这更简单的办法!!程序实现思路,程序是基于对话框,无标题栏,系统菜单,最小化框,最大化框,无边框....,程序初始 化时,把整个桌面屏幕截图,保存下来,然后把对话框 阅读全文
posted @ 2011-03-31 01:38 °ι 、曲 终 阅读(313) 评论(0) 推荐(0)
遍历文件夹并建成目录树
摘要:些日子,我在做程序中遇到这样一个问题,要用树型控件快速浏览指定文件夹中的文件,经过一番周折,终于做出来了,想到有些仁兄可能遇到和我相同的困难,所以将我的做法写出来,希望对大家有些帮助!基本原理是用了函数的递归调用,再加入参数跟踪。我在调试程序的时候,跟踪发现:程序只有在遍历完一个目录下所有子目录后,才返回同级的目录。这样便可以用参数的值来决定目录的层次。首先,在对话框上添加树型控件,选择Style中Has Buttons、Has Lines、Lines At Root。定义变量:HTREEITEM strRoot; //根目录HTREEITEM strHTFir; //第一层HTREEITEM 阅读全文
posted @ 2011-03-31 01:30 °ι 、曲 终 阅读(424) 评论(0) 推荐(0)
运用多线程技术实现文件的快速搜索
摘要:概述操作系统一般都提供了文件搜索的功能,但采用的是顺序搜索,搜索效率很底。而且按此法编程十分烦琐,在目录层次很多时,往往不好处理。本文采用多线程技术实现文件的快速搜索,代码量很少,执行效率极高。其基本思想其实很简单,就是找到一个目录就开辟一个线程,文件的话当然在线程内就处理了。这样实现了同步搜索,速度当然快起来了。VC具体实现搜索用到两个win32的两个函数HANDLE FindFirstFile(LPCTSTR lpFileName,LPWIN32_FIND_DATA lpFindFileData );BOOL FindNextFile( HANDLE hFindFile, LPWIN32_ 阅读全文
posted @ 2011-03-31 01:29 °ι 、曲 终 阅读(346) 评论(0) 推荐(0)
如何将多个文件捆绑成一个可执行文件
摘要:基本组成思想其实,其中的构成思想非常简单。建立一个新的二进制文件,先写入你的捆绑程序的数据和其文件长度,再写入你要捆绑的第一个文件的数据和其文 件长度,后再直接写入你要捆绑的第二个文件的数据和文件长度,最后就可直接写入你要捆绑的最后一个文件的数据(不需其文件长度)。最终文件被执行时, 也就是将上面的方法思想倒过来既可。下面实例仅告诉你如何实现二个文件的捆绑,至于多个文件的捆绑,读者只需略加改动既可,详情请细看下载后的实例代码。下面我来讲讲如何具体将其来实现。捆绑多个文件为一个可执行程序先得到自身捆绑程序的文件长度和第一个要捆绑文件的文件长度,枚举第一个要捆绑文件有无图标,有的话就用它做为最终生 阅读全文
posted @ 2011-03-31 01:28 °ι 、曲 终 阅读(689) 评论(0) 推荐(0)
用自删除dll实现应用程序的安装/卸载代码
摘要:译者按本文译自 Alex Tilles 在Windows Developer Network(2003 第12期)发表的一篇文章:“Writing Your Own Install and Uninstall Code”。这是一篇具有一定技术含量的文章,相信许多开发人员都需要本文介绍的技术,其中包括几个重要的技术点:Rundll32.exe 实用程序的使用方法;DLL 或 EXE 的自删除技术;嵌入资源的处理技巧;LZCOPY API 使用示范;compress.exe,expand.exe 使用说明;摘要我一直想写一个自己的安装和卸载代码,主要目的是想随心所欲地控制整个安装/卸载过程中 用户 阅读全文
posted @ 2011-03-31 01:27 °ι 、曲 终 阅读(618) 评论(0) 推荐(0)
如何将一个文件分割成多个小文件
摘要:你也许会遇到到这样一个问题?当你有一个较大的软件,而无法用一张软盘将其全部拷下时,你也许会想 到该将它分解开,分盘拷回去后,再将它们合并起来。现在的这种分割工具很多,你想自己动手做一个适合自己的分割工具么?下面就让我用以前用VC做的一个<袖珍文件分割器>的例程来告诉你吧!程序运行后界面如下:基本构成思想:文件分割的基本思想比我之前发表的另一篇文章《如何将多个文件合并为一个可执行程序》的 构成思想简单多了,它主要也分为分割文件和合并分割后的文件二大部分。分割文件,将原文件按指定分割大小进行等分,然后顺序读取其指定分割大小数据后到写 到各自的新建文件中。合并文件,将各分割后的文件顺序读 阅读全文
posted @ 2011-03-31 01:27 °ι 、曲 终 阅读(781) 评论(0) 推荐(0)

上一页 1 2 3 4 5 6 7 ··· 9 下一页