2016-08-15 5 views
0
public void toggleAutoHide() 
{ 
    APPBARDATA data = new APPBARDATA.ByReference(); 
    data.hWnd = hWndGlobal; 
    data.cbSize.setValue(data.size()); 
    data.lParam.setValue(Shell32.INSTANCE.SHAppBarMessage(new DWORD(ShellAPI.ABM_GETSTATE), data).longValue()); 
    data.lParam.setValue(data.lParam.intValue()^0x0000001); 
    UINT_PTR result = Shell32.INSTANCE.SHAppBarMessage(new DWORD(ShellAPI.ABM_SETSTATE), data); 
} 

У меня есть код выше, который должен скрытие созданной AppBar, но почему-то вместо того, чтобы делать это в реальный бар я создаю, это фактически изменение статуса главного панели задач Windows. Какой-нибудь вопрос, какой шаг мне не хватает?SHAppBarMessage и AutoHide

EDIT:

Я изменил код и изменил вызов, но я получаю то же значение, все время, независимо от того, что я установить значение в.

public void toggleAutoHide() 
    { 
     APPBARDATA data = new APPBARDATA.ByReference(); 
     data.hWnd = hWndGlobal; 
     data.cbSize.setValue(data.size()); 
     data.uEdge.setValue(ShellAPI.ABE_TOP); 
     System.out.println("LParam [byte, int]: " + data.lParam.byteValue() + " -- " + data.lParam.intValue()); 
     //lParam always shows 0 
     if(data.lParam.intValue() == 1) 
     { 
      data.lParam.setValue(0); 
     } 
     else 
     { 
      data.lParam.setValue(1); 
     } 

     UINT_PTR result = Shell32.INSTANCE.SHAppBarMessage(new DWORD(ShellAPI.ABM_SETAUTOHIDEBAR), data); 
     System.out.println("Result = " + result.intValue()); //always returns 1 
    } 

ответ

0

ABM_SETSTATE вызов с помощью data.hWnd переменной, чтобы решить, какие окна ручка получает изменения. Вы присваиваете это значение переменной hWndGlobal, но не объясняете, откуда это взялось.

Тот факт, что он назван «глобальным», кажется, подразумевает где-то ранее в коде, который вы дали ему значение для панели задач Windows. Остановите это задание.

Вы, вероятно, хотите что-то вроде:

data.hWnd = User32.INSTANCE.FindWindowA(null, "Title of your new appbar"); 
+0

Я нашел задание и присваивает hWndGlobal с помощью оператора присваивания вы использовали выше. Однако я получаю такое же поведение. Я попытался явно установить его с помощью метода FindWindowA, но все-таки поступил. Есть что-то еще, что мне не хватает? –

+0

При ближайшем рассмотрении, похоже, что ABM_SETSTATE всегда применяется к основной панели задач. Вы просмотрели [ABM_SETAUTOHIDEBAR] (https://msdn.microsoft.com/en-us/library/windows/desktop/bb787957 (v = vs.85) .aspx) или связанные с ним функции? Кроме того, у вас, по-видимому, может быть только одна панель автоматического скрытия на краю экрана ... –

+0

Я изменил код и разместил инструкцию отладки. Кажется, всегда отображается значение 0 в поле lParam. (правки выше) –

 Смежные вопросы

  • Нет связанных вопросов^_^