none
如何將SendMessage(int hWnd, int hMsg, int wParam, int lParam) 在WPF中使用? RRS feed

  • 問題

  • 小弟在做一個控制螢幕的程式

    常見的多是以

    SendMessage(int hWnd, int hMsg, int wParam, int lParam); 去控制(不曉得還有其他辦法嗎?)

    我在以下WPF 的容器 Windows 裡

    protected override void OnSourceInitialized(EventArgs e)
            {
                base.OnSourceInitialized(e);
                HwndSource hwndSource = PresentationSource.FromVisual(this) as HwndSource;
                if (hwndSource != null)
                {
                    hwndSource.AddHook(new HwndSourceHook(this.WndProc));
                }
            }
            IntPtr WndProc(IntPtr hwnd, int msg, IntPtr wParam, IntPtr lParam, ref bool handled)
            {

                .................

                return IntPtr.Zero;
            }

     想說這樣可以用, 但是會發生'System.StackOverflowException' 的例外

    是我方法錯誤嗎?

    還是有其他作法?

    感謝解答

    2010年9月6日 上午 09:17

所有回覆

  • 您好 godsing ,

    請問有詳細的錯誤訊息嗎~?

    貼上來看看看吧~~~



    Best regards



    • 已編輯 DK. Da 2012年6月10日 上午 01:32
    2010年9月6日 下午 12:24
  •         IntPtr WndProc(IntPtr hwnd, int msg, IntPtr wParam, IntPtr lParam, ref bool handled)
            {
                const int WM_SYSCOMMAND = 0x0112;
                const int SC_MONITORPOWER = 0xF170;


                    SendMessage((int)hwnd, WM_SYSCOMMAND, SC_MONITORPOWER, (int)MonitorStateEnum.MONITOR_OFF);

                    return IntPtr.Zero;
            }

    以上是程式碼

    詳細例外是以下

    無法評估運算式,因為目前的執行緒處於堆疊溢位的狀態

    2010年9月6日 下午 12:37
  • 應該在適當的時機將handled設為true

     


    先查MSDN文件庫
    再用GOOGLE搜尋
    才到論壇來發問

    這是論壇不是技術支援中心
    沒有人得無償解答你的問題

    在標題或文章註明很急
    不會增加網友回覆速度
    2010年9月6日 下午 01:46
  • WndProc是處理訊息的程序, 也就是會一直收到各式各樣的訊息, 您的程式這樣寫, 就會在一收到訊息時又透過SendMessage發出訊息, 當然會出錯了. 至少應該寫成這樣:MessageWindow.WndProc 方法
    2010年9月7日 上午 05:37