Windows 7 Jump List – amire nem jó

Az elmúlt órákat azzal töltöttem, hogy megpróbáltam a Windows 7 Jump List funkcióját beépíteni a saját alkalmazásomba. Közben számtalanszor volt “na neee, ezt nem hiszem el :(” élményem, ami után mindig hosszas guglizás következett, ezért leírom a tapasztalatokat és a tanulságokat, hogy másnak megspóroljak egy kis időt:

1. A jump list jól programozható WPF 4-ből a System.Windows.Shell névtéren keresztül, XAML-ből és code behindból egyaránt, nem kell hozzá a Windows API Code Pack. “Természetesen” a két környezetben nem azonos az API, tehát nem mindegy, milyen cikket olvas az ember.

2. A jump list Recent items kategóriája csak akkor használható, ha az alkalmazáshoz van fájl kiterjesztés társítva, egyébként nem. Itt jól jöhet a RegistrationHelper.RegisterFileAssociations metódus a Windows API Code Pack példák közül vagy persze írhatunk telepítőt is.

3. A jump listben lehet saját taskokat létrehozni, ennek bemutatására érdekes módon az összes demó a Notepad.exe-t és a Calc.exe-t indítja el. Nem véletlenül. Itt csak olyan útvonalakat lehet megadni, mint amiket például a Start menü Run ablakába be lehet írni, ami a shell által elindítható, végrehajtható. Ha a fájl nem létezik a diszken, kivételt kapunk. Nem véletlenül hívják ezt belül shell linknek, csak managed környezetben lett “task” a neve.

4. A jump list nem egyenlő a menüvel, az ide felvett taskokra történő kattintásról nem fog értesülni az aktuális alkalmazás. Valami hihetetlen kreativitásról tett tanúságot az, aki kitalálta, hogy ha egy jump list elemre kattintunk, akkor mindig el fog indulni egy új példány az alkalmazásból. Annyit tudunk tenni, hogy megadjuk, hogy ez az újabb példány milyen parancssori paramétereket kapjon meg. Ugye ez épp az a scenario, amire az Explorer, az Internet Explorert és a Wordöt használjuk, arra kiváló.

5. Ha olyan taskot szeretnénk a jump listbe tenni, ami az alkalmazás aktuális példányára vonatkozik (például ablak maximalizálás, About ablak megnyitása stb.), akkor az egyetlen lehetőség, hogy a saját exe fájlunk útvonalát adjuk meg és parancssori paraméterben tudatjuk, hogy mit szeretnénk tenni vele. Sajnos ebben az esetben is el fog indítani a Windows egy új példányt az alkalmazásból, aminek indulásakor megvizsgálhatjuk, hogy fut-e már másik példány belőle (az eredeti) és annak valahogy (remoting, named pipe, window message stb.) átküldjük, hogy mit kellene éppen csinálnia, majd a második példány bezárja magát. Ennek persze van 2 nagyon fájó hátránya: az alkalmazásunk csak 1 példányban fog tudni futni, az üzenet átküldése pedig elég gusztustalan munka.

Tudtok jobb megoldást?

 

Vélemény, hozzászólás?

Adatok megadása vagy bejelentkezés valamelyik ikonnal:

WordPress.com Logo

Hozzászólhat a WordPress.com felhasználói fiók használatával. Kilépés / Módosítás )

Twitter kép

Hozzászólhat a Twitter felhasználói fiók használatával. Kilépés / Módosítás )

Facebook kép

Hozzászólhat a Facebook felhasználói fiók használatával. Kilépés / Módosítás )

Google+ kép

Hozzászólhat a Google+ felhasználói fiók használatával. Kilépés / Módosítás )

Kapcsolódás: %s