咨询:域名主机客服!261689845 建站:网站建设请点我!173022933 推广:网站推广请点我!452936608 销售:域名主机客服309128758 客户体验 | 售后平台 | 代理加盟 | 客户口碑

 

绑架窗体之delphi版 - 新闻中心 - 南宁巨人网络
绑架窗体之delphi版
时间:2013/2/23 16:52:17    来源:南宁巨人网络    浏览次数:377次
【字体大小:    】    【温馨提示:双击可滚动页面,单击则停止滚动。】

绑架窗体之delphi版

“绑架窗体”:顾名思义,就是将其它应用程序甚至系统程序的窗体活生生地拖进本程序的窗体内。这种未征得其它程序同意的强行“绑架”行为在某些场合下却能发挥出非常独特的作用。本文将讨论“绑架”窗体的技术及应用,并给出了一个完整的“强盗”程序的例子。
从技术上讲,为了实现“绑架”,“强盗”程序中必须要有一个 MDIForm对象。


实现“绑架”的第二个条件,是必须知道被“绑架”窗体的句柄。做到这一点并不难。比如,当鼠标在屏幕上滑动时,我们可以用 API函数GetCursorPos来获得鼠标指针的当前位置坐标,然后用另一个 API函数 WindowFromPoint来获得指定点窗口的句柄。或者使用FindWindow获得窗口句柄。
有了上述两个条件,“强盗”程序就可以开始实施“绑架”了:首先用 API函数GetWindow 的GW_CHILD命令来寻找本程序第一个子窗口的句柄;然后用另一个 API函数 SetParent为被“绑架”窗体指定一个“新父”,即指向上面的子窗口的句柄。立刻,两个原本毫无关系的窗体具有了“父子”关系:被“绑架”窗口出现在“强盗”窗体内部!
二、“绑架”的安全性
不分青红皂白地进行“绑架”是非常危险的。但只要遵守以下两个原则就可以保证安全性:
第一,在关闭“强盗”程序之前,把被“绑架”窗体用 SetParent函数“释放”掉,即恢复被“绑架”者的原来的“父亲”。
第二,不要“绑架”系统窗口。系统窗口一般有:任务栏窗口、按下“开始”产生的窗口、按下“Ctrl+Alt+Del”产生的窗口,点击鼠标右键产生的窗口,等等。
绑架”技术在VB中有广泛的应用,例如,可在程序运行中将控件置入容器控件内部(比如将一个按钮设成图象或窗体控件的子窗口),或者将控件从一个容器移至窗体中的另一个。


代码:
在窗体的private中定义  
hwndOldParent:HWND;
    hwndNotePad:HWND;

将窗口的FormStyle设为fsMDIForm

procedure TForm1.Button1Click(Sender: TObject);
begin
hwndNotePad:=FindWindow(PChar(Notepad),0);
hwndOldParent:=GetParent(hwndNotePad);
Windows.SetParent(hwndNotePad,handle);

end;

procedure TForm1.FormDestroy(Sender: TObject);
begin
Windows.SetParent(hwndNotePad,hwndOldParent);
end;

        



关于我们 | 网站公告 | 参观机房 | 合作伙伴 | 代理合作 | 付款方式 | 法律声明 | 常见问题 | 在线留言 | 服务监督 | 联系我们 | 南宁网站建设
 
地址:广西南宁市广西大学正门左侧火炬路17号金达花园7栋2单元241室  邮编:530001  
业务邮箱:    技术邮箱:   财务邮箱:
在线服务空间域名:网站推广请点我!261689845 网站建设:网站建设请点我!309331800 网站推广:网站推广请点我!452936608 售后技术支持:网站推广请点我!309128758
代理合作:网站推广请点我!173022933 全国业务客服电话:0771-3824424  找巨人?  到巨人?
版权所有南宁市巨人网络 未经授权,禁止使用 中华人民共和国备案编号 :桂ICP备06014082号