2012-03-05 16 views
5

używam:Jak uzyskać uchwyt przycisku Start w systemie Windows 7?

Hwnd hStart = ::FindWindow ("Shell_TrayWnd",NULL); // get HWND of taskbar first 
hStart = ::FindWindowEx (hStart, NULL,"BUTTON", NULL); // get HWND of start button 

aby rozpocząć uchwyt przycisku. Działa poprawnie w systemie Windows XP, , ale w systemie Windows 7, ::FindWindowEx (hStart, NULL,"BUTTON", NULL) zawsze zwraca 0, a GetLastError() zwraca także 0.

Dlaczego tak jest?

+2

Przypuszczam, że przycisk Start w systemie Windows 7 nie ma już klasę 'BUTTON', ale mogę się mylić. Możesz sprawdzić za pomocą Spy ++, co to jest teraz, ale zdecydowanie radzę ci, abyś nie bał się podstawowych elementów interfejsu, takich jak przycisk Start. Co próbujesz osiągnąć? –

+5

Co zrobiłbyś z uchwytem przycisku Start, nawet jeśli go masz? – Gabe

+0

Gabe, właśnie uczę się o HOOK. :) – Fish

Odpowiedz

7

W systemie Windows 7 przycisk start, który ma nazwę klasy "Button", jest dzieckiem okna pulpitu. Twój kod zakłada, że ​​przycisk start jest dzieckiem okna o nazwie "Shell_TrayWnd", które rzeczywiście wydaje się być sposobem, w jaki pasek zadań i menu startowe zostały zaimplementowane na XP.

Windows 7 chcesz użyć czegoś takiego:

hStart = ::FindWindowEx(GetDesktopWindow(), NULL, "Button", NULL); 

Chociaż myślę, że byłoby lepiej, szukanie dla niego po imieniu, aby mieć pewność, że masz prawo przycisk.

hStart = ::FindWindowEx(GetDesktopWindow(), NULL, "Button", "Start"); 

Nie jestem pewien, w jaki sposób Vista obsługuje swój pasek zadań i menu startowe, ale można użyć Spy ++, aby się dowiedzieć.

Powiedziawszy to wszystko, byłoby znacznie lepiej, gdybyś mógł znaleźć sposób na osiągnięcie swoich celów bez konieczności zaglądania w takie szczegółowe informacje dotyczące implementacji.

+10

I nie zapomnij, że w Windows 8 wszystko będzie zupełnie inne. –

+5

@ Mark Tak, teraz byłby to doskonały czas, aby oczyścić dom i porzucić takie hacki –

+0

Dzięki! Próbowałem 'hWnd = :: FindWindow (" Button "," Start ");', działa w Windows 7, podczas gdy w XP po prostu zwraca NULL. Domyślam się, że przycisk start jest podrzędnym oknem paska zadań w XP, podczas gdy w Windows 7 jest to niezależne okno. :) – Fish

-2

:: FindWindow (L "Shell_TrayWnd", NULL);

ten kod jest do całkowitego pasku

Powiązane problemy