应用程序-usermode
文章平均质量分 70
Blue_Dream_
高级程序员,喜爱底层编程并从事相关软件开发,编程工具 VS.NET C/C ,ASM, Delphi
展开
-
wchar[] 与 char[] 转换
从网上找了 将近一个小时没有找到合适的传换类型代码。自己 10 分钟就写好了,有点没自信了。懒啦!! 现在帖出来和大家分享吧, 节省大家的时间。extern "C"{void __declspec(dllexport) W2C(WCHAR *pwstr, CHAR * cstr){ char *pwsSrc = (char *)pwstr; ULONG le原创 2007-08-13 17:39:00 · 1765 阅读 · 0 评论 -
利用 CTreeCtrl 创建 Tab 页效果
首先我们要新建 1 个项目, 在主窗口上添加 Tree 控件。 在项目中, 添加 2 个新窗口 ID 分别为: IDD_DIALOG1, IDD_DIALOG2 OnInitDialog 消息响应函数中 添加下面的代码: m_treePages[0]=new Cdialog1; m_treePages[1]=new Cdialog2; //----------------------原创 2008-01-04 16:15:00 · 1109 阅读 · 0 评论 -
快速修改 Delphi 资源
快速修改 Delphi 资源作者: 刘亮亮 最近需要在没有源代码的情况下对delphi 的软件界面最较大调整,翻看了一些资料,没有找到合适方法,经过了自己一天的试验摸索终于找到了一个快捷的方法.下面总结下来.需要的工具: eXeScope, Delphi 开发工具 我们以一个共享软件 TCP端口映射工具 来试验说明. TCP 端口映射工具图标如下:原创 2008-01-08 08:48:00 · 5910 阅读 · 2 评论 -
杂记
2008-05-22DLL 自己的消息循环(win32 DLL):在DLL中,通过CreateWindow创建窗口。就利用该窗口的消息循环作为DLL的消息循环。通过map把消息ID和消息响应函数关联起来,这个工作在程序初始化的时候完成(还没有进行消息循环)。关联需要处理的消息(包括系统消息和自定义消息)后, 再创建窗口。 该窗口的处理函数中,通过消息ID在map中查找该消息的处理函数,如果原创 2008-05-22 10:07:00 · 849 阅读 · 0 评论 -
加载多种图片格式(gif,jpg,png.bmp)
从程序外部直接加载(png, jif, bmp,jpg 等)多种文件格式的文件并显示HBITMAP LoadAllPic(CString strFileName){ IPicture* p=NULL; IStream* s=NULL; HGLOBAL hG; void* pp; FILE* fp; fp = fopen(strFileName,"rb");//打开转载 2008-07-30 17:40:00 · 1273 阅读 · 0 评论 -
mutilmap 的使用
multimap lObjMultiMap; typedef multimap::iterator MULTIMAP_ITERA; lObjMultiMap.insert( pair(0,10) ); //添加元素 lObjMultiMap.insert( pair(0,1) ); lObjMultiMap.insert( pair(0,4) ); //key 为0的元素有3 个数值原创 2008-05-23 17:39:00 · 2485 阅读 · 2 评论 -
BeginPaint 和 GetDC 的区别
第一种情况显示出来的字很正常。case WM_PAINT: gdc = BeginPaint (hwnd, &ps); TextOut (gdc, 0, 0, s, strlen (s)); EndPaint (hwnd, &ps);break;第二种情况显示的字不停闪烁。case WM_PAINT: gdc = GetDC (hwnd)原创 2009-01-28 19:53:00 · 1749 阅读 · 0 评论 -
简单实现菜单自绘
简单对下面3 个消息处理 就可实现菜单自绘, 其他控件类似; //WM_DRAWITEM:绘制菜单的样式//WM_MEASUREITEM:指定要绘制菜单的大小//WM_INITMENU:把框架菜单全部改成带MF_OWNERDRAW标志void CTestRgnDlg::OnInitMenu(CMenu* pMenu){ //CDialog::OnInitMenu(pMenu);原创 2009-02-03 18:41:00 · 2620 阅读 · 0 评论 -
空间焦点事件通知
失去焦点通知代码:Edit #define ON_EN_SETFOCUS(id, memberFxn) / ON_CONTROL(EN_SETFOCUS, id, memberFxn)#define ON_EN_KILLFOCUS(id, memberFxn) / ON_CONTROL(EN_KILLFOCUS, id, memberFxn) Button原创 2009-04-28 14:18:00 · 863 阅读 · 0 评论 -
自绘 列表控件
今天想作一个通用的列表控件, 最好是可以给调用者提供一些,在指定的subitem 上添加各种控件,比如 进度条,编辑框... 下面就开始着手做: 第一步: 设置列表的 onwer draw fixed 属性, 然后重载了 virtual void CListCtrl:: DrawItem(LPDRAWITEMSTRUCT lpDrawItemStruct);(1)原创 2009-09-05 14:34:00 · 1682 阅读 · 0 评论 -
如何在VS2005中使用GDI+
Visual Studio 2005本身带有GDI+的所有库函数,所以不用像在VC++6.0里那样,需要将GDI+的头文件和lib文件手工加入到工程中。 但在使用GDI+之前需要首先完成以下几步: 1.在stdafx.h文件中加入以下几句话: #include //将GDI+头文件加入到工程中 #pragma comment(lib, "gdiplus.lib") //将GDI+的lib文原创 2009-09-04 10:48:00 · 1015 阅读 · 0 评论 -
自绘 tab 控件
基本思路是 处理OnPaint()消息。在OnPaint中绘制客户端的区域,然后绘制每个Item。由于标准的 SysTabContrl32 中, tab 选项卡和下面的区域都属于 TabContrl的ClientRect. 需要对每选项卡单独绘制。下面是处理OnPaint的代码: case WM_PAINT: { CRect lRect; lpTabC原创 2009-09-06 16:00:00 · 2853 阅读 · 3 评论 -
如何画透明位图
{ //必须是全局的,这样使位图的混合过程alpha设置相同 static BLENDFUNCTION bf; CPaintDC ldc(this); CDC MemDC; CBitmap Bitmap1, Bitmap2; MemDC.CreateCompatibleDC( &ldc ); Bitmap1.LoadB原创 2009-09-09 16:31:00 · 861 阅读 · 1 评论 -
自绘滚动条代码分析
标准的滚动条 是不能通过子类化来制定的, 如果想得到漂亮的滚动条,需要自己动手画。 要为CListCtrl 添加滚动条,大概思路如下: (1) 使 CListCtrl 标准的滚动条不可用(2) 手动定位 H 和 V 滚动条的位置( 不属于 ClistCtrl 的子控件 )(3) 需要处理, 鼠标点击 左右箭头, 滚动一行 鼠标点击 滑块空白处,转载 2009-09-13 12:35:00 · 2358 阅读 · 0 评论 -
GradientFill 画渐变矩形或3角形
#pragma comment (lib, "Msimg32")int _tmain(int argc, _TCHAR* argv[]){HDC lWndDC= GetWindowDC(NULL);RECT lrtRect;lrtRect.left = 0;lrtRect.top = 0;lrtRect.right = 500;lrtRect.bottom = 5原创 2009-12-11 15:58:00 · 1675 阅读 · 0 评论 -
绘制控件位图背景--需要注意的问题
绘制控件位图背景,在控件存在滚动条的情形下,需要格外的主意: 滚动条使控件窗口滚动了,当前DC的原点的也滚动了, 必须考虑DC滚动带来的偏差,否则 如果始终把一个位图从DC的(0,0)点绘制,那么位图会变得乱七八糟。 下面的代码是在 OnPaint 中考虑了滚动条带来的影响 实例代码:滚动条的位置 就是 窗口偏移的大小。void VividTree::OnPain原创 2009-12-11 20:57:00 · 811 阅读 · 0 评论 -
滚动条 实现的细节代码 SCROLLINFO
今天分析了以前的一段自绘 滚动条的代码, 终于明白了滚动条的细节。 对于Edit 来说 SCROLLINFO si1; si1.nMin:0, si1.nMax:14, si1.nPage:6, si1.nPos:9, si1.nTrackPos:9 例如上面信息:si1.nMax - si1.nMin + 1 代表编辑框中文字的总行数 si1.nPage:6编辑框一页可以容纳的行数(在不足一显示页时为当前页中的行数),原创 2010-06-01 13:11:00 · 3476 阅读 · 2 评论 -
CListCTrl 使用技巧--补充
CListCTrl 使用技巧--补充listctrl内容进行大数据量更新时,避免闪烁 m_list.SetRedraw(FALSE); //更新内容 m_list.SetRedraw(TRUE); m_list.Invalidate(); m_list.UpdateWindow(); 或者参考 http://msdn.microsoft.原创 2008-01-03 10:34:00 · 1175 阅读 · 0 评论 -
ListCtrl 技巧集
1. ListCtrl 风格 LVS_ICON: 为每个item显示大图标 LVS_SMALLICON: 为每个item显示小图标 LVS_LIST: 显示一列带有小图标的item LVS_REPORT: 显示item详细资料 直观的理解:windows资源管理器,“查看”标签下的“大图标,小图标,列表,详细资料”----------原创 2008-01-02 09:37:00 · 1627 阅读 · 0 评论 -
regedit 命令行参数
regedit 的命令行参数filename 导入 .reg 文件进注册表/s 导入 .reg 文件进注册表(安静模式)/e 导出注册表文件 例:regedit /e filename.reg HKEY_LOCAL_MACH原创 2007-09-20 13:49:00 · 11668 阅读 · 1 评论 -
内存映射文件
内存映射文件 内存映射文件的概念:内存映射文件提供了一组独立的函数,使应用程序能够通过内存指针像访问内存一样访问磁盘上的文件。通过内存映射文件函数可以将磁盘上的文件全部或者部分映射到进程的虚拟地址空间的某个位置。一旦完成映射,对磁盘文件的访问就可以像访问内存文件一样便捷。 使用内存映射文件的好处:a系统使用内存映射文件,以便加载和执行.exe和DLL文件。这可以大大节省原创 2008-01-24 10:02:00 · 2558 阅读 · 0 评论 -
Win32串口编程
在工业控制中,工控机(一般都基于Windows平台)经常需要与智能仪表通过串口进行通信。串口通信方便易行,应用广泛。一般情况下,工控机和各智能仪表通过 RS485 总线进行通信。RS485的通信方式是半双工的,只能由作为主节点的工控 PC 机依次轮询网络上的各智能控制单元子节点。每次通信都是由PC机通过串口向智能控制单元发布命令,智能控制单元在接收到正确的命令后作出应答。 在Win32下,转载 2008-02-01 17:37:00 · 1011 阅读 · 0 评论 -
根据位图创建区域Rgn--VC
界面编程// 根据位图文件 创建 区域 HRGN BitmapToRegion (HBITMAP hBmp, COLORREF cTransparentColor = 0, COLORREF cTolerance = 0x101010)...{ HRGN hRgn = NULL; if (hBmp) ...{ // Create a memory原创 2007-11-22 13:07:00 · 4523 阅读 · 1 评论 -
拦截指定进程的API(修改+收藏)
截获API是个很有用的东西,比如你想分析一下别人的程序是怎样工作的。这里我介绍一下一种我自己试验通过的方法。 首先,我们必须设法把自己的代码放到目标程序的进程空间里去。Windows Hook 可以帮我们实现这一点。SetWindowsHookEx的声明如下:HHOOK SetWindowsHookEx( int idHook, // hook type HOOKPROC lpfn原创 2008-02-14 15:46:00 · 2530 阅读 · 0 评论 -
对于HOOK函数的一点认识 (收藏)
一、序言对大多数的Windows开发者来说,如何在Win32系统中对API函数的调用进行拦截一直是项极富挑战性的课题,因为这将是对你所掌握的计算机知识较为全面的考验,尤其是一些在如今使用RAD进行软件开发时并不常用的知识,这包括了操作系统原理、汇编语言甚至是关于机器指令代码的(听上去真是有点恐怖,不过这是事实)。当前广泛使用的Windows操作系统中,像Win 9x和Win NT转载 2008-02-14 16:26:00 · 1806 阅读 · 2 评论 -
VC 操作 XML 类
#ifndef _CXML_h_#define _CXML_h_#include #import // 引入 OLE 类型库/****************************************************************************/// XML 操作类// // 已有操作:// (1) 添加树的根节点// (2) 添加子节点//原创 2007-12-05 12:10:00 · 1396 阅读 · 0 评论 -
得到本机所有 IP 地址
最近由于需要做一个穿透网吧管理软件对交换机和路由器限制功能。 我给本机设置了 10 个IP地址,用于接收硬件传来的数据。我需要得到本机所有的 IP 地址. 现在整理一下,已备后用。bool GetLocalALL_IPAddress( CStringArray & strArrayIP ){ CHAR szHostName[100]; struct addrinfo *r原创 2007-12-08 15:30:00 · 2179 阅读 · 0 评论 -
原来自动启动程序可以这样做?
原来自动启动程序可以这样做?(1) 映像劫持:机子中了病毒 MsSvcHost64.exe , 该病毒利用了映像劫持. 后来装了杀毒软件把 MsSvcHost64.exe 删除后出现了 ctfcom.exe 不能启动的情况,检查后才发现中招了. 这里的 ctfmon.exe 是自动启动,从而病毒自动运行。作用是: 当运行 ctfmon.exe 时, MsSvcHost64.exe 总原创 2007-12-13 09:01:00 · 1427 阅读 · 0 评论 -
汇编技巧 1
汇编技巧 1技巧1: 得到当前指令地址,花指令添加 { __asm { call get_next_addr ; 得到 下一条 jmp eax 地址, 保存在 eax 中 jmp eax ; 本地跳转 , 死循环, 等待改正为 0x90,0x90 nop mov eax, 0x1 jmp Quit __em原创 2007-12-13 09:15:00 · 1611 阅读 · 0 评论 -
进程注入 1
这段代码启动 iexplorer.exe 进程,将本身 EXE 的 image 数据写入 iexplorer.exe 地址空间中. 可能出现的问题是 如果本身 EXE 加载了其它 DLL 那么将会应为库缺失而执行出错. 应该是本身 EXE 的引用API 全部用 LoadLibrary,GetProcAddress 来得到。系统只会为每个 Image File 默认加载几个系统 DLL, 例如 k原创 2007-12-11 08:50:00 · 1070 阅读 · 0 评论 -
VC Skills
直接加载外部 bmp, ico, cur CXXX::OnPaint(){ CPaintDC dc(this); CDC dcMem; CBitmap Bitmap ; HBITMAP hBitmap ; CRect rect ; GetClientRect( &rect ) ; // 加载外部文件 hBitmap = (HBITMAP)::LoadImage(0, _T("D:原创 2007-12-12 16:10:00 · 1338 阅读 · 0 评论 -
VC Skills 4
直接读取硬盘的指定扇区: (1)用汇编; (2)直接用CreateFile("//./PHYSICALDRIVE0", ...)打开物理磁盘设备即可(物理磁盘设备都是从0开始排号的,0表示第一块硬盘,1表示第二块硬盘....),这样用SetFilePointer可以随意读取硬盘上任何位置的东西!至于扇区嘛,一般都是512字节为1扇区的,自己换算就是了~ 这里有更多内容原创 2007-12-25 10:38:00 · 1483 阅读 · 0 评论 -
VC skills 5
采用 ATL 修改桌面背景BOOL SetWallpaper(CString &strPicFile, DWORD dwstyle) { HRESULT hr; CComPtr pIAD ; // 智能指针, 自动释放 // 创建接口的实例 hr = CoCreateInstance ( CLSID_ActiveDesktop, NUL原创 2007-12-25 16:06:00 · 939 阅读 · 0 评论 -
VC Skills 2
1 在VC下执行DOS命令 a. system("md c://12"); b. WinExec("Cmd.exe /C md c://12", SW_HIDE); c. ShellExecute ShellExecute(NULL,"open","d://WINDOWS//system32//cmd.exe","/c md d://zzz","",SW_SHOW); d. C原创 2007-12-24 17:05:00 · 1863 阅读 · 0 评论 -
VC Skills 3
检查指定文件夹是否存在:PathIsDirectory()方法一:检查给定路径是否根目录:BOOL PathIsRoot(LPCTSTR pPath);说明:Returns TRUE for paths such as “/”, “ X:/”, “// server/ share”, or "// server/".Paths such as "../path2" will return FALS原创 2007-12-25 09:29:00 · 2274 阅读 · 0 评论 -
VC宏定义 ## 说明
在分析代码文件时经常见到下面的宏定义:例1:#define __CRT_WIDE(_String) L##_String 举例说明: wprintf( __CRT_WIDE("Hello world") ); 预处理后是 wprintf( L"Hello World" );如果把 ## 去掉 #define __CRT_WIDE(_String) L_String __CR原创 2008-01-02 09:12:00 · 3350 阅读 · 0 评论 -
VC设置字符间距
用到了一个结构体和一个函数:LOGFONT和SetTextCharacterEXtra,但是LOGFONT好像也可以不需要特别的进行使用来使SetTextCharacterExtra起作用。SetTextCharacter函数:This function sets the intercharacter spacing. Intercharacter spacing is added to each character, including break characters, when the sys原创 2010-12-15 15:23:00 · 4564 阅读 · 0 评论