Wyszukiwanie w Menu Start a’la Vista
marzec 22, 2008 — morituriusOstatnim razem kiedy otworzyłem sobie menu Start->All Programs cały ekran został zasłonięty przez kilkukolumnową listę programów, które mam zainstalowane na dysku. Nie trudno się domyślić, że znalezienie jakiegoś programu w tym bałaganie graniczy z cudem. Nawet jeśli dane są posortowane to i tak niewiele daje ponieważ nie zawsze wiemy na jaką literę zaczyna się folder zawierający interesujący nas program.
Zatęskniłem wtedy do cudownego rozwiązania z systemu Windows Vista, w którym po wciśnięciu przycisku Start wystarczy wpisać jakąś frazę, a on znajdzie nam w mgnieniu oka żądany program. Kluczową sprawą w takim wyszukiwaniu jest aby fraza była wyszukiwana w nazwie pliku w taki sposób, że użytkownik pamiętając jakąś tylko którąkolwiek część tej nazwy może otrzymać to czego oczekuje. Takie wyszukiwanie można przeprowadzić z pomocą wyrażenia regularnego: “.*fraza.*”.
Pomyślałem, że fajnie byłoby stworzyć program, który działałby na podobnej zasadzie. Postanowiłem ograniczyć wyszukiwanie tylko do menu Start. Po decyzji o napisaniu programu pozostaje oczywiście wybór narzędzia, którego użyję. Do wyboru miałem trzy: Microsoft Visual C++ 2008 Express Edition, Borland C++ Builder, oraz Microsoft Visual C# 2008 Express Edition. Dodatkowo MSVC++2k8EE znam, ale programowanie okienek w nim jakoś mi nie leży. BCB jest fajne do tworzenia programów, ale ma niesamowicie ubogie możliwości. Pozostał więc MSVC#2k8EE. Tutaj sprawa też nie miała się najlepiej ponieważ w życiu nie napisałem nic porządnego w C#. Nie byłem pewien czy dam radę, ale postanowiłem sprawdzić. W końcu jeden nieukończony projekt w tą czy w tą to i tak bez różnicy przy tak dużej ich liczbie (tych nieskończonych)
Po kilku godzinach kodowania, przeszukiwania internetu i maksymalnego wykorzystania inwencji twórczej, powstał program, który można już przedstawić. Nie działa on jeszcze w pełni poprawnie, ale większość jest.
Jak wiadomo - w menu Start znajdują się głównie linki do programów, a nie same programy. Jest to pewien problem ponieważ, z linków trzeba było jakoś wydobyć informację na temat tego co pokazuje. Na szczęście w C# okazało się to być całkiem proste. Jednak nie zawsze jest tak fajnie. Większość plików i programów działa bez zarzutu, jednak niektóre z nich nie chcą się uruchomić w ten sposób, a inne pokazują okienko o błędzie i możliwości wysłania tegoż do MS.
Uruchamianie realizowane jest przez taki kod:
WshShellClass wshShell = new WshShellClass(); IWshShortcut link = (IWshShortcut)wshShell.CreateShortcut(filePath); //wshShell.Exec(link.TargetPath); System.Diagnostics.Process.Start(link.TargetPath, link.Arguments);
Rozwiązanie z Process.Start() działa również dla plików nie będących plikami wykonywalnymi. Po prostu pliki uruchamiane są w domyślnych programach. Problem pojawia się ze skrótem do znanego programu Skype, który jako TargetPath ma taki oto ciąg:
C:\WINDOWS\Installer\{5C82DAE5-6EB0-4374-9254-BE3319BA4E82}\Skype.ico
Widocznie jest to jakiś inny rodzaj linku ponieważ, kiedy sprawdzam właściwości skrótu w miejscu Target okienko adresu jest nieaktywne i wpisane jest tam jedynie Skype 3.6.
Nie mam pojęcia w jaki sposób sobie z tym poradzić niestety.
BTW: Jaką piękną mamy wiosnę! Chyba zaraz pójdę na sanki!
marzec 22, 2008 @ 10:53 przed południem
Kolejny człowiek opisujący na blogu swój pierwszy raz z .net
marzec 22, 2008 @ 11:37 przed południem
.NET nie jest zle. Calkiem fajnie szybko sie w tym pisze ^^
Ale poki co daleko mi do bieglosci w tej kwestii
marzec 22, 2008 @ 12:50 pm
Ale przecież można uruchomić skrót tak jakby on był zwykłym programem!
Czyli:
System.Diagnostics.Process.Start(@”C:\Documents and Settings\All Users\Menu Start\Programy\Safari.lnk”);
Też zadziała i wtedy nie ma problemu z dziwnymi skrótami.
marzec 22, 2008 @ 1:26 pm
@Zed: faktycznie! Pomoglo na skype, ale Imagicon nadal sie wywala przy probie wlaczenia.