綁架窗體
顧名思義
就是將其它應用程序甚至系統程序的窗體活生生地拖進本程序的窗體內
這種未征得其它程序同意的強行
綁架
行為在某些場合下卻能發揮出非常獨特的作用
本文將討論
綁架
窗體的技術及應用
並給出了一個完整的
強盜
程序的例子
從技術上講
為了實現
綁架
強盜
程序中必須要有一個 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 TForm
Button
Click(Sender: TObject);
begin
hwndNotePad:=FindWindow(PChar(
Notepad
)
);
hwndOldParent:=GetParent(hwndNotePad);
Windows
SetParent(hwndNotePad
handle);
end;
procedure TForm
FormDestroy(Sender: TObject);
begin
Windows
SetParent(hwndNotePad
hwndOldParent);
end;
From:http://tw.wingwit.com/Article/program/Delphi/201311/24689.html