C# 在不同位置保存文件时出现hwnd窗口句柄问题

C# 在不同位置保存文件时出现hwnd窗口句柄问题,c#,winforms,hwnd,C#,Winforms,Hwnd,windows窗体/窗口句柄的新增功能 尝试在不同位置保存文件 SaveFileDialog图像: 我能够在“保存文件”对话框中获取文件名编辑框的编辑框句柄。 能够粘贴路径 以上代码在“文件名”文本框中设置文件路径 现在,通过获取其句柄并发送单击来单击“保存”按钮 private const int BM_CLICK = 0x00F5; IntPtr handle = GetForegroundWindow(); // Save As dialog IntPtr edithWnd = Fi

windows窗体/窗口句柄的新增功能

尝试在不同位置保存文件

SaveFileDialog图像:

我能够在“保存文件”对话框中获取文件名编辑框的编辑框句柄。 能够粘贴路径

以上代码在“文件名”文本框中设置文件路径

现在,通过获取其句柄并发送单击来单击“保存”按钮

private const int BM_CLICK = 0x00F5;

IntPtr handle = GetForegroundWindow(); // Save As dialog
IntPtr edithWnd = FindWindowEx(handle, IntPtr.Zero, "Button", "&Save");           
SendMessage(edithWnd, BM_CLICK, IntPtr.Zero, null);
它工作正常,但是在循环中使用此代码将多个文件保存在不同的位置时,它工作不正常,它只将所有文件保存在一个位置

例如,文件保存在“D:\Mine\Folder1\file”中

文件1未保存在“D:\Mine\文件夹2\file1”中,而是保存在“D:\Mine\文件夹1\file1”中

文件2未保存在“D:\Mine\文件夹3\file2”中,而是保存在“D:\Mine\文件夹1\file2”中


无论路径是什么,它似乎只指向第一个位置。

为什么不先进入所需的路径,然后保存文件

为我工作

SendMessage(edithWnd, WM_SETTEXT, IntPtr.Zero, "D:\Mine\Folder1\");
// Hit enter
SendKeys.SendWait("{ENTER}");
// Now click the save button, file name will be there already, in case if it is 
// not paste the file name first and then perform save button click

您可能需要先聚焦文件路径,然后按“回车”键设置焦点,按“回车”键将进入文件夹路径。

您似乎在显示代码中按预期工作的部分,然后继续描述循环无效的部分->包含该代码。承载此“保存”对话框的应用程序是否在您的控制下,或者您是否正在自动化另一个应用程序?我在其中一个位置有文件…..我正在以编程方式打开这些文件,然后再次将其保存在不同的位置并关闭该文件,因此,在该位置循环所有可用文件…..我只需要解释为什么这不起作用,或者我需要做更多的事情来让它以编程方式起作用,因为在手动操作时,它将文件保存在所需的文件夹中。相关:帧挑战:使用不同的方法重新定位文件。新版本的windows可能会出现这种情况。
SaveFileDialog
具有类似于
FileName
的属性,允许您设置这些值,为什么您要尝试使用本机windows API呢?lan Kemp,我想SaveFileDialog将通过单击菜单项“另存为”打开,正如OP的评论所示,因此我们之前无法设置它,正确的?因为我们不是在这里创建SaveFileDialog实例,SaveFileDialog将在单击时打开,OP通过窗口handleYeah访问它,这种方法在我的情况下很有用……我可以先进入文件夹,然后保存文件……非常感谢
SendMessage(edithWnd, WM_SETTEXT, IntPtr.Zero, "D:\Mine\Folder1\");
// Hit enter
SendKeys.SendWait("{ENTER}");
// Now click the save button, file name will be there already, in case if it is 
// not paste the file name first and then perform save button click