explorer crasht bei TB_GETBUTTON
-
Hi Leute,
ich möchte ein tray icon entfernen, welches zu einer fremden Anwendung gehört. Dazu hole ich mir das "ToolbarWindow32" Handle und schicke TB_GETBUTTON, doch dann crasht auch schon explorer.exe.
Warum ist das so? Bei TB_BUTTONCOUNT crasht es nicht!
HWND wnd = FindWindow("Shell_TrayWnd", 0); wnd = FindWindowEx(wnd, 0, "TrayNotifyWnd", 0); wnd = FindWindowEx(wnd, 0, "SysPager", 0); wnd = FindWindowEx(wnd, 0, "ToolbarWindow32", 0); TBBUTTON tbb = { }; SendMessage(wnd, TB_GETBUTTON, 0, (LPARAM)&tbb);
-
Klar. Der Zeiger, den Du übergibst wird als Zeiger in den eigenen Prozess verwendet.
Wenn must Du im fremden Prozess Speicher allokieren und dann diesen Zeiger übergeben und Dir den Speicher aus dem anderen Prozess dann holen.
-
Ok aber warum muss man das zum Beispiel bei WM_GETTEXT nicht tun?
-
Manii schrieb:
Ok aber warum muss man das zum Beispiel bei WM_GETTEXT nicht tun?
Weil WM_GETTEXT eine Standard Windows Nachricht ist die gemashalled wird.
-
Okay was auch immer das heißt
Gibts denn ne Möglichkeit zu erfahren, welche Nachrichten das sind? Oder braucht man da einfach Erfahrung?
-
Grundsätzlich solltest Du stutzig warden wenn Zeiger übergeben warden müssen...
Ansonsten werden alle Core-Nachrichten IMHO gemarshalled. Allerdings nicht eine aus dem Common Controls. Und bei Dir handelt es sich um Common Controls.
Zudem: Wer will das schon Prozessübergreifend Nachrichten versenden, azußer Bösewichten...
-
Ok danke.
Martin Richter schrieb:
Zudem: Wer will das schon Prozessübergreifend Nachrichten versenden, azußer Bösewichten...
"Hardware entfernen" Symbol wegkriegen (klappt aber nicht, in XP ist tbb.dwData angeblich noch eine versteckte Struktur mit der notifyIcon-ID, in Win7 nur ein nullptr).
Oder Serverkonsole fernsteuern.
Oder im Asus Xonar Audio Center eine Combobox-Action simulieren, um per Tastatur zwischen Boxen/Kopfhörern umzuschalten.
Oder ...:p