问答文章1 问答文章501 问答文章1001 问答文章1501 问答文章2001 问答文章2501 问答文章3001 问答文章3501 问答文章4001 问答文章4501 问答文章5001 问答文章5501 问答文章6001 问答文章6501 问答文章7001 问答文章7501 问答文章8001 问答文章8501 问答文章9001 问答文章9501

谁会用VC++编写个公告栏提醒

发布网友 发布时间:2024-08-21 11:36

我来回答

3个回答

热心网友 时间:2024-08-21 12:04

一.基础知识
首先想编这种程序需要一些基础知识。
会用Vc++,包括16/32位。
精通Windows API特别是GDI,KERNEL部分。
懂汇编语言,会用softice调试程序,因为这种程序最好用softice调试。
二.基本原理
在Window 3.x时代,windows系统提供的字符输出函数只有很少的几个。
TextOut
ExtTextOut
DrawText
......
其中DrawText最终是用ExtTextOut实现的。
所以Windows的所有字符输出都是由调用TextOut和ExtTextOut实现的。因此,如果你可以修改这两个函数的入口,让程序先调用你自己的一个函数再调用系统的字符输出,你就可以得到Windows所有输出的字符了。
到了Windows95时代,原理基本没变,但是95比3.x要复杂。开始的时候,一些在windows3.x下编写的取词软件仍然可以是使用。但是后来出了个IE4,结果很多词典软件就因为不支持IE4而被淘汰了,但同时也给一些软件创造了机会,如金山词霸。其实IE4的问题并不复杂,只不过它的输出的是unicode字符,是用TextOutW和ExtTextOutW输出的。知道了这一点,只要也截取就可以了。不过实现方法复杂一点,以后会有详细讲解。现在又出了个IE5,结果词霸也不好用了,微软真是#^@#$%$*&^@#@..........
我研究后找到了一种解决办法,但还有些问题,有时会取错,正在继续研究,希望大家共同探讨。
另外还有WindowsNT,原理也是一样,只是实现方法和95下完全不同。
三.技术要点
要实现取词,主要要解决以下技术问题。
1.截取API入口,获得API的参数。
2.安全地潜入Windows内部,良好地兼容Windows的各个版本
3.计算鼠标所在的单词和字母。
4.如果你在Window95下,做32位程序,还涉及Windows32/16混合编程的技术。
今天先到这里吧!最好准备一份softice for 95/98和金山词霸,让我们先来分析一下别人是怎么做的。
欢迎与我联系
E-Mail:yeedong@163.net
主题 屏幕取词技术系列讲座(二)
作者 亦东
很抱歉让大家久等了!
我看了一些人的回帖,发现很多人对取词的原理还是不太清楚。
首先我来解释一下hook问题。词霸中的确用到了hook,而且他用了两种hook其中一种是Windows标准hook,通过SetWindowHook安装一个回调函数,它安装了一个鼠标hook,是为了可以及时响应鼠标的消息用的和取词没太大关系。
另一种钩子是API钩子,这才是取词的核心技术所在。他在TextOut等函数的开头写了一个jmp语句,跳转到自己的代码里。
你用softice看不到这个跳转语句是因为它只在取词的一瞬间才存在,平时是没有的。
你可以在TextOut开头设一个读写断点
bpm textout
再取词,就会找到词霸用来写钩子的代码了。
/**********************************
所以我在次强调,想学这种技术一定要懂汇编语言和熟练使用softice.
**********************************/
至于从cjktl95中dump出来的未公开函数是和Windows32/16混合编程有关的,以后我会提到他们。
我先来讲述取词的过程,
0 判断鼠标是否在一个地方停留了一段时间
1 取得鼠标当前位置
2 以鼠标位置为中心生成一个矩形
3 挂上API钩子
4 让这个矩形产生重画消息
5 在钩子里等输出字符
6 计算鼠标在哪个单词上面,把这个单词保存下来
7 如果得到单词则摘掉API钩子,在一段时间后,无论是否得到单词都摘掉API钩子
8 用单词查词库,显示解释框。
很多步骤实现起来都有一些难度,所以在中国可以做一个完善的取词词典的人屈指可数。
其中0,1,2,7,8比较简单就不提了。
先说如何挂钩子:
所谓钩子其实就是在WindowsAPI入口写一个JMP XXXX:XXXX语句,跳转到自己的代码里。
步骤如下:
1.取得Windows API入口,用GetProcAddress实现
2.保存API入口的前五个字节,因为JMP是0xEA,地址是4个字节
3.写入跳转语句
这步最复杂
Windows的代码段本来是不可以写的,但是Microsoft给自己留了个后门。
有一个未公开函数是AllocCsToDsAlias,
UINT WINAPI ALLOCCSTODSALIAS(UINT);
你可以取到这个函数的入口,把API的代码段的选择符(要是不知道什么是选择符,就先去学学保护模式编程吧)传给他,他会返回一个可写的数据段选择符。这个选择符用完要释放的。用新选择符和API入口的偏移量合成一个指针就可以写windows的代码段了。
这就是取词技术的最核心的东东,不止取词,连外挂中文平台全屏汉化都是使用的这种技术。现在知道为什么这么简单的几句话却很少知道了吧?因为太多的产品使用他,太多的公司靠他赚钱了。
这些公司和产品有:中文之星,四通利方,南极星,金山词霸,实达铭泰的东方快车,roboword,译典通,即时汉化专家等等等等。。。。还有至少20多家小公司。他们的具体实现虽然不同,但大致原理是相同的。
我这些都是随手写的,也没有提纲之类的东西,以后如果有机会我会整理一下,大家先凑合着看吧!xixi...
?
主题 关于屏幕取词的讨论(三)
作者 亦东

