- 浏览: 319248 次
- 性别:
- 来自: 广州
文章分类
最新评论
-
flex_莫冲:
tks d
JAVA教材(推荐新手学习) -
magic_yao:
不错的简介
Python库 -
lzzzing:
import time
d = {1:1}
maxv,max ...
Project Euler 第14题 -
a173549010:
怎么资源被举报了,下不了
个人珍藏的MLDN李兴华J2EE视频教程(纳米盘下载) -
a173549010:
怎么下不了
个人珍藏的MLDN李兴华J2EE视频教程(纳米盘下载)
http://www.sunxin.org/forum/thread/210.html?page=1
作者:虎非龙
第20课 钩子与数据库编程
1.Hook简介:作用是拦截某些消息,关键函数是SetWindowsHookEX()
2.示例程序:
1.新建一基于对话框工程,InnerHook,此过程的钩子是只拦截本进程的。
2.在OnInitDialog()中添加代码:
g_hWnd=m_hWnd;
g_hMouse=SetWindowsHookEx(WH_MOUSE,MouseProc,NULL,GetCurrentThreadId());设置了鼠标钩子
g_hKeyboard=SetWindowsHookEx(WH_KEYBOARD,KeyboardProc,NULL,GetCurrentThreadId());设置了键盘钩子
3.完成钩子函数的编写:
HHOOK g_hKeyboard=NULL;
HHOOK g_hMouse;
HWND g_hWnd=NULL;
LRESULT CALLBACK MouseProc(
int nCode, // hook code
WPARAM wParam, // message identifier
LPARAM lParam // mouse coordinates
)
{
return 1;
}
LRESULT CALLBACK KeyboardProc(
int code, // hook code
WPARAM wParam, // virtual-key code
LPARAM lParam // keystroke-message information
)
{
//if(VK_SPACE==wParam || VK_RETURN==wParam)如果是空格键
/*if(VK_F4==wParam && (1==(lParam>>29 & 1)))拦截ALT+F4按键!
return 1;
else
return CallNextHookEx(g_hKeyboard,code,wParam,lParam);*/
if(VK_F2==wParam)按F2时程序可以退出,这是留的后门。否则程序无法关闭,只能用任务管理器来关闭它了。
{
::SendMessage(g_hWnd,WM_CLOSE,0,0);
UnhookWindowsHookEx(g_hKeyboard);当程序退出时最好将钩子移除。
UnhookWindowsHookEx(g_hMouse);
}
return 1;
}
3.编写一个屏屏蔽所有进程和所有线程的钩子程序。此时这个钩子必须安装在DLL中,然后被某个程序调用才行。
1.新建一个DLL工程名为Hook
2.增加Hook.cpp
3.代码如下:
#include <windows.h>包含头文件
HHOOK g_hMouse=NULL;
HHOOK g_hKeyboard=NULL;
#pragma data_seg("MySec")新建了一个节,用于将下 面的这个变量设为全局共享。
HWND g_hWnd=NULL;这个变量是全局共享的。
#pragma data_seg()
//#pragma comment(linker,"/section:MySec,RWS")
/*HINSTANCE g_hInst;
BOOL WINAPI DllMain(
HINSTANCE hinstDLL, // handle to the DLL module
DWORD fdwReason, // reason for calling function
LPVOID lpvReserved // reserved
)
{
g_hInst=hinstDLL;
}*/
LRESULT CALLBACK MouseProc(
int nCode, // hook code
WPARAM wParam, // message identifier
LPARAM lParam // mouse coordinates
)
{
return 1;拦截了鼠标消息。
}
LRESULT CALLBACK KeyboardProc(
int code, // hook code
WPARAM wParam, // virtual-key code
LPARAM lParam // keystroke-message information
)
{
if(VK_F2==wParam)如果是F2键,则退出。
{
SendMessage(g_hWnd,WM_CLOSE,0,0);
UnhookWindowsHookEx(g_hMouse);当退出时将钩子卸掉。
UnhookWindowsHookEx(g_hKeyboard);
}
return 1;
}
void SetHook(HWND hwnd)此函数设置了钩子。
{
g_hWnd=hwnd;注意这种传递调用它的进程的句柄的方法,比较巧妙!
g_hMouse=SetWindowsHookEx(WH_MOUSE,MouseProc,GetModuleHandle("Hook"),0);
g_hKeyboard=SetWindowsHookEx(WH_KEYBOARD,KeyboardProc,GetModuleHandle("Hook"),0);
} Hook.DEF的代码如下:
LIBRARY Hook
EXPORTS
SetHook @2
SEGMENTS
MySec READ WRITE SHARED 也可以设置节的属性。
4.新建一个工程调用此钩子函数。工程名为HookTest,基于对话框的。在OnInitDialog()中调用SetHook(),要事先声明_declspec(dllimport) void SetHook(HWND hwnd);
然后在Project->Setting->Link->加入..\Hook\Debug\Hook.lib,并将Hook.Dll拷贝到当前目录。
int cxScreen,cyScreen;
cxScreen=GetSystemMetrics(SM_CXSCREEN);
cyScreen=GetSystemMetrics(SM_CYSCREEN);
SetWindowPos(&wndTopMost,0,0,cxScreen,cyScreen,SWP_SHOWWINDOW);将窗口保持在最前面。
SetHook(m_hWnd);
5.DLL的调试方法,设置断点,然后运行时断点时,step into即可。
4.数据库编程
1.ODBC,ADO简介:ADO可以认为是建立在ODBC上的。
ADO的三个核心对象
Connection对象
Connection对象表示了到数据库的连接,它管理应用程序和数据库之间的通信。 Recordset和Command对象都有一个ActiveConnection属性,该属性用来引用Connection对象。
Command对象
Command对象被用来处理重复执行的查询,或处理需要检查在存储过程调用中的输出或返回参数的值的查询。
Recordset对象
Recordset对象被用来获取数据。 Recordset对象存放查询的结果,这些结果由数据的行(称为记录)和列(称为字段)组成。每一列都存放在Recordset的Fields集合中的一个Field对象中。
2.演示在VB中使用ADO的方法,方法比较简单,使用方便。另外在VB中演示了Connection和Command和Recordset的方法,用这三种方法都可以执行SQL语句。
3.在VC中利用ADO访问数据库。
1.新建一个基于对话框的工程,名为ADO。
2.在对话框中放一ListBox和一个Button控件。
3.在使用时须导入MSADO15.dll,方法是在StdAfx.h中#import "D:\Program Files\Common Files\System\ado\msado15.dll" no_namespace rename("EOF","rsEOF")
至少于将EOF改名为rsEOF,是为了避免与文件中的EOF重名。然后编译程序,将产生的debug目录下的两个文件MSADO15.tlh和MSADO15.tli加到工程中,其目的只是方便我们查看而已。并不是编译需要它。
ADO也是COM组件,须初始化COM库方法是CoInitialize(NULL);使用完后须CoUninitialize();
代码如下:
void CAdoDlg::OnBtnQuery()
{
// TOD Add your control notification handler code here
CoInitialize(NULL);初始化
_ConnectionPtr pConn(__uuidof(Connection));产生connection智能指针
_RecordsetPtr pRst(__uuidof(Recordset));产生recordset智能指针
_CommandPtr pCmd(__uuidof(Command));产生command智能指针 pConn->ConnectionString="Provider=SQLOLEDB.1;Persist Security Info=False;User ID=sa;Initial Catalog=pubs";数据库信息
pConn->Open("","","",adConnectUnspecified);打开数据库 //pRst=pConn->Execute("select * from authors",NULL,adCmdText);用记录集查询数据
//pRst->Open("select * from authors",_variant_t((IDispatch*)pConn),
// adOpenDynamic,adLockOptimistic,adCmdText);
pCmd->put_ActiveConnection(_variant_t((IDispatch*)pConn));
pCmd->CommandText="select * from authors";用这种方法也可以查询数据
pRst=pCmd->Execute(NULL,NULL,adCmdText);
while(!pRst->rsEOF)将查询到的数据加到列表框咯。
{
((CListBox*)GetDlgItem(IDC_LIST1))->AddString(
(_bstr_t)pRst->GetCollect("au_lname"));
pRst->MoveNext();
}
pRst->Close();
pConn->Close();
pCmd.Release();
pRst.Release();
pConn.Release();
CoUninitialize();
}
至此20课笔记全部记完,关于数据库的比较简单些。
作者:虎非龙
第20课 钩子与数据库编程
1.Hook简介:作用是拦截某些消息,关键函数是SetWindowsHookEX()
2.示例程序:
1.新建一基于对话框工程,InnerHook,此过程的钩子是只拦截本进程的。
2.在OnInitDialog()中添加代码:
g_hWnd=m_hWnd;
g_hMouse=SetWindowsHookEx(WH_MOUSE,MouseProc,NULL,GetCurrentThreadId());设置了鼠标钩子
g_hKeyboard=SetWindowsHookEx(WH_KEYBOARD,KeyboardProc,NULL,GetCurrentThreadId());设置了键盘钩子
3.完成钩子函数的编写:
HHOOK g_hKeyboard=NULL;
HHOOK g_hMouse;
HWND g_hWnd=NULL;
LRESULT CALLBACK MouseProc(
int nCode, // hook code
WPARAM wParam, // message identifier
LPARAM lParam // mouse coordinates
)
{
return 1;
}
LRESULT CALLBACK KeyboardProc(
int code, // hook code
WPARAM wParam, // virtual-key code
LPARAM lParam // keystroke-message information
)
{
//if(VK_SPACE==wParam || VK_RETURN==wParam)如果是空格键
/*if(VK_F4==wParam && (1==(lParam>>29 & 1)))拦截ALT+F4按键!
return 1;
else
return CallNextHookEx(g_hKeyboard,code,wParam,lParam);*/
if(VK_F2==wParam)按F2时程序可以退出,这是留的后门。否则程序无法关闭,只能用任务管理器来关闭它了。
{
::SendMessage(g_hWnd,WM_CLOSE,0,0);
UnhookWindowsHookEx(g_hKeyboard);当程序退出时最好将钩子移除。
UnhookWindowsHookEx(g_hMouse);
}
return 1;
}
3.编写一个屏屏蔽所有进程和所有线程的钩子程序。此时这个钩子必须安装在DLL中,然后被某个程序调用才行。
1.新建一个DLL工程名为Hook
2.增加Hook.cpp
3.代码如下:
#include <windows.h>包含头文件
HHOOK g_hMouse=NULL;
HHOOK g_hKeyboard=NULL;
#pragma data_seg("MySec")新建了一个节,用于将下 面的这个变量设为全局共享。
HWND g_hWnd=NULL;这个变量是全局共享的。
#pragma data_seg()
//#pragma comment(linker,"/section:MySec,RWS")
/*HINSTANCE g_hInst;
BOOL WINAPI DllMain(
HINSTANCE hinstDLL, // handle to the DLL module
DWORD fdwReason, // reason for calling function
LPVOID lpvReserved // reserved
)
{
g_hInst=hinstDLL;
}*/
LRESULT CALLBACK MouseProc(
int nCode, // hook code
WPARAM wParam, // message identifier
LPARAM lParam // mouse coordinates
)
{
return 1;拦截了鼠标消息。
}
LRESULT CALLBACK KeyboardProc(
int code, // hook code
WPARAM wParam, // virtual-key code
LPARAM lParam // keystroke-message information
)
{
if(VK_F2==wParam)如果是F2键,则退出。
{
SendMessage(g_hWnd,WM_CLOSE,0,0);
UnhookWindowsHookEx(g_hMouse);当退出时将钩子卸掉。
UnhookWindowsHookEx(g_hKeyboard);
}
return 1;
}
void SetHook(HWND hwnd)此函数设置了钩子。
{
g_hWnd=hwnd;注意这种传递调用它的进程的句柄的方法,比较巧妙!
g_hMouse=SetWindowsHookEx(WH_MOUSE,MouseProc,GetModuleHandle("Hook"),0);
g_hKeyboard=SetWindowsHookEx(WH_KEYBOARD,KeyboardProc,GetModuleHandle("Hook"),0);
} Hook.DEF的代码如下:
LIBRARY Hook
EXPORTS
SetHook @2
SEGMENTS
MySec READ WRITE SHARED 也可以设置节的属性。
4.新建一个工程调用此钩子函数。工程名为HookTest,基于对话框的。在OnInitDialog()中调用SetHook(),要事先声明_declspec(dllimport) void SetHook(HWND hwnd);
然后在Project->Setting->Link->加入..\Hook\Debug\Hook.lib,并将Hook.Dll拷贝到当前目录。
int cxScreen,cyScreen;
cxScreen=GetSystemMetrics(SM_CXSCREEN);
cyScreen=GetSystemMetrics(SM_CYSCREEN);
SetWindowPos(&wndTopMost,0,0,cxScreen,cyScreen,SWP_SHOWWINDOW);将窗口保持在最前面。
SetHook(m_hWnd);
5.DLL的调试方法,设置断点,然后运行时断点时,step into即可。
4.数据库编程
1.ODBC,ADO简介:ADO可以认为是建立在ODBC上的。
ADO的三个核心对象
Connection对象
Connection对象表示了到数据库的连接,它管理应用程序和数据库之间的通信。 Recordset和Command对象都有一个ActiveConnection属性,该属性用来引用Connection对象。
Command对象
Command对象被用来处理重复执行的查询,或处理需要检查在存储过程调用中的输出或返回参数的值的查询。
Recordset对象
Recordset对象被用来获取数据。 Recordset对象存放查询的结果,这些结果由数据的行(称为记录)和列(称为字段)组成。每一列都存放在Recordset的Fields集合中的一个Field对象中。
2.演示在VB中使用ADO的方法,方法比较简单,使用方便。另外在VB中演示了Connection和Command和Recordset的方法,用这三种方法都可以执行SQL语句。
3.在VC中利用ADO访问数据库。
1.新建一个基于对话框的工程,名为ADO。
2.在对话框中放一ListBox和一个Button控件。
3.在使用时须导入MSADO15.dll,方法是在StdAfx.h中#import "D:\Program Files\Common Files\System\ado\msado15.dll" no_namespace rename("EOF","rsEOF")
至少于将EOF改名为rsEOF,是为了避免与文件中的EOF重名。然后编译程序,将产生的debug目录下的两个文件MSADO15.tlh和MSADO15.tli加到工程中,其目的只是方便我们查看而已。并不是编译需要它。
ADO也是COM组件,须初始化COM库方法是CoInitialize(NULL);使用完后须CoUninitialize();
代码如下:
void CAdoDlg::OnBtnQuery()
{
// TOD Add your control notification handler code here
CoInitialize(NULL);初始化
_ConnectionPtr pConn(__uuidof(Connection));产生connection智能指针
_RecordsetPtr pRst(__uuidof(Recordset));产生recordset智能指针
_CommandPtr pCmd(__uuidof(Command));产生command智能指针 pConn->ConnectionString="Provider=SQLOLEDB.1;Persist Security Info=False;User ID=sa;Initial Catalog=pubs";数据库信息
pConn->Open("","","",adConnectUnspecified);打开数据库 //pRst=pConn->Execute("select * from authors",NULL,adCmdText);用记录集查询数据
//pRst->Open("select * from authors",_variant_t((IDispatch*)pConn),
// adOpenDynamic,adLockOptimistic,adCmdText);
pCmd->put_ActiveConnection(_variant_t((IDispatch*)pConn));
pCmd->CommandText="select * from authors";用这种方法也可以查询数据
pRst=pCmd->Execute(NULL,NULL,adCmdText);
while(!pRst->rsEOF)将查询到的数据加到列表框咯。
{
((CListBox*)GetDlgItem(IDC_LIST1))->AddString(
(_bstr_t)pRst->GetCollect("au_lname"));
pRst->MoveNext();
}
pRst->Close();
pConn->Close();
pCmd.Release();
pRst.Release();
pConn.Release();
CoUninitialize();
}
至此20课笔记全部记完,关于数据库的比较简单些。
发表评论
-
VC视频教程笔记(第19课)
2009-07-19 19:28 950http://www.sunxin.org/forum/thr ... -
VC视频教程笔记(第18课)
2009-07-19 19:27 1219http://www.sunxin.org/forum/thr ... -
VC视频教程笔记(第17课)
2009-07-19 19:26 851第17课 进程间通信 有四种方法 1.剪贴板 a.创建个C ... -
VC视频教程笔记(第16课)
2009-07-19 19:25 982http://www.sunxin.org/forum/thr ... -
VC视频教程笔记(第15课)
2009-07-19 19:22 916http://www.sunxin.org/forum/thr ... -
VC视频教程笔记(第14课)
2009-07-19 19:20 1184http://www.sunxin.org/forum/thr ... -
VC视频教程笔记(第13课)
2009-07-19 19:19 807http://www.sunxin.org/forum/thr ... -
VC视频教程笔记(第12课)
2009-07-19 19:18 929http://www.sunxin.org/forum/thr ... -
VC视频教程笔记(第11课)
2009-07-19 19:17 841http://www.sunxin.org/forum/thr ... -
VC视频教程笔记(第10课)
2009-07-19 19:15 860http://www.sunxin.org/forum/thr ... -
VC视频教程笔记(第9课)
2009-07-19 19:13 1054http://www.sunxin.org/forum/thr ... -
VC视频教程笔记(第8课)
2009-07-19 19:12 727http://www.sunxin.org/forum/thr ... -
VC视频教程笔记(第7课)
2009-07-19 19:10 1142http://www.sunxin.org/forum/thr ... -
VC视频教程笔记(第6课)
2009-07-19 19:09 1238http://www.sunxin.org/forum/thr ... -
VC视频教程笔记(第5课)
2009-07-19 19:08 1123http://www.sunxin.org/forum/thr ... -
VC视频教程笔记(第3课)
2009-07-19 19:05 785http://www.sunxin.org/forum/thr ... -
VC视频教程笔记(第二课)
2009-07-19 19:04 836http://www.sunxin.org/forum/thr ... -
VC视频教程笔记(第一课)
2009-07-19 19:03 809http://www.sunxin.org/forum/thr ...
相关推荐
资源名称:VC网络验证编写开发视频教程【20课】资源目录:【】...编程视频教程网络验证编写20课第二十课【】编程视频教程网络验证编写20课第二课【】编程 资源太大,传百度网盘了,链接在附件中,有需要的同学自取。
【孙鑫VC视频教程笔记】是一份记录了学习VC++编程知识的文档,主要涵盖了MFC框架和SDK编程的基础概念及技巧。以下是其中涉及到的重要知识点的详细解释: 1. **StdAfx.h**:在MFC项目中,StdAfx.h文件包含了基本的...
《C++视频教程-VC深入详解自学笔记》是一份全面且免费的学习资源,旨在帮助初学者和有一定基础的开发者深入理解C++编程语言,特别是通过Visual C++ (VC++)这一开发环境进行实践。教程由孙鑫整理,涵盖了从基础到高级...
这个"VC.rar"压缩包中的"VC视频教程.exe"可能是一个交互式的视频教程,旨在帮助学习者掌握VC++的基本概念和高级特性。通过观看这些视频,无论是初学者还是有经验的开发者,都可以期望获得以下方面的知识: 1. **...
孙鑫老师vc视频教程
【VC2008视频教程】是一套专为初学者设计的编程教学资源,旨在帮助对Visual C++ 2008(也称VC++ 2008或MSVC9)感兴趣的用户快速掌握该开发环境和C++编程语言的基础知识。在本教程中,你将学习到如何安装Visual ...
资源名称:VC 就业培训宝典之MFC视频教程资源目录:【】吕鑫:MFC视频教程第一章(1-1)【】吕鑫:MFC视频教程第一章(1-2)【】吕鑫:MFC视频教程第七章(7-1)【】吕鑫:MFC视频教程第七章(7-2)【】吕鑫:MFC...
VC6.0的学习笔记。 正在完美中。。。。。
【VC#学习笔记仅供参考】 本笔记主要涵盖了ASP.NET应用程序的开发知识,特别是针对网页设计和数据库访问技术。在学习过程中,我们将逐步了解如何构建信息浏览页面,并深入探讨各种Web服务器控件的使用。 首先,...
适合VC6初学者,第一步观看视频,第二步运行配套源程序学习。课程目录如下: 01基于控制台的Win32程序;02 基于对话框的MFC工程;03 基于单文档的MFC工程;04 Windows基本控件编程;05工具栏和菜单的编程;06 Win32 ...
《VC入门教程 7天学会VC》是一份专为初学者设计的编程教育资源,由知名讲师张孝祥的课程笔记整理而成。这份教程主要聚焦于Visual C++(简称VC)的使用,帮助学习者在短时间内掌握C++编程基础以及如何在VC环境下进行...
本文是关于使用Microsoft Visual C++ (VC++) 和Video for Windows (VFW) API进行视频捕获的详细笔记。VFW是Windows操作系统提供的一种视频处理框架,它简化了视频捕获、处理和播放的过程。下面将深入探讨各个关键...
VC串口通信modbus协议源代码工程视频教程工程建立详细步骤
vc学习教程-界面设计,方便好用,又实惠
Microsoft Visual C++ 6.0(简称VC6.0)是微软公司推出的一款经典且广泛使用的C++集成开发环境,它在20世纪90年代末期至21世纪初期占据了重要的地位。这份学习笔记旨在帮助初学者了解并掌握VC6.0的基本操作和C++编程...
完整讲述了如何使用vc打造局域网聊天室,一共10课,每课都是一个视频教程(动画教程,时长半个小时到一个小时,画面清晰,解压后大小100多M),节目如下: 第一课、编程环境及准备知识 第二课、聊天室界面的...
包含了OpenGL-NEHE中文教程的12-24课VC示例源码
**VC深入详解笔记** 本文将基于孙鑫的《VC深入详解》一书,结合作者的个人笔记,深入探讨Microsoft Visual C++(简称VC)的各个方面,帮助读者掌握关键概念和技术,提升编程技能。《VC深入详解》是学习VC++的重要...
【标题】"在工作中对VC工作笔记"涵盖了在使用Visual C++(简称VC)进行软件开发过程中的实践经验与总结。这份笔记可能包含了作者在实际项目中遇到的问题、解决方法以及对于VC工具和库的深入理解。 【描述】"一些...
vc教程杨章伟vc教程杨章伟vc教程杨章伟vc教程杨章伟vc教程杨章伟vc教程杨章伟vc教程杨章伟vc教程杨章伟v