2016-05-14 7 views
0

Windowsタスクバー(システムトレイ?)がドッキングされている場所を特定しようとしています。そのため、タスクバーの上/下/右にポップアップウィンドウを配置できます。Retrieve Taskbar Docking Position:result incorrect

私はこの情報を得るためにSHAppBarMessage(ABM_QUERYPOS, &barData)を使用していますが、私のタスクバーがABE_TOPのときは常にABE_LEFTを返します。

どうなりますか?たぶん私はそれを決定するためにその機能を使用することはできません?たぶん私のAPPBARDATAパラメータが間違っていますか?

APPBARDATA barData; 
barData.cbSize = sizeof(APPBARDATA); 
barData.hWnd = FindWindow("Shell_TrayWnd", NULL); 
barData.uCallbackMessage = 0; 
//barData.uEdge = ABE_LEFT; 
//barData.rc = RECT{0,0300,300}; 
barData.lParam = (LPARAM)FALSE; 

SHAppBarMessage(ABM_QUERYPOS, &barData); 

// barData.uEdge always equals ABE_LEFT 
+2

いずれのAPI呼び出しの戻り値もチェックしていません。 'FindWindow'が有効なHWNDを返すか、' SHAppBarMessage'が成功するかどうかをどうやって知っていますか?あなたが投稿したコードは、ルーレットに相当します:*私はそこに投げ捨てるでしょうし、おそらくそれは動作しないかもしれません。*常に** APIコールの戻り値をチェックし、それらの戻り値が意味するものと、より多くの情報を見つける方法を見つけるためのドキュメント。 –

+0

また、Win32 API呼び出しに渡す前に、memsetを使用して構造体をゼロにすることをお勧めします。しかし、私はそれがあなたの問題ではないと確信しています – kcraigie

+0

ただ仕事場のためにモニターに尋ねるならば、 –

答えて

0

私は間違ったフラグを使用していたようです。次の動作があります。

APPBARDATA barData {0}; 
barData.cbSize = sizeof(APPBARDATA); 
UINT_PTR res = SHAppBarMessage(ABM_GETTASKBARPOS, &barData); 
+0

複数のモニタがある場合はどうなりますか? –