C# 将文本发送到“另存为”对话框

C# 将文本发送到“另存为”对话框,c#,winapi,C#,Winapi,我有winapi c将网页保存为pdf。应用程序在网页上使用control+P并按enter键。我的默认打印机是nuance pdf,我想将文件另存为pdf。我的代码如下所示: static class Program { [DllImport("user32.dll")] public static extern int SetForegroundWindow(IntPtr hWnd); [DllImport("User32.dll")] public sta

我有winapi c将网页保存为pdf。应用程序在网页上使用control+P并按enter键。我的默认打印机是nuance pdf,我想将文件另存为pdf。我的代码如下所示:

static class Program
{
    [DllImport("user32.dll")]
    public static extern int SetForegroundWindow(IntPtr hWnd);

    [DllImport("User32.dll")]
    public static extern IntPtr SendMessage(IntPtr hWnd, uint Msg, IntPtr wParam, string lParam);

    [DllImport("user32.dll")]
    public static extern IntPtr FindWindow(string lpClassName, string lpWindowName);

    [DllImport("user32.dll")]
    public static extern IntPtr FindWindowEx(IntPtr hwndParent, IntPtr hwndChildAfter, string lpszClass, string lpszWindow);

    [STAThread]
    static void Main()
    {
        Boolean Check = true;
        string text = "MyFileName";

        while (Check)
        {
            Process[] processes = Process.GetProcessesByName("iexplore");
            foreach (Process proc in processes)
            {
                SetForegroundWindow(proc.MainWindowHandle);
                SendKeys.SendWait("^(p)");
                SendKeys.SendWait("{ENTER}");
                var handle = FindWindow(null, "Save As");
                Console.WriteLine("handle {0}", handle);
                //SendMessage(handle, 0x000C, IntPtr.Zero, text);
                SendKeys.SendWait("{ENTER}");
            }
            Check = false;
        }
    }
}
此代码将文件名另存为https\u\u www.google.pdf。我想更改突出显示的文件名

我该怎么做?有什么建议吗?
谢谢你的帮助

考虑到您当前的方法,并且默认情况下文本是高亮显示的,为什么不发送带有所需文件名的键呢

var handle = FindWindow(null, "Save As");
Console.WriteLine("handle {0}", handle);
SendKeys.SendWait(text);
SendKeys.SendWait("{ENTER}");

您可能需要首先突出显示文本。这可以是双击,也可以直接访问控件,例如var filename=FindEdithandle,File Name:以在默认情况下不突出显示时访问它。

这听起来像System.Windows.Automation的作业。谢谢Raymond。你有什么例子吗?你不能只向对话框发送Alt+n键来选择文件名框,然后发送新的文件名吗?在这个网站上有很多使用自动化名称空间的例子。它使用它来单击按钮。它使用ValuePattern更改编辑控件中的文本。堆栈溢出不能替代websearch和基础研究。当有人建议您使用UI自动化时,请在询问示例之前进行基础研究。一个有能力的程序员的一个基本要求是勤奋和专注地进行这样的研究。这将在操作系统的本地化版本上非常有效。。。请不要放弃投票,甚至不要接受这个黑客行为作为回答。@I不可预见,我确实说过,考虑到目前的做法。解决方案远非最优,但在现有解决方案的范围内。我只是修改了一个现有的行来输入文本,这在任何原始代码工作的系统上都可以。简单地通过OPSo为所提出的问题和现有代码提供一个可行的解决方案,本质上,您只是在帮助某人,而他们正试图自食其力。说真的,如果这是解决问题的唯一办法,那就没什么问题了。但是当有一个问题,你甚至都不提它的时候,很难不把这个答案称为严重的疏忽。@I不可预知的我该如何使用我要做的。。。这是一个非常不同的问题,我应该如何去做。。。。鉴于OP提供的解决方案,这一点在任何方面都不是严重疏忽。它是解决简单问题的简单工具。不是每个人都在编写企业应用程序这不是一个论坛。这是一个专业软件开发人员的问答网站。答案应该是正确的,对任何访问此站点的人来说都是有价值的,不仅仅是OP。在这种情况下,OP要求X,但实际上需要解决Y。这就是所谓的。一个有用的答案必须承认这一点。既然没有,这个答案就没用了。恐怕这需要投反对票。