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

时间:2017-07-24 22:31:39

标签: c# winapi

我有winapi c#将网页保存为pdf。应用程序在网页上使用control + P并按Enter键。我的默认打印机是“细微差别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 ___ www.google.pdf”。我想更改文件名(突出显示)。

enter image description here

我该怎么做?有什么指针吗? 谢谢你的帮助。

1 个答案:

答案 0 :(得分:0)

鉴于您当前的方法,并且默认情况下突出显示文本,为什么不直接发送您想要的文件名?

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

您可能需要先突出显示该文字。这可以是双击,或直接访问控件,例如var filename = FindEdit(handle, "File Name:")访问它,以防默认情况下未突出显示。