win10下VB6的开发,我也是醉了。

专业搬砖填坑 2016-06-06 04:15:41
程序有个特殊的需求,就是运行时,要把状态栏上的图标变成小图标(下图1)。默认情况下,我们的系统状态栏上的图标都是大图标(下图2),在win7,win8上都可以正常运行,实现方式如下:

'把SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\Advanced\的TaskbarSmallIcons值改成1
rc = RegOpenKeyEx(HKEY_CURRENT_USER, SUBKEY_ADVANCED, 0, KEY_SET_VALUE, hSubKey)

If rc <> ERROR_SUCCESS Then Exit Sub

rc = RegSetValueEx(hSubKey, REGNAME_TASKBARSMALLICONS, 0, REG_DWORD, p_SmallIcons, Len(p_SmallIcons))
rc = RegCloseKey&(HKEY_CURRENT_USER&)

'然后给系统发消息
Call SendMessageTimeout(HWND_BROADCAST, WM_SETTINGCHANGE, 0, 0, SMTO_ABORTIFHUNG, 5000, w_retCode)


但是win10就是不行,奇了怪了。,望指教。。。

图一


图二





...全文
14565 11 打赏 收藏 转发到动态 举报
写回复
用AI写文章
11 条回复
切换为时间正序
请发表友善的回复…
发表回复
竹a艟 2017-01-06
  • 打赏
  • 举报
回复
VC下出现了同样的情况,估计是这个消息被禁用了,不知道楼主怎么解决的
赵4老师 2017-01-06
  • 打赏
  • 举报
回复
引用 8 楼 chncoder 的回复:
7和10应该区别不大啊
我觉得7 32位和10 64位差别巨大!
专业搬砖填坑 2016-07-01
  • 打赏
  • 举报
回复
引用 7 楼 Chen8013 的回复:
我在 Win7/64位下试了一下你的代码,也是有效的。 注册表那儿没变,看来是消息的变动了,这个不知道能不能查到资料。 WM_SETTINGCHANGE这个应该是不会变的, 估计在HWND_BROADCAST这个参数上有变化。 不知道可不可以用 Spy++把这个消息“找出来”。
没有用过Spy++,不知道怎么找消息 我msdn的论坛上也提问了,就是没有人理,奇了怪,麻烦大虾们上去顶顶.. https://social.technet.microsoft.com/Forums/en-US/c6160636-a7ad-4bd0-9fc4-061b75c9b4ea/windows10-desktop-app-how-to-dynamically-set-the-icon-on-the-taskbar-to-large-or-small 我的英文很烂,如果上面没有描述清楚,麻烦给咱在上面回帖说明下,谢谢了。。。
程序员老干部 2016-06-21
  • 打赏
  • 举报
回复
7和10应该区别不大啊
舉杯邀明月 2016-06-19
  • 打赏
  • 举报
回复
我在 Win7/64位下试了一下你的代码,也是有效的。 注册表那儿没变,看来是消息的变动了,这个不知道能不能查到资料。 WM_SETTINGCHANGE这个应该是不会变的, 估计在HWND_BROADCAST这个参数上有变化。 不知道可不可以用 Spy++把这个消息“找出来”。
专业搬砖填坑 2016-06-12
  • 打赏
  • 举报
回复
按您的指示操作了下,删掉后,通过任务栏操作后还是会创建的,所以感觉注册表那块对着,就是不知道win10,跟win7,win8之间的消息机制有什么变动?
舉杯邀明月 2016-06-07
  • 打赏
  • 举报
回复
你确定Win10下,仍然是由那个注册表设置信息控制的吗? 你可以先把注册表中的那个内容删除,然后手动改变任务栏的图标显示方式, 看看它是否创建了那个注册表项、并且对应的值(数据类型及格式)是多少。
专业搬砖填坑 2016-06-07
  • 打赏
  • 举报
回复
引用 1 楼 zhao4zhong1 的回复:
使用按键精灵模拟手动操作 ?
这个肯定不行的。
舉杯邀明月 2016-06-07
  • 打赏
  • 举报
回复
引用 4 楼 sunny50 的回复:
[quote=引用 3 楼 Chen8013 的回复:] 你确定Win10下,仍然是由那个注册表设置信息控制的吗? 你可以先把注册表中的那个内容删除,然后手动改变任务栏的图标显示方式, 看看它是否创建了那个注册表项、并且对应的值(数据类型及格式)是多少。
嗯,注册表修改对着呢,现在的现象是程序运行时,手动打开任务栏的属性,显示已经选择小图标,但是任务栏没有变成小图标,所以怀疑是发送消息出问题了。但是就是不知道要换成什么消息,怎么个发送。[/quote] 我的意思不是说看你的程序修改注册表结果对不对。 我是说,你把那个注册表项(TaskbarSmallIcons)删除掉,然后直接操作任务栏的属性, 让它显示为大图标、小图标,看看系统会不会把TaskbarSmallIcons创建出来、以及大图标、小图标时对应什么样的数据。 (就是首先要搞清楚:在Win10下,是不是跟Win7、Win8还是一样的。)
专业搬砖填坑 2016-06-07
  • 打赏
  • 举报
回复
引用 3 楼 Chen8013 的回复:
你确定Win10下,仍然是由那个注册表设置信息控制的吗? 你可以先把注册表中的那个内容删除,然后手动改变任务栏的图标显示方式, 看看它是否创建了那个注册表项、并且对应的值(数据类型及格式)是多少。
嗯,注册表修改对着呢,现在的现象是程序运行时,手动打开任务栏的属性,显示已经选择小图标,但是任务栏没有变成小图标,所以怀疑是发送消息出问题了。但是就是不知道要换成什么消息,怎么个发送。
赵4老师 2016-06-06
  • 打赏
  • 举报
回复
使用按键精灵模拟手动操作 ?

1,486

社区成员

发帖
与我相关
我的任务
社区描述
VB API
社区管理员
  • API
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