麻烦帮我把一段C++代码转为delphi代码。谢了!

my11911 2014-03-02 12:59:31

我想用delphi 7写一个全局钩子,当窗口标题为“XXXXX”的窗口一生成,就在后台截住它(不要消毁也不要隐藏),然后用Windows.SetParent(Handle1, Handle2)改变它的父窗口,把其父窗口改为某已知句柄的窗口(虚拟桌面),让其显示在虚拟桌面窗口里;在当前桌面就像没看到它们出现一样。

我对钩子不太熟悉,花了好长时间在delphi 7下都不知如何实现。最后找到一个功能较为类似的用C++写的例程,但我对C++不熟,麻烦帮我把其源代码,从C++转为delphi 7。不胜感激!!!



以下是《阻止弹窗程序 弹窗免疫程序》C++程序(内含代码):
http://download.csdn.net/detail/luo_xuewu/2730015

上面网址需要积分才可下载,所以我把它上传到了百度网盘,你可以到百度网盘下载:
http://pan.baidu.com/s/1nb3WU




特别注意:
1、C++例程代码是直接阻止窗口显示,译成DELPHI代码后,请用注释注掉阻止显现的代码,改为用Windows.SetParent(Handle1, Handle2)改变它的父窗口即可。
2、C++例程代码阻止的是对话框,而我要阻止的窗口由那个进程产生的并不知晓,唯一知道的只是窗口的标题为“XXXXX”,该窗口有可能是对话框,也有可能是某个进程产生的窗口。



