none
如何將 Form 裏的 WndProc 打包成一個DLL RRS feed

  • 問題

  • 請問!

    A程式利用Sendmessage傳資料給B程式!

    在B程式內, 我用覆寫 WndProc 去處理A所丟過來的資料! 以上, 沒有問題!

    但.....

    由於A丟過來的資料需要處理, 所以, 我想要寫一個 class 並封成一個 dll 去處理這個工作!

    這裏就有問題了! sendmessage 的對像是一個 "視窗", 所以,

    1. sendmessage 要丟給誰? 即 hWnd 的內容, 對像?

    2. WndProc 是 Form 裏的一個函式, 我在dll中我如何去接受這個訊息, 並處理它!

    謝謝!


    • 已編輯 GaryChiang 2019年9月25日 上午 12:34
    2019年9月23日 下午 12:17

解答

所有回覆

  • 2019年9月23日 下午 10:18
  • hWnd 是 handle of window ,所以 WndProc 可以做成 DLL 被回呼。

    所以:

    1. DLL 做成可視元件,就是往 DLL 送,DLL 只是不可視的類別庫,就要由別的可視元件來接收轉送。

    2. 你可以參考 Charles Petzold 關於視窗介面的書,VBNET / C# / WPF 都有,裡面有很多範例。


    不精確的問法,就會得到隨便猜的答案;自己都不肯花時間好好描述問題,又何必期望網友會認真回答?

    2019年9月24日 下午 02:34
  • 目前嘗試用 Hook (SetWindowsHookEx) 的方法去做! 

    對於KEY或MOUSE的訊號可以攔截的到! 

    public void HookStart()
            {
                if (iMessageHook == 0)
                {
                    MessageHookProc = new HookProc(MyMessageHookProc);
                    iMessageHook = SetWindowsHookEx(2, MessageHookProc, IntPtr.Zero, GetCurrentThreadId());
                }
            }

    但, 對於 sendmessage 所傳過來的資料! 目前還是無法攔截!

    public void HookStart()
            {
                if (iMessageHook == 0)
                {
                    MessageHookProc = new HookProc(MyMessageHookProc);
                    iMessageHook = SetWindowsHookEx(4, MessageHookProc, IntPtr.Zero, GetCurrentThreadId());
                }
            }

    目前...努力中!

    2019年9月25日 上午 12:33
    • 已標示為解答 GaryChiang 2019年9月25日 上午 01:07
    2019年9月25日 上午 01:07