修改已经打开的对话框的浏览路径-修改文件属性和查找指定窗口

本文主要是介绍修改已经打开的对话框的浏览路径-修改文件属性和查找指定窗口,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

最近做的一个小东西要控制另外一个程序的文件保存对话框,目的是让它只能保存到我指定的位置,:P,我要控制保存的数据。
   我们知道用CFileDialog很容易设置对话框的初始浏览路径,只要在CFileDialog类的OPENFILENAME结构里用自己的目录改变lpstrInitialDir就可以了:
CFileDialog dlg;
dlg.m_ofn.lpstrInitialDir="c:\\WINDOWS";//这里设置对话框的浏览目录
dlg.DoModal();
可我要控制的是一个已经显示的对话框,这个时候再用m_ofn.lpstrInitialDir来设置就没有效果啦!我通过FindWindow找到了这个对话框的句柄,
CWnd * pWnd = FindWindow(NULL,"另存为");
if(pWnd)
{
   ....//这里该怎么改呢?
}
最开始想的方法就是用钩子截获对话框打开时的消息,在他显示之前改变他的墨认路径。呵呵,不想这么麻烦,等有时间再去试。后来从一个回帖里找到了一种比较方便的方法。
在实际操作中,如果我们在那个文件名编辑框中输入一个目录名,然后按确定按钮,那个对话框并没有被关闭,而是切换到那个新的目录。通过这个方法我们就可以改已经显示了对话框的浏览目录。具体步骤如下:
1、首先保存那个文件名编辑框的值
2、在那个编辑框中设置新的目录名
3、模拟鼠标单击“确定”按钮,这时候对话框切换到新的目录
4、恢复原来编辑框的值
这里还需要注意的一点就是第二步设置目录的时候要发送WM_SETTEXT消息,而不能直接用SetWindowText函数,因为它在跨进程使用的时候有问题,没有效果。
下面是部分关键代码:
CWnd * pWnd = FindWindow(NULL,"另存为");
CString sCtrlName;
CWnd *pedit;
CString filename;
TCHAR BUF[512];
if(pWnd)
{
     CWnd *pwnd=pWnd->GetWindow(GW_CHILD);//枚举保存对话框的所有子控件
     char *buf=new char[512];
     while(pwnd!=NULL)
    {
         ::GetClassName(pwnd->GetSafeHwnd(),buf,512);//得到枚举的控件是什么类型的,
         CString str=buf;   
         str.TrimRight();           
         if(str=="Edit")//如果枚举到保存文件名的EDIT
        {
            pedit=pwnd;//保存EDIT句柄用来发消息
            pwnd->SendMessage(WM_GETTEXT,sizeof(BUF)/sizeof(TCHAR),(LPARAM)(void*)BUF);
            filename=BUF;//完成第一步保存原始的文件名
        }
        if(str=="Button")//枚举到按钮,有保存和取消按钮
       {
            pwnd->SendMessage(WM_GETTEXT,sizeof(BUF)/sizeof(TCHAR),(LPARAM)(void*)BUF);
            //发消息得到按钮的标题
            CString str=BUF;
            str.TrimRight();
            if(str=="保存(&S)")//如果是保存按钮
            {   
               lstrcpy(BUF,(LPCTSTR)sPath);//sPath表示我们要设置的对话框浏览目录
               //发消息设置文件名EDIT为我们的路径名
               pedit->SendMessage(WM_SETTEXT,0,(LPARAM)BUF);
               //发消息模拟点击保存按钮
               ::SendMessage(pwnd->GetSafeHwnd(),WM_LBUTTONDOWN,0,0);
               ::SendMessage(pwnd->GetSafeHwnd(),WM_LBUTTONUP,0,0);
            }
        }
    }
     pwnd = pwnd->GetNextWindow();
}
pedit->SendMessage(WM_SETTEXT,0,(LPARAM)filename);//发消息还原EDIT里的文件名
delete buf; 

