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和自動隱藏
編輯:
我已經修改了代碼,改變了電話,但我得到了相同的值的時候,不管是什麼我設置的值。
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)或其相關函數嗎?此外,你可以顯然只有一個自動隱藏欄的每個屏幕邊緣... –
我修改了代碼並放置了一條調試語句。它似乎總是在lParam字段中顯示值0。 (上面的編輯) –