摘要:
前言一日,看见我妈正在用电脑练习打字,频频低头看键盘,我想:要是键盘能发音的话,不就可以方便她养成"盲打"的好习惯吗?光想不做可不行,开始行动按键能发音,其关键就是让程序能够知道当前键盘上是哪个键被按下,并播放相应的声音,自己的程序当然不在话下,那么其它程序当前按下哪个键如何得知呢?利用键盘钩子便可以很好地解决。挂钩(HOOK)的基本原理WINDOWS 调用挂接的回调函数时首先会调用位于函数链首的函数,我们只要将自己的回调函数置于链首,该回调函数就会首先被调用。那么如何将我们自己的回调函数置于函 数链的链首呢?函数SetWindowsHookEx()实现的就是该功能。我们首 阅读全文
posted @ 2011-03-31 02:04
°ι 、曲 终
阅读(321)
评论(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
°ι 、曲 终
阅读(374)
评论(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
°ι 、曲 终
阅读(265)
评论(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
°ι 、曲 终
阅读(468)
评论(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
°ι 、曲 终
阅读(737)
评论(0)
推荐(0)
摘要:
第一步创建一“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
°ι 、曲 终
阅读(285)
评论(0)
推荐(0)
摘要:
什么是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
°ι 、曲 终
阅读(861)
评论(0)
推荐(0)
摘要:
数组的指针、指针数组以及指向指针的指针考虑数组的指针的时候我们要同时考虑类型和维数这两个属性。换一句话,就是说一个数组排除在其中存储的数值,那么可以用类型和维数来位置表示他的种类。一维数组在c和c++中数组的指针就是数组的起始地址(也就第一个元素的地址),而且标准文档规定数组名代表数组的地址(这是地址数值层面的数组表示)。例如:int a[10];int *p;p=&a[0]//和p=a是等价的。因为a是数组名,所以他是该数组的地址,同时因为第一个元素为a[0],那么&a[0]也代表了该数组的地址。但是我们是不是就说一个数组名 和该数组的第一个元素的&运算是一回事呢?在 阅读全文
posted @ 2011-03-31 01:52
°ι 、曲 终
阅读(273)
评论(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
°ι 、曲 终
阅读(276)
评论(0)
推荐(0)
摘要:
摘要包含透明色的位图的绘制方法有多种,最简单的方法是调用现成的函数:TransparentBlt,也可以通过自己的代码实现类似 TransparentBlt的功能,实现过程也有两种形式,一种是事先做一张掩码位图,另一种是动态生成掩码位图。本文将介绍动态生成掩码位图绘制具有 透明区域位图的方法。TransparentBlt 函数的使用TransparentBlt 函数在Windows98/Windows2000以上版本运行,系统中需要包含 Msimg32.dll,使用时可以链接 Msimg32.lib。Windows98下的TransparentBlt会产生资源泄漏,所以不建议在WIN98下使用 阅读全文
posted @ 2011-03-31 01:48
°ι 、曲 终
阅读(245)
评论(0)
推荐(0)
浙公网安备 33010602011771号