在我的Windows应用程序中,我试图找到任务栏的高度。虽然我可以将其编程到我的程序中,但我希望以编程方式找到它以支持过去,现在(win7)和未来的Windows版本。
那么,我该怎么做?
答案 0 :(得分:4)
通过在Google上搜索"height of taskbar c++",我得到了以下结果:
以下是使用Windows函数
FindWindow
和GetWindowRect
获取Windows任务栏的高度的方法。int MyClass::getTaskBarHeight() { RECT rect; HWND taskBar = FindWindow(L"Shell_traywnd", NULL); if(taskBar && GetWindowRect(taskBar, &rect)) { return rect.bottom - rect.top; } }
获取宽度(任务栏应位于左侧或右侧) 屏幕)可以使用:
完成rect-right - rect.left
您可能需要检查宽度是否大于高度。如果宽度较大,则表示条形图位于顶部或底部。否则,它位于屏幕的左侧/右侧。
答案 1 :(得分:4)
你是从GetMonitorInfo()
,MONITORINFOEX.rcWork成员那里得到的。
从MonitorFromRect()获取需要调用此函数的HMONITOR,传递窗口矩形。或者MonitorFromPoint()或EnumDisplayMonitors()取决于您要显示窗口的位置。 (0,0)始终位于主监视器的左上角。
答案 2 :(得分:4)
使用ABM_GETTASKBAR消息向Windows询问相关信息并指定任务栏的hwnd。
答案 3 :(得分:1)
可能你不仅想要Taksbar,还想要屏幕上的所有其他“酒吧”吗?
您实际需要的只是SystemParametersInfo(SPI_GETWORKAREA)
SystemParametersInfo,将SPI_GETWORKAREA作为参数传递
检索主显示器上工作区的大小。 工作区域是屏幕未被系统遮挡的部分 任务栏或应用程序桌面工具栏。 pvParam参数必须 指向接收工作坐标的RECT结构 区域,以虚拟屏幕坐标表示。
答案 4 :(得分:0)
根据您的需要,有许多方法。我使用了EnumDisplayMonitors(),因为我需要测试每个显示器以查看它是否有任务栏。这样做的方法是:
使用EnumDisplayMonitors()获取所有监视器的列表。
MyInfoEnumProc(HMONITOR hMonitor, HDC hdcMonitor, LPRECT lprcMonitor, LPARAM dwData)
回调内部将为您提供显示的句柄。 警告此功能也将枚举虚拟显示:使用显示屏的手柄,使用GetMonitorInfo()和显示屏的手柄。
这将返回显示名称以及两个RECT结构之一的显示位置和分辨率,另一个RECT将是工作区域。您需要进行两次检查(一次用于X,一次用于Y)以查看监视器上是否有任务栏以及任务栏的高度或宽度。
例如,首先我们检查Y轴:
if(monitor->rcMonitor.top == monitor->rcWork.top &&
monitor->rcMonitor.bottom == monitor->rcWork.bottom)
{
std::cout << "There is no taskbar on the Y axis" << std::endl;
}
else
{
std::cout << "There is a taskbar on the Y axis" << std::endl;
int height = monitor->rcMonitor.bottom - monitor->rcMonitor.top;
int hieghtOfTaskbar = height - (monitor.rcWork.bottom - monitor.rcWork.top);
std::cout << "The height of the taskbar is: " << heightOfTaskbar << std::endl;
}
然后我们检查X轴:
if(monitor->rcMonitor.right == monitor->rcWork.right &&
monitor->rcMonitor.left == monitor->rcWork.left )
{
std::cout << "There is no taskbar on the X axis" << std::endl;
}
else
{
std::cout << "There is a taskbar on the X axis" << std::endl;
int width = monitor->rcMonitor.left - monitor->rcMonitor.right;
int widthOfTaskbar = height - (monitor.rcWork.left - monitor.rcWork.right);
std::cout << "The width of the taskbar is: " << heightOfTaskbar << std::endl;
}
任务栏的高度或宽度(取决于位置)通常分别是显示器的高度或宽度,但情况可能并非总是如此。