How to use Win32API SendMessage to change Save Dialog File Location?

蓝咒 提交于 2020-08-25 07:25:27

问题


I am writing a program that automates saving data to a specific location, based on the common Save/Save As dialog.

There are two attacking approaches. Both approaches require monitoring handles for messages under Spyxx (so essentially we are trying to replicate the SendMessage)

The first approach to set the File Name with target path, using Win32 SendMessage API. The HWnd in this case is the Edit field next to the File name.

[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");

The problem with this approach is that, it does not always set the text under Windows 7 and Windows 8.1 (I do have better luck with Windows 10). I tried to set some waiting time, but no matter how long I wait, it doesn't seem to matter (besides SendMessage is synchronous operation, so text should be set, or not set at all)

The second approach is to set the Location at the top of the dialog box. Again, we are using SendMessage to accomplish this, and HWnd in this case, references the ToolbarWindow32 object, which is the child of Breadcrumb Parent object.

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

or

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

Unfortunately, this approach does not seem to work (i.e. I can send the message, but Dialog doesn't change its location), and I have yet to figure out what steps I am missing.

My question, how do you use Win32 API to interact with the 3rd party app's Save As dialog, so that you can guarantee saving the file in the desired location? Much appreciated and thanks for reading!

来源:https://stackoverflow.com/questions/34735332/how-to-use-win32api-sendmessage-to-change-save-dialog-file-location

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!