博文

VC修改系统时间代码(2010-11-15 14:55:00)

摘要:COleDateTime tm; // 
SYSTEMTIME st;
CString strTime; //此处的时间格式可以参考MSDN关于ParserDateTime的参数说明 // year, month, day , hour, minute, second为年月日 时分秒(int型)
strTime.Format(_T("%d-%d-%d %d:%d:%d"),  year,
month,
day,
hour,
minute,
second
); tm.ParseDateTime(strTime); //转换为COleDtaTime时间
tm.GetAsSystemTime(st); // 获取SYSTEMTIME时间
SetLocalTime(&st);//设置系统时间......

阅读全文(6763) | 评论:0

VC动态自定义桌面背景(关键代码)(2010-11-14 11:27:00)

摘要:// VS2005 //head file #include <wininet.h>
#include<shlobj.h>   // define IActiveDesktop* m_pADesktop;   /////////////////////////////////// // init com env HRESULT hr;
CoInitialize(NULL); m_pADesktop = NULL;
hr = CoCreateInstance(CLSID_ActiveDesktop, NULL, CLSCTX_INPROC_SERVER, IID_IActiveDesktop, (void**)&m_pADesktop); if (FAILED(hr))
{
         return FALSE; }   CstringArray m_strArr; /// 图片路径 CString strPath; for(int i=0; i<10; ++i) {         strPath.Format(_T("%d.bmp"), i); // 0.bmp, 1.bmp  and so on, for test         m_str.Add(strPath); }   SetTimer(1, 5000, NULL); //每5s更换一次桌布 ////////////////////////////////////////////////////////////   // /// key code   //// HRESULT hr; // for test,在定时器中,间隔指定时间,设置桌布 OnTimer(UINT_PTR nIDEvent) static int index =......

阅读全文(3013) | 评论:0

微软一站式示例代码库(2010-10-23 12:51:00)

摘要:地址: http://topic.csdn.net/u/20101021/23/F97F8DA2-9237-4BA4-B750-DD8A01CDB58A.html 微软一站式示例代码库,速学速用,效率倍增  

  当今程序开发市场上缺乏统一集中的实例代码,来展现频繁使用的编程场景,而这正是大量微软客户非常需要的。在过去的一年里,活跃在开发技术社区里的微软技术支持工程师听到了开发人员的苦衷,完全自发创办了一个一站式的示例代码库:All-In-One Code Framework。该项目通过微软CodePlex 开源平台免费提供给全球开发人员。项目中已包含300多个实例代码,内容覆盖几乎所有的微软开发技术,并且已惠及全球超过100000开发人员。项目中每一个示例都经微软CSS工程师精心设计、筛选、编排和文档化,从而演示那些经常被客户问到、或被测试人员测试到的编程场景。今年一月,All-In- One Code Framework甚至在CodePlex站点上13,500个开源项目中跻身前20!  
   

  Code Framework收到来自于客户、MVP、微软产品组、合作伙伴等多方面的良好反馈。  
   

  比如:  
   

  “我很支持这样的项目,它绝对是传播微软技术的一个优良渠道。微软的技术虽然运用广泛,但是很难找到资料介绍实现和使用细节。这个项目很好地弥补了这点。”  
   

  “这些代码示例比书还要有价值!”  
   

  “我仔细研究了这个项目,你们的这个项目真是太令人吃惊了!我经常会面对纷繁复杂的小项目。我在处理这些项目的时候绝对会以你们的示例代码库作为出发点。非常感谢!”  
   
......

阅读全文(1547) | 评论:0

开发BHO插件(2010-10-21 17:16:00)

摘要: 开发BHO插件 正文
在Windows操作系统上,我们最常见的浏览器有两种:文件浏览器(exploer.exe,应用于文件系统)和Internet浏览器(iexplore.exe,应用于互联网资源)。由于这两个浏览器功能强大,而且又与Windows操作系统捆绑销售,最终也就成为了浏览器的标准。但有时候,为了给浏览器加入一些新的特性,我们往往会重新设计一个自己的浏览器。新的浏览器模仿标准浏览器的大部分功能,同时加入新特性。这种做法最直观,但实际上也是相对于微软的重复劳动,且工作量比较大。其实,使用BHO插件,一切都变得很简单。

BHO(Browser Help Objects),是实现了特定接口的COM组件。开发好的BHO插件在注册表特定的位置注册好后,每当微软的浏览器启动,BHO实例就会被创建。在浏览器工作的工程中,BHO会接收到很多事件,比如浏览器浏览新的地址、前进或后退、生成新的窗口、浏览器退出等等;BHO可以在这些事件的响应中实现与浏览器的交互。

