【发布时间】:2020-08-24 09:12:21
【问题描述】:
Windows 窗体/窗口句柄的新手。
尝试将文件保存在不同的位置。
保存文件对话框图像:
我能够在保存文件对话框中获得文件名编辑框的编辑框句柄。 可以粘贴路径。
private const int WM_SETTEXT = 0x000C;
IntPtr edithWnd = IntPtr.Zero;
edithWnd = FindWindowEx(edithWnd, IntPtr.Zero, "Edit", null);
SendMessage(edithWnd, WM_SETTEXT, IntPtr.Zero, "D:\Mine\Folder1\file");
以上代码在文件名文本框中设置文件路径。
现在,通过获取其句柄并发送点击来单击“保存”按钮。
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”
file1 未保存在“D:\Mine\Folder2\file1”中,而是保存在“D:\Mine\Folder1\file1”中
file2 未保存在“D:\Mine\Folder3\file2”中,而是保存在“D:\Mine\Folder1\file2”中
似乎它只指向第一个位置,无论路径是什么。
【问题讨论】:
-
您似乎正在展示您的代码按预期工作的部分,然后继续描述带有不起作用的循环的部分 -> 包含该代码。托管此“保存”对话框的应用程序是否在您的控制之下,或者您是否正在自动化另一个应用程序?
-
我在其中一个位置有文件.....我正在以编程方式打开这些文件并将它们再次保存在不同的位置并关闭文件,因此循环该位置中的所有可用文件.. ...我只需要它不工作的原因或我需要做的任何其他事情才能让它以编程方式工作,因为在手动操作时,它会将文件保存在所需的文件夹中
-
相关:stackoverflow.com/q/34735332/1132334 框架挑战:使用不同的方法重新定位您的文件。无论如何,这可能会在较新版本的 Windows 中中断。
-
SaveFileDialog具有类似FileName的属性,允许您设置这些值,您为什么要尝试使用本机 Windows API? -
lan Kemp,我认为 SaveFileDialog 将通过单击菜单项“另存为”打开,根据 OP 的评论,所以我们之前不能设置它,对吧?因为我们没有在这里创建 SaveFileDialog 实例,所以 SaveFileDialog 将在点击时打开,并且 OP 正在通过窗口句柄访问它