我偿试用三种不同的api函数来向IE地址栏发送回车键,但是postmessage 和 sendmessage都不能真正完成回车的功能,似乎只有换行的功能,只有keybd_event完成了回车的功能,有朋友知道使用postmessage 和 sendmessage怎么样才能完成回车功能吗?我的代码:        [DllImport("user32.dll", EntryPoint = "SendMessage")]
        public static extern int SendMessage(
            int hwnd,
            int wMsg,
            int wParam,
            int lParam
        );        [DllImport("user32.dll", EntryPoint = "PostMessage")]
        public static extern int PostMessage(
            int hwnd,
            int wMsg,
            int wParam,
            int lParam
        );
        
        [DllImport("user32.dll")]
        static extern void keybd_event(Keys bVk, byte bScan, uint dwFlags, uint dwExtraInfo);        private const int WM_KEYDOWN = 0x100;
        private const int WM_KEYUP = 0x101;
        private const int WM_CHAR = 0x102;
        private const int WM_SETFOCUS = 0x007;
        private int VK_RETURN = 13;        private void timer1_Tick(object sender, EventArgs e)
        {
            PostMessage(3150852, WM_SETFOCUS, 0, 0);//设焦点            SendMessage(3150852, WM_KEYDOWN, VK_RETURN, 0);//SendMessage发送回车
            SendMessage(3150852, WM_CHAR, VK_RETURN, 0);
            SendMessage(3150852, WM_KEYUP, VK_RETURN, 0);            keybd_event(Keys.Enter, 0, 0, 0);//keybd_event发送回车
  
            PostMessage(3150852, WM_KEYDOWN, VK_RETURN, 0);//PostMessage发送回车
        }

解决方案 »

  1.   

    我用 vc 测试是正常的, 就用 pEdit->SendMessage(WM_KEYDOWN, VK_RETURN, 0);
      

  2.   

    这个315082是地址栏的hwnd?不会改变的?
      

  3.   

    为什么Keybd_event 行? 因为他是纯操作键盘,相当于给键盘发送一条软指令,这样不会在乎当前焦点在哪。
    而SendMessage 不行,是因为你拿的窗口句柄不对,看一看如何获取IE地址栏的句柄。
    还有,句柄是系统动态分配的,不可能定死的。
      

  4.   

    LZ
    SendMessage(3150852, WM_KEYDOWN, VK_RETURN, 0);//就可以了,估计你找的句柄不对
      

  5.   

    另外你给我的那个程序我研究了下,说实话超级郁闷,C#调用API太繁琐了,并且里面使用了钩子,关闭其他程序的窗口时还卡的很,并且试着用API操作菜单也没有成功,按照VC的方法去调用操作菜单的API老是说参数错误,不过建议你最好是把你的代码封装正C++的DLL,然后由C#去调用,就不会出现你那个情况了
      

  6.   

    上面的问题都解决了~呵呵 上面的句柄是用spy++取到的 专门放那我自己测试用的
      

  7.   

    另外,我用SendMessage做出来的效果是只有换行,达不到回车的效果,后来用postmessage成功,现在都没想明白为什么