如何使用Win32API SendMessage更改保存对话框文件位置?

时间:2016-01-12 03:56:45

标签: winapi sendmessage savefiledialog

我正在编写一个程序,根据常见的“保存/另存为”对话框自动将数据保存到特定位置。

enter image description here

有两种攻击方法。这两种方法都需要监视Spyxx下的消息句柄(基本上我们试图复制SendMessage)

第一个方法,使用Win32 SendMessage API将文件名设置为目标路径。在这种情况下,HWnd是文件名旁边的Edit字段。

[DllImport("user32.dll")]
public static extern IntPtr SendMessage(IntPtr hWnd, UInt32 Msg, IntPtr wParam, [MarshalAs(UnmanagedType.LPStr)] string lParam);

SendMessage(HWnd, (int)WindowMessage.WM_SETTEXT, IntPtr.Zero, @"Address: %UserProfile%\Desktop\Target.txt");

这种方法的问题在于,它并不总是在Windows 7和Windows 8.1下设置文本(我确实在Windows 10中运气更好)。我试着设置一些等待时间,但不管我等了多久,它似乎都不重要(除了SendMessage是同步操作,所以文本应该设置,或者根本不设置)

第二方法是在对话框顶部设置位置。同样,我们使用SendMessage来完成此任务,在这种情况下,HWnd引用ToolbarWindow32对象,它是Breadcrumb Parent对象的子对象。

SendMessage(HWnd, (int)WindowMessage.WM_SETTEXT, IntPtr.Zero, @"Address: %UserProfile%\Desktop");

SendMessage(HWnd, (int)WindowMessage.WM_SETTEXT, IntPtr.Zero, @"Address: Desktop"); // replicated message found on Spyxx

不幸的是,这种方法似乎不起作用(即我可以发送消息,但是Dialog没有改变它的位置),我还没弄明白我缺少哪些步骤。

我的问题是,如何使用Win32 API与第三方应用的“另存为”对话框进行交互,以便保证将文件保存在所需的位置?非常感谢和感谢阅读!

0 个答案:

没有答案