下面,我们首先来介绍一下BHO的工作原理。上面我们已经提到,BHO是COM组件,而且一定实现了IObjectWithSite接口。这些组件除了在注册表中注册为COM Server外,还必须将它们的CLSID在HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\ CurrentVersion\Explorer\Browser Helper Objects下注册为子键。微软在设计浏览器的时候,已经给这些组件预留了空间。每当浏览器启动时,浏览器会首先在上述注册表位置查看是否有注册的BHO CLSID;如果有则分别创建一个实例,并对BHO实例进行初始化,建立交互连接。(注:BHO实例只有在创建它的浏览器窗口销毁时才被释放。)下图演示了BHO的创建过程:


成功创建的BHO,不仅可以得到各种标准的浏览器操作事件,并做出响应;还可以定制浏览器的菜单、工具条等界面元素;更或者可以安装钩子函数,监视浏览器的一举一动。值得注意的是,使用BHO插件,Internet浏览器要求在4.0以上版本;如果是文件浏览器,操作系统要求是Windows 95/98/2000或Window......

阅读全文(3050) | 评论:0

总结一下DLL声明的一些问题(2010-10-21 17:13:00)

摘要: 总结一下DLL声明的一些问题 Posted on 2009-09-04 09:25 S.l.e!ep.¢% 阅读(99) 评论(0)  编辑 收藏 引用 所属分类: DLL 有关DLL的问题现在资料很多,但是很多人写DLL时经常出现调用程序无法找到相关的导出函数的问题,这里主要的原因是DLL在声明时出的问题。
在这里主要有两个问题,一个是调用约定的问题,一个是函数名修饰的问题,而这两个问题又是相互影响的。
一:声明为:extern "C" int __declspec(dllexport)add(int x, int y);
这种声明是强制用C语言方式进行修饰,且用C的默认约定,即__cdecl方式。这种方式编译产生的DLL中有一个导出函数:add,不加任何修饰。
二:声明为:extern "C" int __declspec(dllexport) __stdcall add(int x, int y);
这种声明是强制用C语言方式进行修饰,且用stdcall约定,这种方式编译产生的DLL中有一个导出函数:_add@8,即前面有“_”,后面加了参数长。
三:声明为:int __declspec(dllexport) __stdcall add(int x, int y);
这种声明不强制用C语言方式进行修饰,但是用stdcall约定,这种方式编译产生的DLL中有一个导出函数:?add@@YGHHH@Z。这个名字很怪,后面的不好理解。
四:声明为:int __declspec(dllexport) __cdecl add(int x, int y);
这种声明是不强制用C语言修饰,且用cdecl约定,这种方式编译产生的DLL中有一个导出函数:?add@@YAHHH@Z,注意看,和第三种方有一点不同。

