0
我想确定Windows任务栏(系统托盘?)停靠在哪一侧 - 因此我可以将弹出窗口放置在任务栏上方/下方/左侧/右侧。检索任务栏停靠位置:结果不正确
我使用SHAppBarMessage(ABM_QUERYPOS, &barData)
来获取这些信息,但是当我的任务栏是ABE_TOP
时,我总是会返回ABE_LEFT
。
怎么回事?也许我不能使用该功能来确定它?也许我的APPBARDATA
params是错误的?
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
您没有检查任何一个API调用的返回值。你怎么知道'FindWindow'返回一个有效的HWND,或'SHAppBarMessage'是否成功?您发布的代码与轮盘代码相当:*我会把它扔到那里,也许它可以工作,或者它不会。*您应该**总是**检查API调用的返回值,并阅读该文档找出那些返回值的含义以及如何找到更多信息。 –
另一个最佳实践是在将它传递给Win32 API调用之前,用memset将结构清零。但我确定这不是你的问题 – kcraigie
如果只是要求显示器的工作区 –