VC實現A程序視窗嵌入到B程序視窗中顯示的方法

2021-09-27 07:59:42 字數 1162 閱讀 2077

本文通過乙個demo示例講述把a應用程式嵌入到b應用程式中顯示的方法。

主要**如下:?

//在b應用啟動時建立a程序

createprocess(_t("a.exe"),null,null,null,false,create_new_console,null,null,null,null);

sleep(30);

hwndhwndchild = findwindow(_t("aaa"),_t("aaa"));

while(!hwndchild)

//移動a程序視窗位置

movewindow(hwndchild,80,20,240,320,true);

//a程序視窗嵌入b程序視窗中

setparent(hwndchild,hwnd);

這是從msdn裡面對setparent的使用描述,說setparent要嵌入的視窗必須和被嵌入的視窗屬於同乙個應用程式,其實不然,不過setparent返回的確實是乙個null,這是因為a程序中的視窗並不存在父視窗,而setparent呼叫後會返回父視窗的控制代碼,故返回null。但是卻不會影響a程序視窗嵌入。

在b程序視窗顯示時收到的wm_active中先會收到wa_active或者wa_clickactive,然後也會收到wa_inactive引數,也就是說在某個時候,b程序沒有被置為最前視窗,這應該是當呼叫setparent時,影響了b程序視窗。如果你希望b程序視窗收到wm_active訊息,必須呼叫setforegroundwindow(hwnd),如果當前視窗不是最前視窗時,退出或者最小化時不會收到wm_active訊息中的wa_inactive。尤其做巢狀應用程式的**中,應該牢記於心。

除此以外,當使用setparent(hwndchild,hwnd)把a程序到b程序視窗中時,這時使用findwindow查詢到a程序的視窗控制代碼為null。

vc 實現核心級程序保護

保護核心 include ntddk.h define nt device name l device protectprocess define dos device name l dosdevices protectprocess define ioctl protect control ctl...

vc 實現核心級程序保護

保護核心 include ntddk.h define nt device name l device protectprocess define dos device name l dosdevices protectprocess define ioctl protect control ctl...

vc實現列印當前程序列表和程序位址

pragma comment lib,psapi.lib void printprocessnameandid dword processid print the process name and identifier.tprintf text s pid u s n szprocessname,p...