实验一:显式调用方式调用DLL中的add函数。
#include <stdio.h>
#include <windows.h>
typedef  int(_stdcall *lpAdd......

阅读全文(1445) | 评论:0

第二十章 DLL高级技巧(2010-10-21 17:12:00)

摘要:第二十章 DLL高级技巧 1.概览  1.1动态加载DLL文件 LoadLibraryEx                 HMODULE LoadLibraryEx( PCTSTR pszDLLPathName, HANDLE hFile, DWORD dwFlags);               返回DLL加载到进程空间原首地址。               dwFlags 可以有以下几个值               (1) DONT_RESOLVE_DLL_REFERENCES                               建议永远不要使有这个值,它的存在仅仅是为了向后兼容、                               更多内容请访问:http://blogs.msdn.com/oldnewthing/archive/2005/02/14/372266.aspx   ......

阅读全文(2475) | 评论:0

VC通过HBITMAP获取RGB值(2010-08-17 19:56:00)

摘要:        CRect rect(0,0,iLen,iLen);
        HBITMAP hBitmap = CopyScrToBitmap(rect); //该方法见 VC截取桌面到 bitmap                         //http://blog.pfan.cn/lym51/51672.html
        if (hBitmap!= NULL)
        {
            CBitmap* bitmap = CBitmap::FromHandle(hBitmap);
            BITMAP bmp;
            bitmap->GetBitmap(&bmp);
            int bitmapSize=bmp.bmWidthBytes*bmp.bmWidthBytes;
            BYTE* px = (BYTE*)GlobalAlloc(GPTR, bitmapSize);
 &n......

阅读全文(7403) | 评论:0

VC截取桌面到bitmap(2010-08-17 19:53:00)

摘要:// lpRect 为截取的区域 // by lymking@hotmail.com HBITMAP CopyScrToBitmap(LPRECT lpRect) {
    HDC hScrDC=0, hMemDC;

    HBITMAP hBitmap, hOldBitmap;

    //int nX,nY,xX2,nY2;

    // bitmap width&height
    int nWidth, nHeight;

    // screen resolution
    int xScrn, yScrn;

    // makesure the rectangle not NULL
    if (IsRectEmpty(lpRect))
    {
        return NULL;
    }

    // create desktop screen dc
    hScrDC = GetDesktopWindow()->GetDC()->m_hDC;/*CreateDC(_T("DISPLAY"), NULL, NULL, NULL);*/

    int iOK =1;
    if (hScrDC == NULL)
    {......

阅读全文(3248) | 评论:0

UDP发送广播数据实例(2010-07-28 20:31:00)

摘要:因为某些需求,我们需要在网络中发送UDP广播,下面给出windows下UDP发送广播数据代码. UDP广播地址为255.255.255.255   关键字: setsockopt,  SO_BROADCAST, UDP广播地址   通过setsockopt这个API设置一个socket为广播socket   ////////////////////////////////////////////////////////////////////////////////////////      setsockopt说明:      设置套接口的选项。   #include <winsock.h>   int PASCAL FAR setsockopt( SOCKET s, int level, int optname,   const char FAR* optval, int optlen);   s:标识一个套接口的描述字。   level:选项定义的层次;目前仅支持SOL_SOCKET和IPPROTO_TCP层次。   optname:需设置的选项。   optval:指针,指向存放选项值的缓冲区。   optlen:optval缓冲区的长度。 /////////////////////////////////////////////////////////////////////////////////////////   ///代码示例   SOCKET sock; BOOL bBroadcast = TRUE; char  szBroadcast[] = "this is broadcast data!"; SOCKADDR_IN sockAddr;   // create udp socket sock = WSASocket(AF_INET,  SOCK_DGRAM/*UDP*/,  0, NULL, 0, WSA_FLAG_OVERLAPPED); // s......

阅读全文(7299) | 评论:0

VC用ADO访问数据库全攻略(2010-07-09 14:20:00)

摘要: 文章标题:VC用ADO访问数据库全攻略
原 作 者:相生昌
原 出 处:不详
发 布 者:loose_went
发布类型:转载
发布日期:2004-12-20
今日/总浏览:2/5107

关键字 ADO访问数据库大全
原作者姓名 相生昌 介绍
VC用ADO访问数据库全攻略,介绍了VC用ADO来访问数据库的各个对象及各方法,很经典,也很实用,很值得一看。 读者评分 10 评分次数 3 正文
一、ADO概述
ADO是Microsoft为最新和最强大的数据访问范例 OLE DB 而设计的,是一个便于使用的应用程序层接口。ADO 使您能够编写应用程序以通过 OLE. DB 提供者访问和操作数据库服务器中的数据。ADO 最主要的优点是易于使用、速度快、内存支出少和磁盘遗迹小。ADO 在关键的应用方案中使用最少的网络流量,并且在前端和数据源之间使用最少的层数,所有这些都是为了提供轻量、高性能的接口。之所以称为 ADO,是用了一个比较熟悉的暗喻,OLE 自动化接口。

OLE DB是一组”组件对象模型”(COM) 接口,是新的数据库低层接口,它封装了ODBC的功能,并以统一的方式访问存储在不同信息源中的数据。OLE DB是Microsoft UDA(Universal Data Access)策略的技术基础。OLE DB 为任何数据源提供了高性能的访问,这些数据源包括关系和非关系数据库、电子邮件和文件系统、文本和图形、自定义业务对象等等。也就是说,OLE DB 并不局限于 ISAM、Jet 甚至关系数据源,它能够处理任何类型的数据,而不考虑它们的格式和存储方法。在实际应用中,这种多样性意味着可以访问驻留在 Excel 电子数据表、文本文件、电子邮件/目录服务甚至邮件服务器,诸如 Microsoft Exchange 中的数据。但是,OLE DB 应用程序编程接口的目的是为各种应用程序提供最佳的功能,它并不符合简单化的要求。您需要的API 应该是一座连接应用程序和OLE DB 的桥梁,这就是 ActiveX Data Objects (ADO)。......

阅读全文(1394) | 评论:0