关于记事本路径获取!!
已经打开了一个记事本文件,我如何获取它的路径?通过findwindow我得到了它的窗口句柄,然后就不知道用哪个获得它的路径了。-_-!!
谢谢各位帮忙了!!
[解决办法]
已知文件名取文件所在目录?最简单的办法是从后向前查找 "\\ ".但有时,文件名中没有 "\\ ",这时就要先对文件名进行转换.具体代码如下:
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
[解决办法]
。。。。。。。。。。。
本人失败.
假设你是想知道文本程序所打开的文件的绝对路径名.从外界.
首先说正规的思路:
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,不多说.
这条路可行。