熱點推薦:
您现在的位置: 電腦知識網 >> 編程 >> Delphi編程 >> 正文

Delphi學堂之綁架窗體之Delphi版

2013-11-23 17:29:53  來源: 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;
From:http://tw.wingwit.com/Article/program/Delphi/201311/24689.html
    推薦文章
    Copyright © 2005-2013 電腦知識網 Computer Knowledge   All rights reserved.