Pisze program który miałby wykonywać różne operacje na skrótach znajdujących się na pulpicie np. sprawdzanie czy skrót do jakiegoś programu istnieje. Problem w tym że nie wiem ani jaka jest ścieżka dostępu do skrótu ani jak ją sprawdzić. Zatrzymałem się w tym miejscu i nie wiem jak to rozwiązać. Mógłby ktoś podać ścieżkę dostępu do przykładowego skrótu na pulpicie?
Katalog pulpitu bieżącego użytkownika znajdziesz tak:
#include <windows.h>
#include <shlobj.h>
#include <stdio.h>
LPTSTR GetCurrentDesktopDir()
{
TCHAR szPath[MAX_PATH]; // [1]
if (SHGetSpecialFolderPath(HWND_DESKTOP, szPath, CSIDL_DESKTOPDIRECTORY, FALSE))
return szPath;
else
return NULL;
}
[1] to nie jest dobry pattern, ale wystarczająco dobry tutaj (ścieżki na partycjach NTFS mogą być znacznie dłuższe, ale ścieżka do pulpitu przeważnie nie zbliża się nawet do ~200 znaków).
Enumerację plików w katalogu opisano tutaj:
http://msdn.microsoft.com/en-us/library/windows/desktop/aa365200(v=vs.85).aspx
Linki mają przeważnie rozszerzenie lnk. Parsowanie skrótów jest upierdliwe, jeśli chcesz je robić poprawnie - służy do tego COMowy obiekt.
http://msdn.microsoft.com/en-us/library/windows/desktop/bb774950(v=vs.85).aspx
Alternatywnie możesz użyć lnk-parsera z code.google.com, albo wzorując się na nim odczytać to, co dla Ciebie istotne.
Eee
%homepath%\Desktop\program.lnk
?
W której funkcji API zmienne środowiskowe zadziałają bez ExpandEnvironmentStrings, hę?
A nie wiem programuję na Linuksa, a autor pytał się o ścieżkę
Do pliku lnk. Bardzo powszechnego w Linuksie, prawda? ;]
Windowsa co jakiś czas używam, lecz nie programuję na niego.
Tak, to nie jest dobry pattern, ale dlatego że zwracasz wskaźnik do lokalnej tablicy znaków (która znika po wyjściu z funkcji).
Prawda. Nie mogę zaprzeczyć, że to bezmyślnie napisany na forum kod. Pocieszam się tym, że autor dał już sobie chyba spokój z projektem. Dla potomności: dostarczajcie pamięć do funkcji, a nie tak jak to zrobiłem ja.