让大家久等,很抱歉,前些时候工作忙硬盘又坏了,太不幸了。
这回来点真格的。
咱们以截取TextOut为例。
下面是代码:
//截取TextOut
typedef UINT (WINAPI* ALLOCCSTODSALIAS)(UINT);
ALLOCCSTODSALIAS AllocCsToDsAlias;
BYTE NewValue[5];//保存新的入口代码
BYTE OldValue[5];//API原来的入口代码
unsigned char * Address=NULL;//可写的API入口地址
UINT DsSelector=NULL;//指向API入口的可写的选择符
WORD OffSetEntry=NULL;//API的偏移量
BOOL bHookAlready = FALSE; //是否挂钩子的标志
BOOL InitHook()
{
HMODULE hKernel,hGdi;
hKernel = GetModuleHandle("Kernel");
if(hKernel==NULL)
return FALSE;
AllocCsToDsAlias = (ALLOCCSTODSALIAS)GetProcAddress(hKernel,"AllocCsToDsAlias");//这是未公开的API所以要这样取地址
if(AllocCsToDsAlias==NULL)
return FALSE;
hGdi = GetModuleHandle("Gdi");
if(hmGdi==NULL)
return FALSE;
FARPROC Entry = GetProcAddress(hGdi,"TextOut");
if(Entry==NULL)
return FALSE;
OffSetEntry = (WORD)(FP_OFF(Entry));//取得API代码段的选择符
DsSelector = AllocCsToDsAlias(FP_SEG(Entry));//分配一个等同的可写的选择符
Address = (unsigned char*)MK_FP(DsSelector,OffSetEntry);//合成地址
NewValue[0]=0xEA;
*((DWORD*)(NewValue+1)) = (DWORD)MyTextOut;
OldValue[0]=Address[0];
*((DWORD*)(OldValue+1)) = *((DWORD*)(Address+1));
}
BOOL ClearHook()
{
if(bHookAlready)
HookOff();
FreeSelector(DsSelector);
}
BOOL HookOn()
{
if(!bHookAlready){
for(int i=0;i<5;i++){
Address[i]=NewValue[i];
}
bHookAlready=TRUE;
}
}
BOOL HookOff()
{
if(bHookAlready){
for(int i=0;i<5;i++){
Address[i]=OldValue[i];
}
bHookAlready=FALSE;
}
}
//钩子函数,一定要和API有相同的参数和声明
BOOL WINAPI MyTextOut(HDC hdc,int nXStart,int nYStart,LPCSTR lpszString,UINT cbString)
{
BOOL ret;
HookOff();
ret = TextOut(hdc,nXStart,nYStart,lpszString,cbString);//调原来的TextOut
HookOn();
return ret;
}
上面的代码是一个最简单的挂API钩子的例子,我要提醒大家的是,这段代码是我凭记忆写的,我以前的代码丢了,我没有编译测试过
因为我没有VC++1.52.所以代码可能会有错。
建议使用Borland c++,按16位编译。
如果用VC++1.52,则要改个选项
在VC++1.52的Option里,有个内存模式的设置,选大模式,和"DS!=SS DS Load on Function entry.",切记,否则会系统崩溃。

热心网友 时间:2024-08-21 12:02

这个问题应该可以解决呀!你有没有想过用SQL(数据库)呀!你把VC++和SQL联系起来就可以了它即可提示更新还可以增加,删除,修改,查询等功能很管用的.

热心网友 时间:2024-08-21 12:01

还没有这些东西里,但是在网站上有直接可以看的
我的电脑在上网时突然网页打不开,桌面图标也打不开,反正所有的操作都不...

