Winapi SHChangeNotify在注册表切换后不刷新虚拟键盘的图标

Winapi SHChangeNotify在注册表切换后不刷新虚拟键盘的图标,winapi,registry,explorer,virtual-keyboard,taskbar,Winapi,Registry,Explorer,Virtual Keyboard,Taskbar,我有一个注册表项,可以显示Windows101703创建者更新的虚拟键盘 如果在手动禁用它以执行我正在尝试的相同测试后将其放入.reg文件中,您可以自己运行它: show_vkb.reg 我基本上是尝试为用户打开此选项: 因此,这涉及两个最终目标: 更新注册表项并刷新引用它的任何内容 刷新任务栏以显示虚拟键盘图标,如下所示: 我明白了使用SHChangeNotify应该刷新explorer外壳。我已经验证了它正在刷新任务栏的一部分,特别是应用程序图标,但它没有刷新任务栏上显示的虚拟外围设备

我有一个注册表项,可以显示Windows101703创建者更新的虚拟键盘

如果在手动禁用它以执行我正在尝试的相同测试后将其放入
.reg
文件中,您可以自己运行它:

show_vkb.reg 我基本上是尝试为用户打开此选项:

因此,这涉及两个最终目标:

  • 更新注册表项并刷新引用它的任何内容
  • 刷新任务栏以显示虚拟键盘图标,如下所示:

  • 我明白了使用SHChangeNotify应该刷新explorer外壳。我已经验证了它正在刷新任务栏的一部分,特别是应用程序图标,但它没有刷新任务栏上显示的虚拟外围设备

    #include <Windows.h>
    #include <ShlObj.h>
    
    int main()
    {
        SHChangeNotify(SHCNE_ASSOCCHANGED, SHCNF_IDLIST, NULL, NULL);
        return 0;
    }
    
    #包括
    #包括
    int main()
    {
    SHChangeNotify(SHCNE_assocchange,SHCNF_IDLIST,NULL,NULL);
    返回0;
    }
    

    我不确定我在这里错过了什么/做错了什么。我尝试了两个不同的参数组合,其中列出了不同的宏值,但没有任何进展。

    “SHChangeNotify应刷新浏览器外壳”-这是不正确的。SHChangeNotify(SHCNE_assocchange)将刷新图标、文件类型描述和其他与文件类型关联相关的内容。当我看到你的截图时,我不明白应该改变什么。你能详细解释一下吗?谢谢,@DenisAnisimov;我已经更新了这个问题。当我在菜单中更改此设置时,所有应用程序都会收到带有“TraySettings”参数的WM_SETTINGCHANGE消息。但是我对SendMessage(HWND_广播,WM_设置更改,0,‘TraySettings’)、BroadcastSystemMessage(BSF_FORCEIFHUNG,nil,WM_设置更改,0,‘TraySettings’)、SendNotifyMessage(HWND_广播,WM_设置更改,0,‘TraySettings’)的所有实验都失败了。(我不是主题启动者)wParam=0。尝试提升模式-无效。注册表不是编程接口。您确定这样做是正确的吗?“SHChangeNotify应该刷新浏览器外壳”-这是不正确的。SHChangeNotify(SHCNE_assocchange)将刷新图标、文件类型描述和其他与文件类型关联相关的内容。当我看到你的截图时,我不明白应该改变什么。你能详细解释一下吗?谢谢,@DenisAnisimov;我已经更新了这个问题。当我在菜单中更改此设置时,所有应用程序都会收到带有“TraySettings”参数的WM_SETTINGCHANGE消息。但是我对SendMessage(HWND_广播,WM_设置更改,0,‘TraySettings’)、BroadcastSystemMessage(BSF_FORCEIFHUNG,nil,WM_设置更改,0,‘TraySettings’)、SendNotifyMessage(HWND_广播,WM_设置更改,0,‘TraySettings’)的所有实验都失败了。(我不是主题启动者)wParam=0。尝试提升模式-无效。注册表不是编程接口。你确定你这样做是对的吗?
    #include <Windows.h>
    #include <ShlObj.h>
    
    int main()
    {
        SHChangeNotify(SHCNE_ASSOCCHANGED, SHCNF_IDLIST, NULL, NULL);
        return 0;
    }