绑架窗体之Delphi版

2016-02-19 18:24 12 1 收藏

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

【 tulaoshi.com - 编程语言 】

 

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

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

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

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

  
  代码:
  在窗体的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;

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

来源:http://www.tulaoshi.com/n/20160219/1617573.html

延伸阅读
标签: Delphi
一、组件的简要层次结构 一般情况下,VCL的组件可以从Tcomponent为开始。其最明显的特征就是它的属性可以在设计时通过对象察看器来操纵,另外,他还能拥有其他组件。 从Tcomponent下,分出非可视组件和可视组件。 非可视组件如TOPenDialog,TTimer,TTable等,这些组件因为继承自Tomponent,所以也就继承了在设计时可以被...
标签: Delphi
   Delphi 编辑器   在表面上,对IDE的第7个版本来说Delphi的编辑器看来似乎没有改变许多。 然而,在幕后,它是一个全新的工具。 除了用它来处理Object Pascal 语言(或者Delphi语言,Borland   现在喜欢如此称呼它)的文件之外,你现在能使用它来处理其它用于Delphi开发(诸如SQL,XML,HTML,和XSL文件)的文件...
几乎所有正式一点的C++ Builder程序除了主窗体外都还有从属窗体,有时是对话框,有时是无模式窗口。VCL使得创建和显示从属窗体都易如反掌。但不是所有程序都适于采用无模式窗体,有些程序需要在一个主窗体内显示不同的内容。本文讨论如何将一个从属窗体寄居于主窗体中,从属窗体看上去是主窗体的一部分,用户甚至不知道一个从窗体正被显示...
保持冷静 被绑架后,你一定要胆大沉着机智,不能硬定,而要装着顺从的样子,去软化绑架者,使绑架者放松对你的戒备。 随时求救 当你发现自己被绑架了,如果周围有路人,千万不要错过这绝佳的机会,你一定要大声喊求救,你的喊叫会让犯罪分子胆战心惊,从而放弃绑架。 不要刺激绑匪 一定要记住,你被绑架时,只要...
Private mouse_offset As Point Private Sub form1_MouseDown(ByVal sender As Object, ByVal e As System.Windows.Forms.MouseEventArgs) Handles MyBase.MouseDown mouse_offset = New Point(e.X, e.Y) End Sub Private Sub form1_MouseMove(ByVal Sender As System.Object, ByVal e As System.Windows.Forms.MouseEventArgs) Handles MyB...

经验教程

594

收藏

77
微博分享 QQ分享 QQ空间 手机页面 收藏网站 回到头部