怎样通过.lnk文件来打开原文件?

kelly80 2000-10-18 08:39:00
知道.lnk文件的路径,怎样在程序中打开原文件?
要是直接fopen("c:\\windows\\recent\\logfile.lnk","r");
用fscanf总是读不出原文件的信息。
是不是有api函数能通过.lnk文件获得原文件的路径或者是文件指针?
...全文
3824 9 打赏 收藏 转发到动态 举报
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
Edward 2000-10-19
  • 打赏
  • 举报
回复
呵呵,没想到 MSDN 上的例子也有没有经过测试的例子,最多只能算 pseudo-code
了。
什么?你竟然问可不可以?当然是不可以这样转换了!而是“必须”这样转换!
呵呵,HandleErr 当然是自己写个处理错误代码的函数了(HRESULT)。
至于 hwnd,IShellLink 把它作为错误信息/提示信息对话框的父窗口。

@C MSDN IShellLink Reference

kelly80 2000-10-19
  • 打赏
  • 举报
回复
faint,怎么回事,刚刚一篇都贴不上,现在出来这么多篇
kelly80 2000-10-19
  • 打赏
  • 举报
回复
谢谢你,问题搞定了:)
本想今天早一点来看的,可是一觉醒来就。。。
呵呵,看来熬夜是太累了
kelly80 2000-10-19
  • 打赏
  • 举报
回复
谢谢你的帮助,问题搞定了:)
本想今天早一点来看的,可是一觉醒来,连吃午饭的时间都错过了,呵呵
看来熬夜是太累了。
Edward 2000-10-19
  • 打赏
  • 举报
回复
呵呵,你忘了在 CYourApp::InitInstance 里加上这行代码了:
::CoInitialize(NULL);
最好别忘了在 CYourApp::ExitInstance 里加上这行代码:
::CoUninitialize();

提示:DEBUG/TRACE 进 ResolveIt,看一看出错的地方 hres 是否等于 0x800401f0。
kelly80 2000-10-19
  • 打赏
  • 举报
回复
呵呵,谢谢指教,可能是我编程经验太少了吧,所以改了别人程序总象
犯罪一样:))
对了,你能不能帮忙看一看我这里的调用是否可行
这是基于MFC的单对话框程序中的"确定"键的程序
void CTestDlg::OnOK()
{
LPSTR lpFileName;
lpFileName=new char[256];
for(int i=0;i<256;i++)
lpFileName[i]=0;
if(SUCCEEDED(ResolveIT(hwnd,
"C:\\WINDOWS\\Recent\\file.lnk",
lpFileName)
)
)
AfxMessageBox("SUCCESS!");
else
AfxMessageBox("FAILURE!");
delete(lpFileName);
}
一开始我把hwnd设为NULL了,返回总是FAILURE
该怎么设置hwnd呢?能否具体一些,我对于这方面
是很弱小的:)
麻烦你了.....不知你在线上吗,我都有些困了
zzzzzzzzzzzzzz.......................
kelly80 2000-10-18
  • 打赏
  • 举报
回复
果然多的吓人:-)
不过很谢谢你的答案.
但这段程序在编译的时候
hres = psl->QueryInterface(&IID_IPersistFile,
&ppf);
中的两个参数有问题,我把第一个&去掉,第二个参数前加了
一个(VOID**)强制转换才通过,可以这样换吗?
还有程序中的HandleErr识别不出来,要包含哪个头文件呢?
最后问一个弱小的问题,ResolveIt的第一个参数到底是该
赋什么值?
Edward 2000-10-18
  • 打赏
  • 举报
回复
呵呵,msdn 上的例子,希望不要吓着你:

