簡體   English   中英

MS Word自動化,雙向通信

[英]MS Word automation with 2 way communication

我正在使用Win32 SetParent函數在我的應用程序中嵌入MS Word。 一切正常,但需要從Word自定義工具欄按鈕到父應用程序進行回調。 Word實例嵌入在用戶控件中,因此父級是this.Handle。

VBA代碼如下所示:

Sub Submit()
Dim hwnd As Long
hwnd = FindWindow("Opusapp", vbNullString)
hwnd = GetAncestor(hwnd, GA_PARENT)
If hwnd = 0 Then
    MsgBox "Failed to callback!"
    Exit Sub
End If
OutputDebugString ("Parent window " + CStr(hwnd))
Dim id As Long
id = RegisterWindowMessage("__CALLBACK_FROM_WORD__")
If hwnd = 0 Then
    MsgBox "Failed to callback. Message not registered"
    Exit Sub
End If
OutputDebugString ("Message " + CStr(id))
End Sub

在C#中,代碼是這樣的:

        protected override void OnHandleCreated(EventArgs e)
    {
        submitMessageId_ = RegisterWindowMessage("__CALLBACK_FROM_WORD__");
        base.OnHandleCreated(e);
    }

    protected override void OnHandleDestroyed(EventArgs e)
    {
        base.OnHandleDestroyed(e);
    }

    protected override void WndProc(ref Message m)
    {
        if (m.Msg == submitMessageId_)
        {
            Logger.Instance().Write("WndProc: Submit event");
            return;
        }
        base.WndProc(ref m);
    }

問題似乎是VBA無法找到正確的窗口句柄。 我嘗試使用GetParent無濟於事。

問題可能是, FindWindow已經返回一個頂級窗口(即嵌入Word的窗口)。 IMO沒有必要調用GetAncestor ,這總是返回桌面窗口...

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM