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
}
Я нашел задание и присваивает hWndGlobal с помощью оператора присваивания вы использовали выше. Однако я получаю такое же поведение. Я попытался явно установить его с помощью метода FindWindowA, но все-таки поступил. Есть что-то еще, что мне не хватает? –
При ближайшем рассмотрении, похоже, что ABM_SETSTATE всегда применяется к основной панели задач. Вы просмотрели [ABM_SETAUTOHIDEBAR] (https://msdn.microsoft.com/en-us/library/windows/desktop/bb787957 (v = vs.85) .aspx) или связанные с ним функции? Кроме того, у вас, по-видимому, может быть только одна панель автоматического скрытия на краю экрана ... –
Я изменил код и разместил инструкцию отладки. Кажется, всегда отображается значение 0 в поле lParam. (правки выше) –