2012-03-15 7 views
17

Mamy aplikację, nazwijmy ją MyApp. Podczas instalacji tworzymy ikonę pulpitu dla MyApp, która zasadniczo nazywa się MyLauncher.exe /launch MyApp.exe. MyLauncher robi kilka przydatnych rzeczy (sprawdź aktualizacje, itp.), A następnie uruchamia MyApp.Jak powiązać moją aplikację z przypiętym programem na pasku zadań systemu Windows 7?

MyApp on the Desktop

Użytkownik z Windows 7 może chcesz przypiąć go do paska zadań (tj prawym przyciskiem myszy na ikonę na pulpicie, "Przypnij do paska zadań"):

MyApp on the Taskbar

Ponieważ jednak skrót wskazuje MyLauncher, następujące czynności mają miejsce, gdy użytkownik uruchamia aplikację (z ikoną na pulpicie lub ikoną na pasku zadań): MyLauncher robi swoje rzeczy, a następnie uruchamia MyApp. Na pasku zadań, wynik jest następujący:

MyApp twice on the Taskbar

rozumiem dlaczego tak się dzieje. Ponieważ MyLauncher uruchamia MyApp, na pasku zadań Windows 7 widzi je jako dwie różne aplikacje.

Oczywiście, moje pytanie brzmi: Czy jako programista MyLauncher i MyApp mogę coś z tym zrobić? Chciałbym, aby na pasku zadań systemu Windows 7 "powiązano" wszystkie wystąpienia MyApp.exe ze skrótem rozpoczynającym się MyLauncher.exe /lauch MyApp.exe.

+0

Tak na wszelki wypadek: MyApp.exe to w rzeczywistości 'msaccess .exe MyVbaProject.mdb', stąd tag VBA. Aplikacja VBA intensywnie korzysta z (własnych) bibliotek .net, stąd tagi C# i .net. Rozwiązanie w którymkolwiek z tych języków jest w porządku. Wywołania Windows API również są w porządku. – Heinzi

+1

Zobacz [Windows® API Code Pack dla Microsoft® .NET Framework] (http://archive.msdn.microsoft.com/WindowsAPICodePack) i [Code Project: Windows 7/VS2010 aplikacja demonstracyjna] (http: //www.codeproject .com/Articles/44393/Windows-7-VS2010-demo-app) – LarsTech

+0

Może to pomóc w http: // stackoverflow.com/questions/3648386/wpf-app-has-no-pin-to-taskbar-option – yuben

Odpowiedz

0

Jedna rzecz, którą możesz zrobić, to nie wyświetlać ikony paska zadań dla aplikacji. W WPF jest to tak proste, jak Otoczenie:

ShowInTaskbar="False"

Problem z tego podejścia jest to, że zmniejszają użyteczność, ponieważ użytkownik nie może już powiedzieć, gdy aplikacja jest uruchomiona lub łatwo doprowadzić go do czołówki, kiedy gubi się za innymi oknami. W celu złagodzenia niektórych z tych problemów można utworzyć ikonę powiadomień dla tej aplikacji, która umożliwi niektóre z tych funkcji, a także udzieli użytkownikowi informacji zwrotnej na temat bieżącego stanu aplikacji. (Uruchamianie, nie uruchamianie, itp.)

This msdn resource ma dobry przykład kodu, jak tworzyć ikony powiadomień w formularzach systemu Windows. Możesz użyć tej samej metody dla aplikacji WPF.

enter image description here

Mała wskazówka: Informuj ikony 16x16 pikseli. Przed zmianą rozmiaru należy znaleźć wektorową wersję ikony, ponieważ dzięki temu uzyskasz ostrzejsze wyniki, ponieważ utracisz wiele szczegółów w tym rozmiarze.

interakcji użytkownika z notify-ikony mogą obejmować:

  • Dwukrotnie kliknij> Przynosi aplikację do przodu
  • Right-Click> powoduje wyświetlenie menu kontekstowego z niektórych opcji. (I.E. Przesuń na przód, zamknij, itp.)
  • Sterowanie kursorem myszy> Wyświetla listę narzędzi zawierającą informacje dotyczące aplikacji.
3

Spróbuj zabawy z „App identyfikatorów” zobaczyć tutaj, aby uzyskać więcej informacji: http://msdn.microsoft.com/en-us/library/windows/desktop/dd378459(v=vs.85).aspx

„identyfikatorów model aplikacji użytkownika (AppUserModelIDs) są szeroko stosowane na pasku zadań w systemie Windows 7 i nowszych systemach skojarzyć procesy, pliki i okna z konkretną aplikacją, w niektórych przypadkach wystarczy polegać na wewnętrznym identyfikatorze AppUserModelID przypisanym do procesu przez system: Jednak aplikacja, która jest właścicielem wielu procesów lub aplikacji działającej na hoście proces może wymagać jawnej identyfikacji, aby mógł grupować swoje odmienne okna pod jednym przyciskiem paska zadań i kontrolować zawartość listy szybkiego dostępu tej aplikacji. "

+1

Jeśli jesteś procesem .NET, skorzystaj z pakietu kodu API Windows. –

0

1)
To jest bardziej architektonicznej zapytania/problemu - to trochę nietypowy projekt dla takich celów,
czyli jeśli Updater (Zgaduję masz więcej, ale do rozpoczęcia w/to) Wymagane jest zwykle sprawdzane w aplikacji - wtedy, jeśli aktualizacja zostanie uznana za rozpoczynającą proces zewnętrzny i aktualizującą aplikację itp.
Program uruchamiający (zgodnie z opisem) miałby sens, jeśli uruchamiasz wiele różnych rzeczy lub masz ogólne rozwiązanie lub bardziej złożone przypadki - np masz "proces hosta", który ładuje dll-s, usługi itp.
Więc w zasadzie masz problemy ze względu na nieco niefortunny projekt, decyzję - chyba że masz coś, co gwarantuje to wystarczająco.
Ale mając powiedział pan, że nie chciał przeprojektowanie ...
2)
Można jeszcze zrobić „trik” z wyrzutnią - i zrobić coś w rodzaju prostych prac wokół ...

  • Najpierw uruchom "Mój argument-argument: sprawdź" (i masz na pulpicie ikonę na nim, a nie program uruchamiający) i po uruchomieniu podaj argument "fork", a jeśli "check" wykonasz mały kod "shim", który uruchamia "MyLauncher",
  • pobierz program uruchamiający, aby zrobić to, co powinien - możesz nawet zamknąć główny MyApp po uruchomieniu,
  • w uruchamianie wyrzutni uruchamia ponownie MyApp (lub bardziej skomplikowane do zamknięcia, jeśli pozostało tylko, jeśli wymagana jest aktualizacja itp. - ale poprzednia jest łatwiejsza), i użyj jakiegoś innego argumentu lub nie używaj żadnego (zależy od tego, co chcesz itp. .),
  • robisz jakiś proces podwójne przekierowanie rodzaj - start app => wyrzutnię => app ponownie,
  • powinieneś mieć żadnych problemów z ikonami w ten sposób,
  • z tym wszystkim powinieneś uważać na dostarczaniu odpowiednich manifesty do każdej aplikacji (najczęściej wyrzutnia, która wymaga aktualizacji, więcej uprawnień) jeśli wymagana jest w tryb „admin”, ale myślę, że masz już

, który może załatwić sprawę, nie próbował, ale nie rozumiem, dlaczego nie powinien - i możesz zachować istniejącą architekturę itd.