- 论坛徽章:
- 0
|
看看C++ 教材中是如何给句柄下定义的:“在Win32里,句柄是指向一个无值型对象(void *)的指针,是一个4字节长的数据”。虽然我对它的本质是什么还是很迷惑,但我知道句柄并不是一个真正意义上的指针。从结构上看,句柄的确是一个指针,尽管它没有指向用于存储某个对象的内存位置(很多书都这么说,这正是我的迷惑所在),而实际上句柄指向的是一个包含了对该对象进行的引用的位置。在编程时,只要抓住了对象的句柄就可以对该对象进行操作了(我在《一个简单木马程序的编写与伪装策略》中说到的对QQ密码的截获就是要找到QQ登陆窗口的句柄后才开始截密行动的)。下面再举个例子来说明句柄的运用:编一个程序,使QQ登陆窗口的号码框和密码框均变黑,相关代码及解释: \r\n\r\nvoid __fastcall TForm1::FormCreate(TObject *Sender) \r\n{ \r\nHWND hCurWindow,HC,HE;//定义三个窗口句柄变量,hCurWindow用于存放QQ用户登陆窗口的句柄,HC、HE分别存放 \r\n//号码框和密码框的句柄。 \r\nif((hCurWindow= FindWindow(NULL,\"QQ用户登录\" )!=0||(hCurWindow=FindWindow(NULL,\"OICQ用户登录\" )!=0) \r\n{//很明显,调用FindWindow()函数去获得QQ登陆窗口的句柄 \r\nString str; \r\nstr.sprintf(\"0x%x\",hCurWindow); \r\n} \r\nTCHAR wClassName[255];//类名变量 \r\nHC=GetWindow(hCurWindow, GW_CHILD);//得到号码框的句柄 \r\nHE=GetWindow(HC, GW_HWNDNEXT);//接着得到密码框的句柄 \r\nGetClassName(HE, wClassName, sizeof(wClassName));//得到类名 \r\nGetClassName(HC, wClassName, sizeof(wClassName));//得到类名 \r\nEnableWindow(HE,false);//使窗口失效 \r\nEnableWindow(HC,false);//使窗口失效 \r\n} \r\n\r\n \r\n\r\n 以上代码在C++Builder下编译通过,只要运行次程序,QQ登陆窗口的号码框和密码框马上变黑色,无非是EnableWindow()函数所起的作用。 \r\n\r\n 你还可以添加一个Timer控件,将上面的代码copy到void __fastcall TForm1::Timer1Timer \r\n\r\n(TObject *Sender)函数中,并在后边加上这一句代码: \r\n\r\nSendMessage(hCurWindow,WM_CLOSE,0,0); 使QQ一启动就关闭,让别人永远也用不了QQ,挺有趣儿的哦 . \r\n\r\n ⒏API与SDK:API是英文 Application Programming Interface 的简称,意为“应用程序接口”,泛指系统为应用程序提供的一系列接口函数。其实质是程序内的一套函数调用,在编程的时候可以直接调用,而不必知道其内部实现的过程,只知道它的原型和返回值就可以了,此外,手头经常放着一本“Windows API大全”之类的书也是必不可少的,不然你根本不知道哪些API是干什么用的,瞎编也编不出什么东西来。在后面我们会介绍调用API编程的例子,调用API编程工作虽然烦琐,但由于API函数都被封装在dll库里,程序只有在运行的时候才调用的,因此程序的体积小而且运行效率高。 \r\n\r\n SDK是英文 Software Development Kit 的缩写,指“软件开发工具包”,在防火墙的设计中就经常涉及到SDK。 \r\n\r\n 有关基本的概念就谈这些,那些C/C++的基本语法、什么是面向对象等知识请大家查阅相关的书,此类书籍各大书店已汗牛充栋,不再多叙。下面直接谈谈语种和编程工具的选择问题,这也是初学者们最迷惑的问题。 |
|