我注意到我的应用程序将图标发送到尺寸为16x16像素的Windows托盘 - 而我的Vista PC我有一个双倍宽的任务栏,似乎以18x18显示图标.我的应用程序图标上的调整大小工件看起来很糟糕.如何询问Windows图标应该是多大?
编辑:
我正在动态生成图标,带有像素字体文本覆盖.动态生成一堆图标大小似乎很浪费,所以避免构建一个具有所有"可能"大小的图标会很好(不是我甚至不确定那些是什么).
GetSystemMetrics(SM_CXSMICON)返回16 - 不正确的值.
GetThemeBackgroundContentRect也没有帮助.
我正在寻找一种方法来检查给定窗口是否有任务栏按钮.也就是说,给定窗口的句柄,如果窗口在任务栏中,我需要为TRUE,否则为FALSE.
相反,我想知道是否有办法获得属于给定任务栏按钮的窗口的句柄,我想这需要一种方法来枚举任务栏按钮.
(第一个前者是我需要的部分,后者是可选的.)
非常感谢.
我的应用程序已经有一种模式多年,客户可以"禁用对操作系统的访问".显然这个功能与谷物相悖(至少就Windows而言),但有些安装我的应用程序是唯一一个应该可见的机器操作员程序,在这种情况下这样的功能是有用的.
我使用的技术是从几个"层"构建的:
要禁用我使用的任务栏:
// Get a handle to the taskbar and its button..
Taskbar := FindWindow('Shell_TrayWnd', Nil);
StartButton := FindWindow('Button', Nil);
// Hide the taskbar and button
if Taskbar <> 0 then
ShowWindow( Taskbar, SW_HIDE );
if StartButton <> 0 then
ShowWindow( StartButton, SW_HIDE );
// Set the work area to the whole screen
R := Rect( 0,0,Screen.Width,Screen.Height );
SystemParametersInfo(
SPI_SETWORKAREA,
0,
@R,
0 );
Run Code Online (Sandbox Code Playgroud)
这很好用,但在W7上似乎还算不错.研究如何在几年前禁用任务切换发现了唯一一种"假装"你的应用程序是屏幕保护程序的技术(除了将应用程序重命名为'explorer.exe'并启动它等等)之外的其他方法:
procedure EnableTaskSwitching( AState : boolean );
// Enables / disables task …Run Code Online (Sandbox Code Playgroud) 在Windows 7中,某些程序允许用户通过中键单击/切换+单击任务栏项来启动多个实例(例如:Paint,Notepad,Visual Studio ......)
但是,我创建的应用程序都没有表现出这种行为.中间单击功能将使按钮发光,但无法打开另一个实例,除非我首先将程序固定到任务栏(这不是Paint/Notepad/etc仍然无法打开新实例)
允许WPF应用程序正确创建上述程序之类的新实例的秘诀是什么?
我试过搜索,但我只提出了跳转列表/任务或单实例程序结果.
我目前正在尝试将Java应用程序固定到Windows 7任务栏.该应用程序是使用Launch4j启动的.程序图标显示正确,但右键单击任务栏上的图标仅显示带有"关闭窗口"条目的上下文菜单.没有用于将应用程序固定到任务栏的菜单项.将EXE文件拖到任务栏也无法正常工作.在任务栏中单击此新启动器时,第二个图标会在任务栏中生成.
我按照这两个问题的解决方案的指示来解决问题,但它没有帮助:
来自第二个问题/解决方案的JNA内容编译并且不会抛出任何异常.我可以在设置后阅读应用程序ID.但我仍然无法将应用程序固定到任务栏.
我在Github上创建了一个小测试应用程序来演示这个问题:
https://github.com/kayahr/launch4jtest
该应用程序使用Maven作为构建系统.只需运行mvn package,您就会在目标目录中找到一个ZIP文件,其中包含设置此应用程序ID所需的EXE文件和jna.jar.将此ZIP解压缩到某个目录,双击EXE并尝试将应用程序固定到任务栏,您将看到问题.
那么这个应用程序有什么问题?
当我打开许多类似的窗口时,例如,多个浏览器窗口,它们都被分组到任务栏上的相同图标中.当我将鼠标悬停在这上面时,我会得到一个窗口的缩略图,以及一段截断的文本,它可以帮助我找出那个窗口是什么.
但是我也想在资源管理器窗口中显示完整路径,因此截断的文本通常是C:\ CommonPathToEveryWind ...
我注意到如果我有超过14个浏览器窗口打开,那么Windows放弃尝试显示这些无用的缩略图,而是给我一个格式良好的路径列表.
我的问题是如何自定义此行为,为缩略图不合适的应用程序子集(缩略图,"Everything")禁用缩略图.或者将每个分组任务栏图标的最大缩略图数减少到2; 或者只是一起禁用缩略图,(不会丢失整个Windows主题)
编辑:只是为了清楚我目前得到的,以及我真正想要的东西.我仍然希望保持分组行为,以便同一程序的多个实例,例如Explorer,只在任务栏上占用一个插槽.我想要的是改变我将鼠标悬停在分组图标上时显示的内容:
我实际看到的 - 无用的缩略图: -

我想要的任何数量的实例样式: -

我有两个显示器并在多窗口模式下使用VS 2015(即不同屏幕上的单独选项卡).VS 2013总是在任务栏上只显示一个图标,非常舒服,但VS 2015每个单独的窗口显示一个图标.这让我疯了!
我试图找到一个设置来关闭此行为,但没有结果.谷歌搜索也没有多大帮助.
顺便说一句,我使用的是Win Server 2008 R2.
有人找到了解决这个问题的方法吗?
我有一个表格我设置为最大化,但由于某种原因,它忽略了任务栏并最大化到整个屏幕.那是典型的吗?有解决方法吗?
我正在运行带有双显示器设置的Windows XP(第一个/主窗口中的任务栏).
基本上我想制作简单的切换程序(将映射到某些键盘快捷键),如果处于正常模式,则将任务栏设置为自动隐藏模式(相反,如果处于自动隐藏状态,则设置为正常显示模式).
你知道如何在C#中实现它吗?(或者Win32 C++,但实际上做的任何事情都可以.)
谢谢.希望我已经清楚了.
-
我真的不想要任何与任务栏重叠的全屏应用程序,只有切换显示模式和退出的无窗口程序.我定期从自动隐藏切换到普通视图,并希望简化它.(使用Win7.)
-
编辑.例如
#include <windows.h>
int CALLBACK WinMain(HINSTANCE, HINSTANCE, LPSTR, int)
{
SetWindowPos(FindWindow(L"Shell_traywnd", NULL ), 0, 0, 0, 0, 0, 0x40);
}
Run Code Online (Sandbox Code Playgroud)
不会做的伎俩,它只显示任务栏,它已经可见=真,但没有将其切换为自动隐藏.(同样适用于0x80.)
Windows任务栏上的显示对象有几个应用程序,但没有实现IDeskBand接口.例如,联想电池表和笔记本电池电池信息.
例如:
笔记本电池信息http://home.arcor.de/batteryinfogateway/img/taskbar_new.png
在上图中,任务栏上的对象由应用程序放在那里,并在应用程序关闭时消失.这与IDeskBand不同,其中COM对象由explorer.exe直接加载.
可以在Windows中使用什么API /方法来实现这一目标?