关于记事本路径获取!! 已经打开了一个记事本文件,我如何获取它的路径?通过findwindow我得到了它的窗口句柄,然后就不知道用哪个获得它的路径了。-_-!!谢谢各位帮忙了!! 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 已知文件名取文件所在目录?最简单的办法是从后向前查找"\\".但有时,文件名中没有"\\",这时就要先对文件名进行转换.具体代码如下:CString GetPathName(const CString strPathFileName){//取得经过处理后的文件名长度int nLength = GetFullPathName(strPathFileName,0,NULL,NULL);if( 0 == nLength )return "" ;//取得新文件名CString strPathName ;char * pszPathName = strPathName.GetBufferSetLength(nLength);nLength = GetFullPathName(strPathFileName,nLength,pszPathName,NULL);strPathName.ReleaseBuffer();if( 0 == nLength )return "" ;//取得路径int nPos = strPathName.ReverseFind('\\');if(-1 == nPos )return "";strPathName = strPathName.Left(nPos);return strPathName ;}测试代码如下:void CMy2View::OnDraw(CDC* pDC){CMy2Doc* pDoc = GetDocument();ASSERT_VALID(pDoc);CString strMess ;CString strInput[] = {"1.txt","c:\\2.txt","d:3.txt","e:\\2/4.txt"};int iCount = sizeof(strInput)/sizeof(strInput[0]) ;for(int i = 0 ; i < iCount ; i++ ){CString strLine ;CString strOutput = GetPathName(strInput[i]) ;strLine.Format("文件名: %s\r\n对应文件夹 %s\r\n\r\n",strInput[i],strOutput);strMess += strLine ;}CRect r ;GetClientRect(r);pDC->DrawText(strMess,&r,0);}结果如下:文件名: 1.txt 对应文件夹 G:\TEST\2 文件名: c:\2.txt 对应文件夹 c: 文件名: d:3.txt 对应文件夹 D: 文件名: e:\2/4.txt 对应文件夹 e:\2 谢谢这位朋友,我现在在单位还不能测试你的这短代码,不知道你的做法是不是能够达到我的要求。我做的这个东西是这样的:条件:已经打开一个txt文件,比如:检查结果.txt,这个名字是固定的。效果:我打开我制作的程序,点击一个按钮,他会自动的找到<检查结果.txt>的路径,然后根据这个路径读取它里面的内容。 。。本人失败.假设你是想知道文本程序所打开的文件的绝对路径名.从外界.首先说正规的思路:1.获得这个程序窗口->2获得进程->3获得进程内部文件句柄->4获得该文件的全名.3->4的过程网上已经有代码了, (这个代码还不能获得新建的长度为0的文件名) 2->3这个过程我上网搜索了很多(重复更换关键字),提的人很少(全是csdn上提的),而且都只有人up没有人解决.另外notepad程序 打开文件后就close了文件句柄,直到保存的时候才再次打开.无法跟踪它.倒是有个老外的代码能做到 "给我个文件,我能罗列哪些进程使用了它."此路代价较大,待高手出现吧.二. 首先可以获得这个文本文件的文件名 从notepad的标题,但是这并没什么用.因为磁盘叫这样名字的文件太多了..三.发现LZ仿佛是想调用程序读取文本内容,那有的一个办法是使用找窗口句柄的办法,但是只能notepad里的文本内容,很可能被更改过了.我的代码: char szText[256]; WPARAM m_wParam = sizeof(szText); LPARAM m_lParam = (LPARAM)szText; HWND m_hWnd=FindWindow(("Notepad"),NULL); HWND m_hWnd1=FindWindowEx(m_hWnd,NULL,"Edit",NULL); //::GetWindowText(m_hWnd1,a,sizeof(a)); ::SendMessage(m_hWnd1,WM_GETTEXT ,m_wParam,m_lParam); MessageBox(0,szText,"",0); 就能显示当前记事本里的内容. 另外gettext消息并不是 谁都会理睬你的.记事本是好心理睬了你而已.四.考虑使用HOOK,但是要比记事本 先运行.HOOK createfile()这个api函数.获得notepad.exe调用createfile()时候用的函数参数就是文件的路径了. 本人不了解HOOK,不多说.这条路可行。 太感谢emptyness(问题事小,结帐事大~) ,你的方法三就可以满足我的要求了。自身不是学编程方面的,思路就狭窄了很多。再次感谢了!!感觉所有这楼里所有的朋友! 编程实现添加一个默认打印机 VC6对Access文件执行插入操作时出错!!! 怎样提取表格中每个记录的字段值? 急:opengl基本问题 求个好的算法:如何判断一个点是否在封闭的图形内? 一个菜鸟问题,望大虾门指点 有关MIDL编译的问题 windows的系统图标放在那个文件里?150分求救!! 来看一看,一个关于消息的问题。 以知CD如何得到LOGFONT 关于visual c++ vector容器中struct里cstring的取值问题
CString GetPathName(const CString strPathFileName)
{
//取得经过处理后的文件名长度
int nLength = GetFullPathName(strPathFileName,0,NULL,NULL);
if( 0 == nLength )
return "" ;//取得新文件名
CString strPathName ;
char * pszPathName = strPathName.GetBufferSetLength(nLength);
nLength = GetFullPathName(strPathFileName,nLength,pszPathName,NULL);
strPathName.ReleaseBuffer();
if( 0 == nLength )
return "" ;//取得路径
int nPos = strPathName.ReverseFind('\\');
if(-1 == nPos )
return "";
strPathName = strPathName.Left(nPos);
return strPathName ;
}测试代码如下:
void CMy2View::OnDraw(CDC* pDC)
{
CMy2Doc* pDoc = GetDocument();
ASSERT_VALID(pDoc);CString strMess ;
CString strInput[] = {"1.txt","c:\\2.txt","d:3.txt","e:\\2/4.txt"};int iCount = sizeof(strInput)/sizeof(strInput[0]) ;
for(int i = 0 ; i < iCount ; i++ )
{
CString strLine ;
CString strOutput = GetPathName(strInput[i]) ;
strLine.Format("文件名: %s\r\n对应文件夹 %s\r\n\r\n",strInput[i],strOutput);
strMess += strLine ;
}CRect r ;
GetClientRect(r);
pDC->DrawText(strMess,&r,0);
}结果如下:
文件名: 1.txt
对应文件夹 G:\TEST\2 文件名: c:\2.txt
对应文件夹 c: 文件名: d:3.txt
对应文件夹 D: 文件名: e:\2/4.txt
对应文件夹 e:\2
条件:已经打开一个txt文件,比如:检查结果.txt,这个名字是固定的。
效果:我打开我制作的程序,点击一个按钮,他会自动的找到<检查结果.txt>的路径,然后根据这个路径读取它里面的内容。
假设你是想知道文本程序所打开的文件的绝对路径名.从外界.
首先说正规的思路:
1.获得这个程序窗口->2获得进程->3获得进程内部文件句柄->4获得该文件的全名.
3->4的过程网上已经有代码了,
(这个代码还不能获得新建的长度为0的文件名)
2->3这个过程我上网搜索了很多(重复更换关键字),提的人很少(全是csdn上提的),
而且都只有人up没有人解决.
另外notepad程序 打开文件后就close了文件句柄,直到保存的时候才再次打开.无法跟踪它.倒是有个老外的代码能做到 "给我个文件,我能罗列哪些进程使用了它."
此路代价较大,待高手出现吧.二. 首先可以获得这个文本文件的文件名 从notepad的标题,但是这并没什么用.因为磁盘叫这样名字的文件太多了..三.发现LZ仿佛是想调用程序读取文本内容,那有的一个办法是使用找窗口句柄的办法,但是只能notepad里的文本内容,很可能被更改过了.
我的代码:
char szText[256];
WPARAM m_wParam = sizeof(szText);
LPARAM m_lParam = (LPARAM)szText;
HWND m_hWnd=FindWindow(("Notepad"),NULL);
HWND m_hWnd1=FindWindowEx(m_hWnd,NULL,"Edit",NULL);
//::GetWindowText(m_hWnd1,a,sizeof(a));
::SendMessage(m_hWnd1,WM_GETTEXT ,m_wParam,m_lParam);
MessageBox(0,szText,"",0);
就能显示当前记事本里的内容.
另外gettext消息并不是 谁都会理睬你的.记事本是好心理睬了你而已.四.考虑使用HOOK,但是要比记事本 先运行.HOOK createfile()这个api函数.获得notepad.exe调用createfile()时候用的函数参数就是文件的路径了. 本人不了解HOOK,不多说.
这条路可行。
感觉所有这楼里所有的朋友!