另附delphi全局钩子例程:
《Hook到窗口显示消息后,怎么让窗口不可见》:http://bbs.csdn.net/topics/280005288
(#41 dandycheung的回复很有参考价值,不过他是根据类名阻止窗口,而我要的是根据窗口标题阻止;同时我要的不是隐藏窗口,而是改变父窗口)


//==========以下是C++关键代码,更详细请下载参见例程===================================

DllMain.cpp
#include "windows.h"
#include "Macro.h"
#include "Hook.h"

BOOL WINAPI DllMain( HINSTANCE hinstDLL,DWORD fdwReason,LPVOID lpvReserved )
{
return true ;
}

//----------------------------------------------------
Macro.h
#ifndef MACRO_H
#define MACRO_H


#define DEBUG



#define NOTUSED 0
#define RESERVED 0
#define IGNORED 0


#ifdef UNICODE
#define tstring wstring
#define tstringstream wstringstream
#define tistringstream wistringstream
#define tostringstream wostringstream
#define tfstream wfstream
#define tifstream wifstream
#define tofstream wofstream
#define CF_TCHAR CF_UNICODETEXT
#else
#define tstring string
#define tstringstream stringstream
#define tistringstream istringstream
#define tostringstream ostringstream
#define tfstream fstream
#define tifstream ifstream
#define tofstream ofstream
#define CF_TCHAR CF_TEXT
#endif


#define UM_CREATE WM_USER + 100
#define UM_TEXT WM_USER + 101


#endif


//----------------------------------------------------
Hook.h
#pragma once
#ifdef DLLEXPORT
#else
#define DLLEXPORT _declspec( dllimport )
#endif

class DLLEXPORT Hook
{
public:
Hook( unsigned int p_HookType, unsigned int p_idThread = 0 );
~Hook(void);

bool SetHook(void);
void UnHook(void);

private:
unsigned int HookType ;
unsigned int idThread ;
HHOOK hook ;

private:
static HWND hwndOwner ;

public:
static bool SetOwner(HWND p_hwndOwner);
static LRESULT CALLBACK CallWndProc(int nCode, WPARAM wParam, LPARAM lParam);
static LRESULT CALLBACK GetMsgProc(int code, WPARAM wParam, LPARAM lParam);
};


//----------------------------------------------------
#define DLLEXPORT _declspec( dllexport )
#include "windows.h"
#include "tchar.h"
#include "Macro.h"
#include "Hook.h"

#pragma data_seg( "HookWnd" )
HWND Hook::hwndOwner = NULL ;
#pragma data_seg()

#pragma comment( linker, "/section:HookWnd,RWS" )


Hook::Hook( unsigned int p_HookType, unsigned int p_idThread )
: HookType( p_HookType )
, idThread( p_idThread )
{
}

Hook::~Hook(void)
{
UnHook();
}

bool Hook::SetOwner(HWND p_hwndOwner)
{
if( !IsWindow( p_hwndOwner ) )
return false;

hwndOwner = p_hwndOwner ;
return true ;
}

bool Hook::SetHook(void)
{
switch( HookType )
{
case WH_CALLWNDPROC :
hook = SetWindowsHookEx( HookType, CallWndProc,
GetModuleHandle( TEXT( "DllScoutCraeteMsg.dll" ) ), idThread ) ;
break;

case WH_GETMESSAGE :
hook = SetWindowsHookEx( HookType, GetMsgProc,
GetModuleHandle( TEXT( "DllScoutCraeteMsg.dll" ) ), idThread ) ;

default:
break ;
}

if( !hook )
return false;
return true ;
}

void Hook::UnHook(void)
{
if( hook )
UnhookWindowsHookEx( hook ) ;
}

LRESULT CALLBACK Hook::CallWndProc(int nCode, WPARAM wParam, LPARAM lParam)
{
if( !wParam )
{
CWPSTRUCT *pCwp = reinterpret_cast< CWPSTRUCT* >( lParam );
if( pCwp->message == WM_INITDIALOG )
{
if( SendMessage( hwndOwner, UM_CREATE, wParam,
reinterpret_cast< LPARAM >( pCwp->hwnd ) ) )
return 0 ;
}
}

return CallNextHookEx( IGNORED, nCode, wParam, lParam );
}

LRESULT CALLBACK Hook::GetMsgProc(int code, WPARAM wParam, LPARAM lParam)
{
MSG *pMsg = reinterpret_cast< MSG* >( lParam ) ;
if( pMsg->message == WM_CHAR )
{
if( hwndOwner != GetParent( pMsg->hwnd ) )
SendMessage( hwndOwner, UM_TEXT, pMsg->wParam, pMsg->lParam ) ;
}

return CallNextHookEx( 0, code, wParam, lParam ) ;
}



//==========以上是C++关键代码,更详细请下载参见例程===================================


再次感谢!!!
...全文
139 1 打赏 收藏 转发到动态 举报
写回复
用AI写文章
1 条回复
切换为时间正序
请发表友善的回复…
发表回复
my11911 2014-03-07
  • 打赏
  • 举报
回复
发贴好几天了,有朋友能帮我完成一下吗?多谢了!
不用多说了,大家看看就知道了,虽然大了一点,但很实用。 1、结合实际,功能强大 通过对重庆和贵州几十个中、小学校的调查,开发的《教育办公自动化系统》软件几乎覆盖了中小学校日常管理和数据处理。她广泛吸收了各个中小学学校教学管理及其他管理的经验,使系统功能不断得以拓展、流程更加标准,内容更加完善,从而充分适应不同学校的需要。 2、性能先进 系统采用目前广为流行的Borland Delphi 6.0和Microsoft Visual FoxPro 7.0完美结合编码,系统的响应速度和稳定性能达到C++工具的水平,处理更加灵活。 系统内置大量纯粹的SQL语句,使数据处理速度更快更稳定。 3、功能齐全 《教育办公自动化系统》不仅仅是一个记录数据的系统,她最大限度的解决了中小学的日常事务和大量数据的处理和分析,使教育管理者从繁重的工作中解脱出来。 查询快捷、统计分析方便,查询统计结果都可直接打印或转为Word表格或Excel,使数据处理更加灵活。报表样式多,能生成复杂的报表,如《学生学籍卡》《学生健康卡》《教师档案卡》《公文传阅表》《教师考勤统计表》《班级常规统计表》(每周期、每月、每学期和某段时间)等。 《学生素质教育系统》是一个真正的素质教育管理系统,是国内唯一能真正客观反映学生在校学习情况的软件。考核成绩不仅可以以分数记录(100分制、120分制和150分制)而且还可以以等级方式记录(等级可根据需要设定,如优良中差ABCD……),分数可直接转为等级。每科成绩考核次数可自定义(如“数学”学科可设置为:数学平时1、数据平时2……数学期中、数学期末等),使用统计分析更加清晰。各次成绩在单科合计(即使成绩是等级制)及单科成绩在总分中比例也可以自已设定,使其对学生的考核更加科学,真正实现素质教育。 3、考虑周到 通过智能分班(自动分班消除了手工分班的种种不利因素,使分班更加科学)、合班、增加新班级、班级更名、增加新年级、年度升级和数据备份(每天可备份十次)与恢复使管理更加接近实际,不再为历史数据查询不便而困扰。 通过使用和打印学生成绩条、学生通知单、学生通知书(打印名次和打印科目可选)、录入成绩时语音校和算分板使教师对成绩处理更加轻松。 任意输入缺考和缺考统计,消除了学校因学生缺考而不易统计、分析数据的烦恼。
不用多说了,大家看看就知道了,虽然大了一点,但很实用。 1、结合实际,功能强大 通过对重庆和贵州几十个中、小学校的调查,开发的《教育办公自动化系统》软件几乎覆盖了中小学校日常管理和数据处理。她广泛吸收了各个中小学学校教学管理及其他管理的经验,使系统功能不断得以拓展、流程更加标准,内容更加完善,从而充分适应不同学校的需要。 2、性能先进 系统采用目前广为流行的Borland Delphi 6.0和Microsoft Visual FoxPro 7.0完美结合编码,系统的响应速度和稳定性能达到C++工具的水平,处理更加灵活。 系统内置大量纯粹的SQL语句,使数据处理速度更快更稳定。 3、功能齐全 《教育办公自动化系统》不仅仅是一个记录数据的系统,她最大限度的解决了中小学的日常事务和大量数据的处理和分析,使教育管理者从繁重的工作中解脱出来。 查询快捷、统计分析方便,查询统计结果都可直接打印或转为Word表格或Excel,使数据处理更加灵活。报表样式多,能生成复杂的报表,如《学生学籍卡》《学生健康卡》《教师档案卡》《公文传阅表》《教师考勤统计表》《班级常规统计表》(每周期、每月、每学期和某段时间)等。 《学生素质教育系统》是一个真正的素质教育管理系统,是国内唯一能真正客观反映学生在校学习情况的软件。考核成绩不仅可以以分数记录(100分制、120分制和150分制)而且还可以以等级方式记录(等级可根据需要设定,如优良中差ABCD……),分数可直接转为等级。每科成绩考核次数可自定义(如“数学”学科可设置为:数学平时1、数据平时2……数学期中、数学期末等),使用统计分析更加清晰。各次成绩在单科合计(即使成绩是等级制)及单科成绩在总分中比例也可以自已设定,使其对学生的考核更加科学,真正实现素质教育。 3、考虑周到 通过智能分班(自动分班消除了手工分班的种种不利因素,使分班更加科学)、合班、增加新班级、班级更名、增加新年级、年度升级和数据备份(每天可备份十次)与恢复使管理更加接近实际,不再为历史数据查询不便而困扰。 通过使用和打印学生成绩条、学生通知单、学生通知书(打印名次和打印科目可选)、录入成绩时语音校和算分板使教师对成绩处理更加轻松。 任意输入缺考和缺考统计,消除了学校因学生缺考而不易统计、分析数据的烦恼。

15,472

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC 进程/线程/DLL
社区管理员
  • 进程/线程/DLL社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