AkulaBig
|
Posted: Fri Jul 30, 2021 21:41 Post subject: |
|
|
Проблему локализовал. Дело в том, вообще что не удается стандартными методами (через CreateProcessA, либо через ShellExecuteEx) вставить вызов любой программы в дочернее окно. Внешнее приложение всегда запускается в отдельном окне. В SumatrePDF для запуска ее в дочернем окне есть специальный недокументированный ключ -plugin. Вот код этого ключа:
Code: | // in order to host SumatraPDF as a plugin, create a (child) window and
// handle the following messages for it:
LRESULT CALLBACK PluginParentWndProc(HWND hwnd, UINT msg, WPARAM wp, LPARAM lp) {
if (WM_CREATE == msg) {
// run SumatraPDF.exe with the -plugin command line argument
PluginStartData* data = (PluginStartData*)((CREATESTRUCT*)lp)->lpCreateParams;
AutoFreeWstr cmdLine(str::Format(L"-plugin %d \"%s\"", hwnd, data->filePath));
if (data->fileOriginUrl) {
cmdLine.Set(str::Format(L"-plugin \"%s\" %d \"%s\"", data->fileOriginUrl, hwnd, data->filePath));
} |
Есть у кого-нибудь идеи, как это использовать из внешнего кода, то-есть который я пишу? |
|