עבור לתוכן

[C#] שליפת מידע מקיצור דרך ב-Windows (קבצי .lnk)

Featured Replies

פורסם

מישהו יודע איך משיגים (שומרים כמחרוזת) את יעד הקובץ שאליו מצביע קובץ LNK מסויים?

תודה מראש.

  • 2 שבועות מאוחר יותר...
פורסם
  • מחבר

לא לקח לי כל הזמן הזה למצוא את הפתרון, פשוט עזבתי את הבעיה הזו בינתיים ורק היום חזרתי אליה. כדי שיהיה תיעוד של הפתרון הוספתי תגובה :)

אז ככה. יש את IWshRuntimeLibrary שמטפל בכל מני דברים שקשורים ל-Windows וכדומה, ומחלקה זו גם מטפלת בקיצורי דרך.

אז מה שהיה צריך לעשות זה ליצור קיצור דרך "חדש" עם אותו השם של קיצור הדרך שממנו רוצים להוציא את היעד (כלומר לשכתב את קיצור הדרך הנתון), ובגלל שעד שלא מריצים פקודה ששומרת את קיצור הדרך הוא לא נשמר, אפשר לקחת מידע מ"קיצור הדרך שעוד לא שכתבנו".

ככה זה הולך:


/// <summary>
///Converts a Windows LNK file path into its real destination path.
/// </summary>
/// <param name="lnk">The link to investigate</param>
private string getLinkDest(string lnk)
{
if (!lnk.EndsWith(".lnk"))
{
MessageBox.Show("Path " + lnk + " is not a Windows LNK file.", "Shortcut Import Error");
return;
}
WshShell shell = new WshShell();
IWshShortcut link = (IWshShortcut)shell.CreateShortcut(lnk);
return link.TargetPath;
}

ואגב כדי לשמור עושים:

link.Save();

מעניין אם עוד אנשים צריכים כזה דבר ;)

פורסם

נחמד. רק כדאי אולי לזרוק exception במקום ההודעה וגם אולי ליצור העתק של TargetPath ולעשות nullify למשתנים.

פורסם
  • מחבר

כן, למה לא. הקוד הנ"ל היה דרך כללית לזה, וההודעה שהמשתמש מקבל בטח תתחלף במשהו שמתאים יותר.

פורסם

זה תמיד טוב לזכור שגם בשפות שמנהלות לך את הזכרון לבד ועושות garbage collection עצמי, עדיין יכולות להיות דליפות זכרון, ושלפעמים עדיף ללכת על בטוח ולעשות nullify למשתנים ולפעמים לעשות clone כשמעבירים דברים ברפרנס.

ארכיון

דיון זה הועבר לארכיון ולא ניתן להוסיף בו תגובות חדשות.

דיונים חדשים