绑架窗体之Delphi版

思绪理性一点

思绪理性一点

2016-02-19 18:24

有一种朋友不在生活里,却在生命力;有一种陪伴不在身边,却在心间。图老师即在大家的生活中又在身边。这么贴心的服务你感受到了吗?话不多说下面就和大家分享绑架窗体之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;

(本文来源于图老师网站,更多请访问http://m.tulaoshi.com/bianchengyuyan/)

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

(本文来源于图老师网站,更多请访问http://m.tulaoshi.com/bianchengyuyan/)

  更多请见:http://lincosoft.go.nease.net/

展开更多 50%)
分享

猜你喜欢

绑架窗体之Delphi版

编程语言 网络编程
绑架窗体之Delphi版

Delphi实现窗体控件自由摆布

Delphi
Delphi实现窗体控件自由摆布

s8lol主宰符文怎么配

英雄联盟 网络游戏
s8lol主宰符文怎么配

模拟delphi编辑窗体操作控件

编程语言 网络编程
模拟delphi编辑窗体操作控件

用Delphi实现快闪窗体信息提示

Delphi
用Delphi实现快闪窗体信息提示

lol偷钱流符文搭配推荐

英雄联盟 网络游戏
lol偷钱流符文搭配推荐

在Delphi中巧改窗体文件实现控件数组

编程语言 网络编程
在Delphi中巧改窗体文件实现控件数组

在Delphi中巧改窗体文件实现控件数组化

Delphi
在Delphi中巧改窗体文件实现控件数组化

lolAD刺客新符文搭配推荐

英雄联盟
lolAD刺客新符文搭配推荐

Delphi实现Singleton模式

Delphi实现Singleton模式

Win7系统访问指定网页的2个妙招

Win7系统访问指定网页的2个妙招
下拉加载更多内容 ↓