none
請問 SendMessgae 給外部應用程式,它卻沒反應 RRS feed

  • 問題

  • 您好!!!

     

    我打算開啟一個外部應用程式(例如:word),然後當我觸動我表單中的一個事件,就利用以下方式:

     

     // 第一個參數是 word 主視窗的HWND,第四個參數是滑鼠按下 menu 中的 file [註]我是英文版的 office,所以我用 file,而

     // 非檔案來稱呼。

    SendMessage( 0x001803B8, WM_PARENTNOTIFY, WM_LBUTTONDOWN, tempXY );

     

    不過 word 一點反應也沒有,然後我就在 Sendmessage 之前先 SetForegroundWindow((HWND)0x001803B8) 讓它變成作用中的視窗,然後再送 SendMessage(),但還是沒用。所以我應該如何做才能「間接地」點選 word 的功能表?

     

    [註1] 我很確定 SendMessage 中的參數內容,因為我用 Spy++ 看過,直接點跟用 SnedMessage 是一樣的訊息內容,所以

            不知道是遺漏了什麼東西。

    [註2] word 中的功能表(MENU)本身也是一個視窗,所以我有丟給主視窗也有丟給這個MENU所在的視窗,可是也都是沒

            用,在此提出用作參考。

     

    謝謝你們熱心的指導,在下對訊息可能還沒整個弄懂,還請各位多多指導

    2007年10月23日 上午 05:48

解答

  • HI,

     

    如果您是要觸動WORD的FILE功能表, 應該送WM_COMMAND訊息才對, 或是直接送出CTRL+O的鍵盤訊息也可以.

     

    tihs

    2007年10月24日 上午 02:19

所有回覆

  • 建議你先把這本看看:

    Charles Petzold
    Windows 程式開發設計指南
    華彩軟體
    第五版
    2000/6/2
    CD016
    957-8239-73-4
    精裝附光碟

     

    裡面有關滑鼠的部分。

     

    要跨程序控制請針對最外層的 hWnd 處理,各視窗會自己處理內送的部分,另外要注意的是 Office 全系列都是 Unicode Window ,使用 API 時請選用 W 結尾,且字串都必須是 Unicode 等。

     

    並且把 MSDN 裡面關於這個 Window Message 好好看一遍,不是用 Spy++ 就可以一法通用,特別是內部傳遞的部分,你不知道哪些是記憶體共用,哪些是純粹靠 Window Message 來溝通,就算你用對了,對應的記憶體位置沒有該有的變數還是白搭。

    2007年10月23日 上午 08:44
    版主
  • HI,

     

    如果您是要觸動WORD的FILE功能表, 應該送WM_COMMAND訊息才對, 或是直接送出CTRL+O的鍵盤訊息也可以.

     

    tihs

    2007年10月24日 上午 02:19
  •  

    應該不是這樣吧?因為我還只是點選 file 這個選項,要送 WM_COMMAND 應該等到我按下例如 "file->save",點下其中一個 MenuItem 才會送出 WM_COMMAND
    2007年10月24日 上午 02:23