在高优先级程序中调用
typedef BOOL (WINAPI FAR *ChangeWindowMessageFilterEx_PROC)(HWND,UINT,DWORD,PCHANGEFILTERSTRUCT);
ChangeWindowMessageFilterEx_PROC m_pfnChangeWindowMessageFilterEx;
m_pfnChangeWindowMessageFilterEx = (ChangeWindowMessageFilterEx_PROC)::GetProcAddress (::GetModuleHandle(_T("USER32")),"ChangeWindowMessageFilterEx");
if (m_pfnChangeWindowMessageFilterEx)
{
m_pfnChangeWindowMessageFilterEx(hWnd, WM_COPYDATA, MSGFLT_ALLOW, NULL);
}
低优先级中使用
COPYDATASTRUCT oCopyData = {0};
oCopyData.dwData = 0;
oCopyData.cbData = (strCmdLine.length() + 1) * sizeof(TCHAR);
oCopyData.lpData = (PVOID)strCmdLine.c_str();
nRet = ::SendMessage(hWndPrevious, WM_COPYDATA, 0, (LPARAM)&oCopyData);
break;
高优先级中接收
if(message == WM_COPYDATA)
{
COPYDATASTRUCT *pCD = (COPYDATASTRUCT*)lParam;
LPTSTR lpCmdLine = (LPTSTR)pCD->lpData;
if(pCD->cbData > sizeof(TCHAR) && lpCmdLine[pCD->cbData / sizeof(TCHAR)] == _T('\0'))
{
ExecuteApkInstallerFromCommandLine(lpCmdLine);
}
}