HRESULT ResolveIt(HWND hwnd, LPCSTR lpszLinkFile, LPSTR lpszPath)
{
HRESULT hres;
IShellLink* psl;
char szGotPath[MAX_PATH];
char szDescription[MAX_PATH];
WIN32_FIND_DATA wfd;

*lpszPath = 0; // assume failure

// Get a pointer to the IShellLink interface.
hres = CoCreateInstance(CLSID_ShellLink, NULL,
CLSCTX_INPROC_SERVER, IID_IShellLink, (LPVOID *) &psl);
if (SUCCEEDED(hres)) {
IPersistFile* ppf;

// Get a pointer to the IPersistFile interface.
hres = psl->QueryInterface(&IID_IPersistFile,
&ppf);
if (SUCCEEDED(hres)) {
WCHAR wsz[MAX_PATH];

// Ensure that the string is Unicode.
MultiByteToWideChar(CP_ACP, 0, lpszLinkFile, -1, wsz,
MAX_PATH);

// Load the shortcut.
hres = ppf->Load(wsz, STGM_READ);
if (SUCCEEDED(hres)) {

// Resolve the link.
hres = psl->Resolve(hwnd, 0);
if (SUCCEEDED(hres)) {

// Get the path to the link target.
hres = psl->GetPath(szGotPath,
MAX_PATH, (WIN32_FIND_DATA *)&wfd,
SLGP_SHORTPATH );
if (FAILED(hres)
HandleErr(hres); // application-defined function

// Get the description of the target.
hres = psl->GetDescription(szDescription, MAX_PATH);
if (FAILED(hres))
HandleErr(hres);
lstrcpy(lpszPath, szGotPath);
}
}
// Release the pointer to the IPersistFile interface.
ppf->Release();
}
// Release the pointer to the IShellLink interface.
psl->Release();
}
return hres;
}

nemo2050 2000-10-18
  • 打赏
  • 举报
回复
关注
1KB文件夹快捷方式病毒清除专用附件包含下面几部分。 1、自动化清除脚本 2、清理工具 3、恢复文件夹属性工具 首先使用“自动化清除脚本程序”清除系统内此病毒。 ———————————————————————— 如果“自动化清除脚本程序”清除无效。 请使用“清理工具”清理系统,并重启电脑即可。 然后用“恢复文件夹属性工具”恢复被隐藏的各盘文件夹。 全部内附说明图。 清理工具执行的程序行为如下: 点击“开始处理”后,程序将执行: 1、结束系统内如下进程: %SystemRoot%\system\svchost.exe %SystemRoot%\SYSTEM32\wscript.exe (注意是%SystemRoot%\system\svchost.exe进程,不是%SystemRoot%\system32\svchost.exe进程) 2、接下来删除以下文件: 删除%SystemRoot%\system\svchost.exe 删除C:\盘至Z:\盘的根目录下的Autorun.inf文件 删除C:\盘至Z:\盘的根目录下的*.vbs文件 删除C:\盘至Z:\盘的根目录下的*.lnk文件 (注意,本程序为了清除磁盘根目录下那些被恶搞出来大量的文件夹快捷方式,只能采取删除所有盘根目录下的*.lnk快捷方式的办法了。如果你有其他文件的快捷方式在磁盘根目录下,将会一并删除,但是本程序的“备份文件夹Backup”内有备份的被删除的东西,自己找找恢复即可。) 3、扫描系统盘所有*.exe文件执行数据流清除,此时清除的是附加在系统文件上的数据流。并同时搜索全机指定大小的*.vbs文件删除,这个可能导致误删除正常的vbs文件,可以自己查看扫描结束后的日志。 4、删除注册表内被病毒恶搞的项目,此项目能支持被恶搞的系统在双击“我的电脑”时继续启动附加入桌面程序的那数据流病毒。 5、恢复注册表内load项目的默认空值。 6、修复相关文件关联,不能完美修复,但是将就够了,想完美修复的,找些其他工具试吧,一并修复如下项目: 修复IE主页(这并不是主页被修改,而是这可以同步修复打开IE也启动数据流病毒的问题) 禁用系统自动播放 **************************************** 恢复文件夹属性工具,用来最后恢复各盘内根目录下被隐藏的大量文件夹,看说明图以及说明文件自己正确操作。 注意,本程序修复文件关联那一步不能修复全部被改的文件关联

16,473

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC相关问题讨论
社区管理员
  • 基础类社区
  • Web++
  • encoderlee
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

        VC/MFC社区版块或许是CSDN最“古老”的版块了,记忆之中,与CSDN的年龄几乎差不多。随着时间的推移,MFC技术渐渐的偏离了开发主流,若干年之后的今天,当我们面对着微软的这个经典之笔,内心充满着敬意,那些曾经的记忆,可以说代表着二十年前曾经的辉煌……
        向经典致敬,或许是老一代程序员内心里面难以释怀的感受。互联网大行其道的今天,我们期待着MFC技术能够恢复其曾经的辉煌,或许这个期待会永远成为一种“梦想”,或许一切皆有可能……
        我们希望这个版块可以很好的适配Web时代,期待更好的互联网技术能够使得MFC技术框架得以重现活力,……

试试用AI创作助手写篇文章吧