本文通過乙個demo示例講述把a應用程式嵌入到b應用程式中顯示的方法。
主要**如下:?
//在b應用啟動時建立a程序
createprocess(_t(
"a.exe"
),null,null,null,false,create_new_console,null,null,null,null);
sleep(30);
hwnd
hwndchild = 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...