0

ウィンドウエクスプローラーの右クリックコンテキストメニュー機能からの「送信先」のサポートをMFCアプリケーションに追加しようとしています。このために、コマンドライン引数を解析m_lpCmdLineInitInstance()てファイルパスを取得し、それを開きました。これは、アプリケーションが実行されていない場合です。

ただし、アプリケーションがすでに実行されている場合。この場合、新しいインスタンスを作成したくありません。

これらのコマンドラインオプションを既存のインスタンスに渡すために必要なもの。

どんな提案も非常に役に立ちます。

ありがとう!

4

1 に答える 1

1

解決策を見つけてくれてありがとう!

開いているインスタンスのハンドルと、CMainFrameクラスで処理されるデータとともに送信メッセージを見つける必要があります。

CWnd*  pCWnd;
if(pCWnd = CWnd::FindWindow(_T("MyApplication"), NULL))
{
    if(m_lpCmdLine != '\0')
    {
        COPYDATASTRUCT cds;
        memset(&cds, 0, sizeof(cds));

        cds.dwData = MY_ACTION;
        cds.cbData = strlen(m_lpCmdLine) + 1;
        cds.lpData = (LPVOID) (LPCTSTR)m_lpCmdLine;

        pCWnd->SendMessage(WM_COPYDATA,(WPARAM)NULL, (LPARAM)&cds);
    }
}

今、

MainFrame::OnCopyData()
{
}

この値を取得できます。

詳細については、「Win32のマルチスレッドアプリケーション」のプロセス間通信の章を参照してください。

于 2012-10-25T07:09:01.830 に答える