在获得下载弹出对话框句柄后,想点击保存按钮弹出保存路径窗口lpszName_Submit = "保存(&S)";
EdithWnd = FindWindowEx(ParenthWnd,EdithWnd,lpszClass_Submit,lpszName_Submit);
PostMessage(EdithWnd ,WM_CLICK ,(IntPtr)0,"0");
没有响应,大家遇到过这样问题吗?如何解决的。

解决方案 »

  1.   

    修改PostMessage的声明,试试  PostMessage(EdithWnd ,WM_CLICK ,0,null)
      

  2.   

    用SendMessage发送两个消息:
    WM_LBUTTONDOWN
    WM_LBUTTONUP
      

  3.   

    这个没有反应。这个只用WM_LBUTTONDOWN时,按钮下去了,但是没有弹出路径选择对话框。
    两个都用后,也是没有反应。
      

  4.   

    附上PostMessage的声明的代码看看
      

  5.   


    [DllImport("User32.dll", EntryPoint = "PostMessage")] private static extern int PostMessage(IntPtr hwnd,int Msg,IntPtr wParam,string lParam);
      

  6.   

    FindWindowEx 根本没找到按钮吧,返回句柄是0吧
      

  7.   

    using System;
    using System.Collections.Generic;
    using System.ComponentModel;
    using System.Data;
    using System.Drawing;
    using System.Text;
    using System.Windows.Forms;
    using System.Runtime.InteropServices;namespace WindowsApplication48
    {
        public partial class Form1 : Form
        {
            [DllImport("User32.dll", EntryPoint = "PostMessage")]
            static extern int PostMessage(IntPtr hwnd, int Msg, IntPtr wParam, string lParam);        [DllImport("User32.dll ")]
            static extern IntPtr FindWindowEx(IntPtr parent, IntPtr childe, string strclass, string strname);        const int WM_CLICK = 0x00F5;
            String lpszName_Submit = "保存(&S)";        public Form1()
            {
                InitializeComponent();            Button AcceptButton = new Button();
                AcceptButton.Text = lpszName_Submit;
                AcceptButton.Parent = this;
                AcceptButton.Click += new EventHandler(B_Click);            Button PostMessageButton = new Button();
                PostMessageButton.Text = "发送消息";
                PostMessageButton.Parent = this;
                PostMessageButton.Click += new EventHandler(PostMessageButton_Click);
                PostMessageButton.Location = Point.Add(AcceptButton.Location, new Size(100, 0)); 
            }        void B_Click(object sender, EventArgs e)
            {
                MessageBox.Show("AcceptButton按钮收到消息");
            }        void PostMessageButton_Click(object sender, EventArgs e)
            {
                // 我这里就直接把这个窗口的句柄当父句柄了
                IntPtr EdithWnd = FindWindowEx(this.Handle, IntPtr.Zero, null, lpszName_Submit);
                PostMessage(EdithWnd, WM_CLICK, IntPtr.Zero, null);
            }
        }
    }
      

  8.   

    什么叫做没有响应?PostMessage是异步通信吧,发送端发过消息后就不管了,函数退出了。接收端的消息循环不知道要什么时候才会处理到该消息……
    你想同步的话用SendMessage。而且我觉得吧,关键的问题是,你的接收端的消息循环是如何处理的,这才是问题的关键,而应该不仅仅是发送端的问题吧。
      

  9.   

    楼上的B_Click写法用的下载页面弹出框的“保存(&S)”按钮就无效了,
    用在“取消”按钮上是可以的。高手们不妨试试
      

  10.   


    应该不是发送端的问题,
    因为如果给“取消”按钮发生的话,那么下载就会取消,
    如果给“保存(&S)”按钮发生,不会弹出保存文件的openFileDialog对话框。
      

  11.   

    大家可以试一下看看,在
    文件夹-》工具-》文件夹选项-》文件类型-》MP3-》高级 中勾选“下载后确认打开”选项
    然后到百度随便找个MP3,不用任何工具下载,就会出来一个下载对话框,然后给这个对话框的
    “保存(&S)”按钮发消息试试看。
      

  12.   


    下载对话框是windows默认的下载对话框,不是我的程序。
    保存和取消都是windows下载对话框的按钮。
      

  13.   


    明白了,那么接下来的问题是,你想向保存键发消息,然后想让系统自己按照“习惯”弹出它的对话框是吧……我明白你的意思了。
    可能参数lparam 和wparam不应该为零吧……
    或者测试一下EdithWnd = FindWindowEx(ParenthWnd,EdithWnd,lpszClass_Submit,lpszName_Submit); 是否返回了你期望的控件
      

  14.   

    FindWindowEx 的返回值是对的。。
    因为用返回值在给取消发消息时OK的。
      

  15.   


    那很可能就是lparam和wparam是否应该发送0的问题了吧。
      

  16.   

    结贴了结贴了,搞了这么久NND终于有结果了,看起来很弱智。因为没有SetFocus()
    谢谢大家关注,结贴了。