其他语言

位置:IT落伍者 >> 其他语言 >> 浏览文章

Delphi学堂之绑架窗体之Delphi版


发布日期:2021年08月18日
 
Delphi学堂之绑架窗体之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 TFormButtonClick(Sender: TObject);

begin

hwndNotePad:=FindWindow(PChar(Notepad));

hwndOldParent:=GetParent(hwndNotePad);

WindowsSetParent(hwndNotePadhandle);

end;

procedure TFormFormDestroy(Sender: TObject);

begin

WindowsSetParent(hwndNotePadhwndOldParent);

end;

上一篇:自定义事件实现不同窗体间的通讯Delphi篇

下一篇:为Delphi编写的屏幕保护程序增加描述