none
关于调用SetWindowLong的问题 RRS feed

  • 问题

  • 有下列代码:

        [DllImport("user32.dll")]
        static extern int SetWindowLong(IntPtr hWnd, uint nIndex, Delegate dwNewLong);
        [DllImport("user32.dll")]
        static extern IntPtr DefWindowProc(IntPtr hWnd, uint uMsg, IntPtr wParam, IntPtr lParam);
        private delegate IntPtr _WndProc(IntPtr hwnd, uint uMsg, IntPtr wParam, IntPtr lParam);
        private void button1_Click(object sender, EventArgs e)
        {
          SetWindowLong(this.Handle, 0x00FFFFFFFC, new _WndProc((hwnd, uMsg, wParam, lParam) => WndProc(hwnd, uMsg, wParam, lParam)));
        }
        IntPtr WndProc(IntPtr hwnd, uint uMsg, IntPtr wParam, IntPtr lParam)
        {
          switch (uMsg)
          {
            case 0x0201:
              MessageBox.Show("aaa");
              return (IntPtr)0;
            default:
              return DefWindowProc(hwnd, uMsg, wParam, lParam);
          }
        }

    如果讲this.Handle改为其他窗口的窗口句柄(外部程序),就会失效,请问该如何解决? 


    我是包子!
    2011年6月10日 22:57

答案

  • 看看 MSDN 的说明,DefWndProc 只能设置当前进程拥有的线程的句柄上。其他的非拥有句柄肯定不生效。
    Mark Zhou
    • 已标记为答案 Aspen VJ 2011年6月20日 1:24
    2011年6月13日 10:27