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

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

最近做的一个小东西要控制另外一个程序的文件保存对话框,目的是让它只能保存到我指定的位置,: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

相关文章

MySQL高级查询之JOIN、子查询、窗口函数实际案例

《MySQL高级查询之JOIN、子查询、窗口函数实际案例》:本文主要介绍MySQL高级查询之JOIN、子查询、窗口函数实际案例的相关资料,JOIN用于多表关联查询,子查询用于数据筛选和过滤,窗口函... 目录前言1. JOIN(连接查询)1.1 内连接(INNER JOIN)1.2 左连接(LEFT JOI

Android实现打开本地pdf文件的两种方式

《Android实现打开本地pdf文件的两种方式》在现代应用中,PDF格式因其跨平台、稳定性好、展示内容一致等特点,在Android平台上,如何高效地打开本地PDF文件,不仅关系到用户体验,也直接影响... 目录一、项目概述二、相关知识2.1 PDF文件基本概述2.2 android 文件访问与存储权限2.

Docker镜像修改hosts及dockerfile修改hosts文件的实现方式

《Docker镜像修改hosts及dockerfile修改hosts文件的实现方式》:本文主要介绍Docker镜像修改hosts及dockerfile修改hosts文件的实现方式,具有很好的参考价... 目录docker镜像修改hosts及dockerfile修改hosts文件准备 dockerfile 文

Python实现无痛修改第三方库源码的方法详解

《Python实现无痛修改第三方库源码的方法详解》很多时候,我们下载的第三方库是不会有需求不满足的情况,但也有极少的情况,第三方库没有兼顾到需求,本文将介绍几个修改源码的操作,大家可以根据需求进行选择... 目录需求不符合模拟示例 1. 修改源文件2. 继承修改3. 猴子补丁4. 追踪局部变量需求不符合很

使用Python实现获取网页指定内容

《使用Python实现获取网页指定内容》在当今互联网时代,网页数据抓取是一项非常重要的技能,本文将带你从零开始学习如何使用Python获取网页中的指定内容,希望对大家有所帮助... 目录引言1. 网页抓取的基本概念2. python中的网页抓取库3. 安装必要的库4. 发送HTTP请求并获取网页内容5. 解

Linux修改pip和conda缓存路径的几种方法

《Linux修改pip和conda缓存路径的几种方法》在Python生态中,pip和conda是两种常见的软件包管理工具,它们在安装、更新和卸载软件包时都会使用缓存来提高效率,适当地修改它们的缓存路径... 目录一、pip 和 conda 的缓存机制1. pip 的缓存机制默认缓存路径2. conda 的缓

Linux修改pip临时目录方法的详解

《Linux修改pip临时目录方法的详解》在Linux系统中,pip在安装Python包时会使用临时目录(TMPDIR),但默认的临时目录可能会受到存储空间不足或权限问题的影响,所以本文将详细介绍如何... 目录引言一、为什么要修改 pip 的临时目录?1. 解决存储空间不足的问题2. 解决权限问题3. 提

Python实现合并与拆分多个PDF文档中的指定页

《Python实现合并与拆分多个PDF文档中的指定页》这篇文章主要为大家详细介绍了如何使用Python实现将多个PDF文档中的指定页合并生成新的PDF以及拆分PDF,感兴趣的小伙伴可以参考一下... 安装所需要的库pip install PyPDF2 -i https://pypi.tuna.tsingh

Linux文件名修改方法大全

《Linux文件名修改方法大全》在Linux系统中,文件名修改是一个常见且重要的操作,文件名修改可以更好地管理文件和文件夹,使其更具可读性和有序性,本文将介绍三种在Linux系统下常用的文件名修改方法... 目录一、引言二、使用mv命令修改文件名三、使用rename命令修改文件名四、mv命令和rename命

mybatis-plus 实现查询表名动态修改的示例代码

《mybatis-plus实现查询表名动态修改的示例代码》通过MyBatis-Plus实现表名的动态替换,根据配置或入参选择不同的表,本文主要介绍了mybatis-plus实现查询表名动态修改的示... 目录实现数据库初始化依赖包配置读取类设置 myBATis-plus 插件测试通过 mybatis-plu