C++與C#介面通訊[部分為轉載,具體看附件連結]
阿新 • • 發佈:2019-02-04
//內嵌到MFC的某個視窗中,視窗控制代碼為hhwnd
CRect rect;
GetClientRect(hhwnd, &rect);
LPCTSTR args = _T("");
PROCESS_INFORMATION processInfo;
STARTUPINFO startupInfo;
::ZeroMemory(&startupInfo, sizeof(startupInfo));
startupInfo.cb = sizeof(startupInfo);
startupInfo.dwFlags = STARTF_USESHOWWINDOW;
startupInfo.wShowWindow = SW_HIDE;
if(::CreateProcess(cstrFilePath, (LPTSTR)args, NULL, NULL, FALSE, 0, NULL, NULL, &startupInfo, &processInfo))
{
//延遲0.5s,等待程序建立成功
Sleep(500);
while(true)
{
::EnumWindows(&EnumWindowsProc, processInfo.dwThreadId);//Iterate all windows
if(NULL != apphWnd)
{
break;
}
}
HANDLE hPro = processInfo.hProcess;
if(apphWnd!=NULL)
{
::SetParent(apphWnd,hhwnd );
SetWindowLong(apphWnd, GWL_STYLE, WS_VISIBLE);
::MoveWindow(apphWnd, 0, 0,rect.right, rect.bottom, true);
::UpdateWindow(apphWnd);
::ShowWindow(apphWnd,SW_SHOW);
}
}
CRect rect;
GetClientRect(hhwnd, &rect);
LPCTSTR args = _T("");
PROCESS_INFORMATION processInfo;
STARTUPINFO startupInfo;
::ZeroMemory(&startupInfo, sizeof(startupInfo));
startupInfo.cb = sizeof(startupInfo);
startupInfo.dwFlags = STARTF_USESHOWWINDOW;
startupInfo.wShowWindow = SW_HIDE;
if(::CreateProcess(cstrFilePath, (LPTSTR)args, NULL, NULL, FALSE, 0, NULL, NULL, &startupInfo, &processInfo))
{
//延遲0.5s,等待程序建立成功
Sleep(500);
while(true)
{
::EnumWindows(&EnumWindowsProc, processInfo.dwThreadId);//Iterate all windows
if(NULL != apphWnd)
{
break;
}
}
HANDLE hPro = processInfo.hProcess;
if(apphWnd!=NULL)
{
::SetParent(apphWnd,hhwnd
SetWindowLong(apphWnd, GWL_STYLE, WS_VISIBLE);
::MoveWindow(apphWnd, 0, 0,rect.right, rect.bottom, true);
::UpdateWindow(apphWnd);
::ShowWindow(apphWnd,SW_SHOW);
}
}