static void OpenUsingDde(const TCHAR *filePath, CommandLineInfo& i, bool isFirstWin) { // delegate file opening to a previously running instance by sending a DDE message TCHAR fullpath[MAX_PATH]; GetFullPathName(filePath, dimof(fullpath), fullpath, NULL); ScopedMem<TCHAR> cmd(str::Format(_T("[") DDECOMMAND_OPEN _T("(\"%s\", 0, 1, 0)]"), fullpath)); DDEExecute(PDFSYNC_DDE_SERVICE, PDFSYNC_DDE_TOPIC, cmd); if (i.destName && isFirstWin) { cmd.Set(str::Format(_T("[") DDECOMMAND_GOTO _T("(\"%s\", \"%s\")]"), fullpath, i.destName)); DDEExecute(PDFSYNC_DDE_SERVICE, PDFSYNC_DDE_TOPIC, cmd); } else if (i.pageNumber > 0 && isFirstWin) { cmd.Set(str::Format(_T("[") DDECOMMAND_PAGE _T("(\"%s\", %d)]"), fullpath, i.pageNumber)); DDEExecute(PDFSYNC_DDE_SERVICE, PDFSYNC_DDE_TOPIC, cmd); } if ((i.startView != DM_AUTOMATIC || i.startZoom != INVALID_ZOOM || i.startScroll.x != -1 && i.startScroll.y != -1) && isFirstWin) { const TCHAR *viewMode = DisplayModeConv::NameFromEnum(i.startView); cmd.Set(str::Format(_T("[") DDECOMMAND_SETVIEW _T("(\"%s\", \"%s\", %.2f, %d, %d)]"), fullpath, viewMode, i.startZoom, i.startScroll.x, i.startScroll.y)); DDEExecute(PDFSYNC_DDE_SERVICE, PDFSYNC_DDE_TOPIC, cmd); } if (i.forwardSearchOrigin && i.forwardSearchLine) { ScopedMem<TCHAR> sourcePath(path::Normalize(i.forwardSearchOrigin)); cmd.Set(str::Format(_T("[") DDECOMMAND_SYNC _T("(\"%s\", \"%s\", %d, 0, 0, 1)]"), filePath, sourcePath, i.forwardSearchLine)); DDEExecute(PDFSYNC_DDE_SERVICE, PDFSYNC_DDE_TOPIC, cmd); } }
static void OpenUsingDde(HWND targetWnd, const WCHAR *filePath, CommandLineInfo& i, bool isFirstWin) { // delegate file opening to a previously running instance by sending a DDE message WCHAR fullpath[MAX_PATH]; GetFullPathName(filePath, dimof(fullpath), fullpath, NULL); str::Str<WCHAR> cmd; cmd.AppendFmt(L"[" DDECOMMAND_OPEN L"(\"%s\", 0, 1, 0)]", fullpath); if (i.destName && isFirstWin) { cmd.AppendFmt(L"[" DDECOMMAND_GOTO L"(\"%s\", \"%s\")]", fullpath, i.destName); } else if (i.pageNumber > 0 && isFirstWin) { cmd.AppendFmt(L"[" DDECOMMAND_PAGE L"(\"%s\", %d)]", fullpath, i.pageNumber); } if ((i.startView != DM_AUTOMATIC || i.startZoom != INVALID_ZOOM || i.startScroll.x != -1 && i.startScroll.y != -1) && isFirstWin) { const WCHAR *viewMode = prefs::conv::FromDisplayMode(i.startView); cmd.AppendFmt(L"[" DDECOMMAND_SETVIEW L"(\"%s\", \"%s\", %.2f, %d, %d)]", fullpath, viewMode, i.startZoom, i.startScroll.x, i.startScroll.y); } if (i.forwardSearchOrigin && i.forwardSearchLine) { ScopedMem<WCHAR> sourcePath(path::Normalize(i.forwardSearchOrigin)); cmd.AppendFmt(L"[" DDECOMMAND_SYNC L"(\"%s\", \"%s\", %d, 0, 0, 1)]", fullpath, sourcePath, i.forwardSearchLine); } if (!i.reuseDdeInstance) { // try WM_COPYDATA first, as that allows targetting a specific window COPYDATASTRUCT cds = { 0x44646557 /* DdeW */, (DWORD)(cmd.Size() + 1) * sizeof(WCHAR), cmd.Get() }; LRESULT res = SendMessage(targetWnd, WM_COPYDATA, NULL, (LPARAM)&cds); if (res) return; } DDEExecute(PDFSYNC_DDE_SERVICE, PDFSYNC_DDE_TOPIC, cmd.Get()); }