这篇关于修改已经打开的对话框的浏览路径-修改文件属性和查找指定窗口的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/975771

相关文章

解决jupyterLab打开后出现Config option `template_path`not recognized by `ExporterCollapsibleHeadings`问题

《解决jupyterLab打开后出现Configoption`template_path`notrecognizedby`ExporterCollapsibleHeadings`问题》在Ju... 目录jupyterLab打开后出现“templandroidate_path”相关问题这是 tensorflo

修改若依框架Token的过期时间问题

《修改若依框架Token的过期时间问题》本文介绍了如何修改若依框架中Token的过期时间,通过修改`application.yml`文件中的配置来实现,默认单位为分钟,希望此经验对大家有所帮助,也欢迎... 目录修改若依框架Token的过期时间修改Token的过期时间关闭Token的过期时js间总结修改若依

MySQL修改密码的四种实现方式

《MySQL修改密码的四种实现方式》文章主要介绍了如何使用命令行工具修改MySQL密码,包括使用`setpassword`命令和`mysqladmin`命令,此外,还详细描述了忘记密码时的处理方法,包... 目录mysql修改密码四种方式一、set password命令二、使用mysqladmin三、修改u

使用Python在Excel中插入、修改、提取和删除超链接

《使用Python在Excel中插入、修改、提取和删除超链接》超链接是Excel中的常用功能,通过点击超链接可以快速跳转到外部网站、本地文件或工作表中的特定单元格,有效提升数据访问的效率和用户体验,这... 目录引言使用工具python在Excel中插入超链接Python修改Excel中的超链接Python

使用Python合并 Excel单元格指定行列或单元格范围

《使用Python合并Excel单元格指定行列或单元格范围》合并Excel单元格是Excel数据处理和表格设计中的一项常用操作,本文将介绍如何通过Python合并Excel中的指定行列或单... 目录python Excel库安装Python合并Excel 中的指定行Python合并Excel 中的指定列P

Python将大量遥感数据的值缩放指定倍数的方法(推荐)

《Python将大量遥感数据的值缩放指定倍数的方法(推荐)》本文介绍基于Python中的gdal模块,批量读取大量多波段遥感影像文件,分别对各波段数据加以数值处理,并将所得处理后数据保存为新的遥感影像... 本文介绍基于python中的gdal模块,批量读取大量多波段遥感影像文件,分别对各波段数据加以数值处

通过C#获取PDF中指定文本或所有文本的字体信息

《通过C#获取PDF中指定文本或所有文本的字体信息》在设计和出版行业中,字体的选择和使用对最终作品的质量有着重要影响,然而,有时我们可能会遇到包含未知字体的PDF文件,这使得我们无法准确地复制或修改文... 目录引言C# 获取PDF中指定文本的字体信息C# 获取PDF文档中用到的所有字体信息引言在设计和出

python修改字符串值的三种方法

《python修改字符串值的三种方法》本文主要介绍了python修改字符串值的三种方法,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学... 目录第一种方法:第二种方法:第三种方法:在python中,字符串对象是不可变类型,所以我们没办法直接

多模块的springboot项目发布指定模块的脚本方式

《多模块的springboot项目发布指定模块的脚本方式》该文章主要介绍了如何在多模块的SpringBoot项目中发布指定模块的脚本,作者原先的脚本会清理并编译所有模块,导致发布时间过长,通过简化脚本... 目录多模块的springboot项目发布指定模块的脚本1、不计成本地全部发布2、指定模块发布总结多模

Mysql8.0修改配置文件my.ini的坑及解决

《Mysql8.0修改配置文件my.ini的坑及解决》使用记事本直接编辑my.ini文件保存后,可能会导致MySQL无法启动,因为MySQL会以ANSI编码读取该文件,解决方法是使用Notepad++... 目录Myhttp://www.chinasem.cnsql8.0修改配置文件my.ini的坑出现的问题