这是最基本的了,如果连这个都做不到...(想象一下,如果Windows的任务栏里出现一个国际象棋中木马的图标...@#$%!#@$...也太嚣张了吧!) 在VB中,只要把form的Visible属性设为False, ShowInTaskBar设为False, 程序就不会出现在任务栏中了。 2、在任务管理器中隐形:(就是按下Ctrl+Alt+Del时看不见那个名字...

ai自动写代码

在北京引力弹弓科技有限公司,我们探索AI赋能编程的新纪元。我们的AI自动写代码技术,如同智慧编织者,能够理解项目需求,自动生成高效、准确的代码框架。这一创新不仅提升了开发效率,还激发了编程的无限可能,让创意与技术无缝对接。通过不断学习与优化,我们的AI正逐步成为程序员的得力助手,共同推动软件开发进入智能化、高效化的新时代。MarsCode 为你提供了编程助手和 IDE 来协助你完成编程任务。 MarsCode 编程助手提供以智能代码补全为代表的 AI 功能。它支持主流的编程语言和 IDE,在开发过程中提供单行代码或整个函数的编写建议。此外,它还支持代码解释、单测生成和问题修复...

银保监会提示警惕明星代言金融产品风险

4月22日,银监会在官网发布《关于警惕明星代言金融产品风险的提示》,提醒金融消费者理性看待明星代言,做到“三看一防”,有效防范金融陷阱。银监会指出,近年来,随着网络技术的快速发展,各类互联网平台和理财投资产品层出不穷。一些机构请名人代言或推广,存在过度宣传、承诺高额回报、误导宣传等问题。严重损害了金融消费者...

木马结构

虽然现在市面上有很多新版杀毒软件都可以自动清除“木马”,但它们并不能防范新出现的“木马”程序,“木马”程序会想尽一切办法隐藏自己,主要途径有:在任务栏中隐藏自己,这是最基本的只要把Form的Visible属性设为False、ShowInTaskBar设为False,程序运行时就不会出现在任务栏中了。在任务管理器中隐形:...

通告栏和公告栏 公告栏 一公告栏 安全公告栏 信息公告栏 公告栏图片 公告栏是什么意思 怎么设计公告栏 公告栏设计
声明声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。E-MAIL:11247931@qq.com
excel表格闪退怎么办? excel为什么打开会闪退 重水洗的皮鞋是喷色还是染色 华为注视唤醒设置 厨房的白墙砖被勾缝的白水泥烧黄了怎么办 空调一般尺寸多大的啊 空调尺寸有哪些规格 华硕b660mk内存超频设置 云南买的围巾,在碎纸时,不小心边角给弄进去,弄碎边了,怎么办? 孕期吃烧烤的危害大吗 去对象家吃饭,要比他父母吃得快还是要吃得慢 麦瑞克椭圆机适不适合50岁左右的人用呢? 自动机械表放裤子口袋里可以给手表加动力吗、我上班不让带手表... 百度网盘有免费扩容的容量吗? ...可是家里还有蟑螂,打了药过两天又有了,怎么样才能赶出去啊,~_百度... bady是什么意思(abyd能组合什么单词) 舌系带过短手术最佳年龄 舌系带短最佳手术时间 什么时候做舌系带短缩手术合适 舌系带手术的方法 为什么要割舌系带 什么样的商品在拼多多平台更容易盈利? 为什么word无响应 有什么办法不打呼噜吗 暑期兼职有哪些 治疗打嗝的中医偏方 打嗝的中医治疗 跑步出汗能不能去湿气跑步出汗能排毒是真的吗 众筹平台需要什么资质 做众筹需要什么资质 工商允许一址多照并不在指定地点经营吗 办理的三小营业执照加工的地方可以不跟经营场所在一起的吗 ...最对不起的 是小十三, ​​​是什么意思? 怎样才能定到对方的手机位置? 农历,为什么十一月三十和十二月初一都是乙丑月? xbox360e版s版区别 难看的大眼袋怎么去除呢 这样对付它 dubbing的意思 电路消耗的功率公式是什么 宫颈活检切片怎么保存 筏板加厚区,h=200mmT:&amp;14@160通长+&amp;10@160附加代表啥意思? 胶片上的1a是什么意思 ben*** ovo*** o** m*** 请问AgBr彩色胶片曝光, lomo相机镜头lomo相机是什么 适马胶片机镜头7o一21o是什么卡口 上海是朝东、南、还是北? 在上海,居民住宅的主卧室和阳台大多朝南方向,试说明原因 少!字少... 请问上海的房子,大家都想买朝南的,究竟朝南有什么好处? 国产冷媒回收机找哪家公司比较好