none
win7设置了PKEY_AppUserModel_PreventPinning属性后,从任务栏解锁出现空白菜单。 RRS feed

  • 问题

  • 在 win7 下开发 win32 应用。   设置 PKEY_AppUserModel_PreventPinning 属性。

    当直接将exe程序右键锁定到任务栏后运行,则出现bug (右键菜单 为空白)。使用快捷方式打开程序也是如此。。

    经验证,在win8下,双击exe程序可重现问题。使用快捷方式启动则避免此问题(右键关联快捷方式的菜单) 。。  win10 下不会出现该问题。

    --无法上传图片。在我们能够验证您的帐户前,正文文本不能包含图片和链接。--

    求解决方案。。谢谢!

    -----------------附源码段--------------
    
    #include <shellapi.h>
    #include <propsys.h>
    #include <propkey.h>
    
    
    //WM_CREATE 事件中处理即可。。或者mfc的OnInitDialog 函数中添加
    
    IPropertyStore *pps;
    
    HRESULT hr = SHGetPropertyStoreForWindow(hWnd, IID_PPV_ARGS(&pps));
    
    if (SUCCEEDED(hr)) {
    PROPVARIANT var;
    var.vt = VT_BOOL;
    var.boolVal = VARIANT_TRUE;
    hr = pps->SetValue(PKEY_AppUserModel_PreventPinning, var);
    pps->Release();
    }


    2016年5月6日 9:58

全部回复

  • 你好,

    由于C++论坛只支持C++语言,编译器的问题。你的问题更偏向于Microsoft  SDK的问题,我将把这个帖子移到对应的论坛。

    根据我搜索的结果,当使用这个属性PKEY_AppUserModel_StartPinOption好像也会出现类似的问题(not pin the icon to start menu),这个问题是出现的win8上面。

    这个问题目前不能是WIN7,8bug,我在connect, 上面也没有搜索到类似你的问题。

    有没有尝试单步调试,这个函数呢?都是正常执行的吗?如果可能你可以提供一份代码给我吗,为了测试这个问题,如果是win7 8的问题,我们可以提交到connect上面.

    为了更好的帮你解决问题,我将帮你移到对应论坛,后续我要是有什么发现,我也会在帖子中回你。

    Hart Cheng


    We are trying to better understand customer views on social support experience, so your participation in this interview project would be greatly appreciated if you have time. Thanks for helping make community forums a great place. Click HERE to participate the survey.

    2016年5月9日 2:03
    版主
  • 你好。谢谢您帮组将问题迁移到对应的模块。。

    1、首先 PKEY_AppUserModel_PreventPinning 这个属性是在窗体创建的时候使用。 如果没有锁定任务栏,右键只会弹出 关闭菜单。 这个就已经说明了方法设置有效。

    整个过程,全部由操作系统处理,程序并未拦截任何信息。

    2、先将程序 锁定任务栏,运行后取消 锁定任务栏,然后 右键锁定任务栏 就会出现问题。 

    ---只需要建一个简单的mfc 程序。加上我发的那一段代码就行。

    ---运行环境: win7 64位,vs2013.

    3、可否给一个邮箱地址 发送源码  给您。 或者联系我的qq: 1544581444





    2016年5月9日 2:21
  • 2.一个简单的MFC程序?我可以建一个dialog的程序吗?在VS2015上面。

    3.希望你理解,我们不能使用第三方的工具,获取资源,你可以把代码放到这个地方上去,能重现问题的代码就可以。

    https://onedrive.live.com/?id=root&cid=D3BD96EB79780818

    4.在中文论坛中,还没有对应win sdk开发的论坛,放到一般性讨论论坛,我觉得不是很妥当,目前就放在这儿,如果你的英语好,你可以把他放到英文论坛(https://social.msdn.microsoft.com/Forums/windowsdesktop/en-US/home?forum=windowssdk),将会有更多的人帮助你。


    We are trying to better understand customer views on social support experience, so your participation in this interview project would be greatly appreciated if you have time. Thanks for helping make community forums a great place. Click HERE to participate the survey.


    2016年5月9日 3:18
    版主
  • 是的。。   默认创建的一个mfc程序。   在初始化函数加上代码段 即可。        

    实现的效果就是 运行时右键 只有关闭按钮。      

    然后就可以关闭程序,未运行时可以锁定任务栏。

    2016年5月9日 3:28
  • 是的。。   默认创建的一个mfc程序。   在初始化函数加上代码段 即可。        

    实现的效果就是 运行时右键 只有关闭按钮。      

    然后就可以关闭程序,未运行时可以锁定任务栏。

    n

    我创建一个基于dialog的MFC工程在win8,利用vs2015. 把你上面提供的代码加进去以后,我没有出现你那样的问题。运行时右键,并不是只有关闭按钮。未运行时可以锁定任务栏。


    We are trying to better understand customer views on social support experience, so your participation in this interview project would be greatly appreciated if you have time. Thanks for helping make community forums a great place. Click HERE to participate the survey.

    2016年5月10日 7:52
    版主
  • 那段代码的作用 就是让exe 在运行时右键菜单中中只有关闭按钮。。

    --需要在 cdialg::init 函数之后。

    --相信和vs2015 没有关系。

    未运行时可以锁定。不能直接单击任务栏。(win8 会一直关联快捷方式的菜单)

    只有双击exe程序就会出现(这时已经锁定任务栏了,运行后右键有 三个菜单,单击解除任务栏后,右键才会出现空白菜单)。


    2016年5月10日 8:17
  • 我把你这段代码是加载BOOL CMFCApplication4App::InitInstance()这个函数中,
    CMFCApplication4Dlg dlg;
    	m_pMainWnd = &dlg;
    
    	HRESULT hr = SHGetPropertyStoreForWindow(dlg, IID_PPV_ARGS(&pps));
    
    	if (SUCCEEDED(hr)) {
    		PROPVARIANT var;
    		var.vt = VT_BOOL;
    		var.boolVal = VARIANT_TRUE;
    		hr = pps->SetValue(PKEY_AppUserModel_PreventPinning, var);
    		pps->Release();
    	}
    我在win 10上面运行,和win8的效果是一样的.

    We are trying to better understand customer views on social support experience, so your participation in this interview project would be greatly appreciated if you have time. Thanks for helping make community forums a great place. Click HERE to participate the survey.

    2016年5月11日 2:43
    版主
  • BOOL CCefToolProjDlg::OnInitDialog()
    {
    CDialogEx::OnInitDialog();

    // 将“关于...”菜单项添加到系统菜单中。

    IPropertyStore *pps;
    HRESULT hr = SHGetPropertyStoreForWindow(GetSafeHwnd(), IID_PPV_ARGS(&pps));
    if (SUCCEEDED(hr)) {
    PROPVARIANT var;
    var.vt = VT_BOOL;
    var.boolVal = VARIANT_TRUE;
    hr = pps->SetValue(PKEY_AppUserModel_PreventPinning, var);
    pps->Release();
    }

    在这个 dlg 里面使用。是针对窗体的。

    2016年5月11日 4:21