none
请问下,更改某一程序的右键选项该如何去做呢? RRS feed

  • 问题

  • 如题。
    windows桌面程序右击菜单都是差不多的,我知道通过注册表能改某一类的,但是我是想改某一个程序的菜单。
    2009年12月24日 17:21

全部回复

  • 你好!
         如果那个程序是你自己编写的比较容易修改,如果是其他程序,在没有提供开发接口的情况下,很难修改!
    周雪峰
    2009年12月25日 2:25
    版主
  • 您好, 版主兄弟,这个程序时我自己写的,您能给我提供个思路吗?谢谢赐教~

    2009年12月25日 5:05
  • 你好!
         工具箱中有ContextMenuStrip控件,你拖这个控件到窗体上,然后自己定义菜单项,最后在设置窗体或控件的ContextMenuStrip属性为刚刚添加那个控件就可以了!
    周雪峰
    2009年12月25日 5:39
    版主
  • 大哥,我要补充一下,我要的是在windows桌面右键单击我的程序,出现的那个右键菜单喔,我要改那个,不是自己在程序里面的某个元件上做的那个右键菜单哈,

    2009年12月25日 7:16
  • 这个需要用API来修改,主要涉及以下一个API:
    <DllImport("USER32", EntryPoint := "GetSystemMenu", SetLastError := True , CharSet := CharSet.Unicode, ExactSpelling := True , CallingConvention := CallingConvention.Winapi)> _
    Private Shared Function apiGetSystemMenu(ByVal WindowHandle As IntPtr, ByVal bReset As Integer) As IntPtr
    End Function
    ' 还需要AppendMenu()。 既然 .NET 使用Unicode,
    ' 我们应该选取它的Unicode版本。
    <DllImport("USER32", EntryPoint := "AppendMenuW", SetLastError := True , CharSet := CharSet.Unicode, ExactSpelling := True , CallingConvention := CallingConvention.Winapi)> _
    Private Shared Function apiAppendMenu(ByVal MenuHandle As IntPtr, ByVal Flags As Integer, ByVal NewID As Integer, ByVal Item As [String]) As Integer
    End Function
    '还可能需要InsertMenu()
    <DllImport("USER32", EntryPoint := "InsertMenuW", SetLastError := True , CharSet := CharSet.Unicode, ExactSpelling := True , CallingConvention := CallingConvention.Winapi)> _
    Private Shared Function apiInsertMenu(ByVal hMenu As IntPtr, ByVal Position As Integer, ByVal Flags As Integer, ByVal NewId As Integer, ByVal Item As [String]) As Integer
    End Function

    周雪峰
    2009年12月25日 7:32
    版主
  •    您好,周先生,我看了下,您给我说的这个api谁改变窗体上的菜单的,但是呢,我想要的是,包含的有打开、打开方式、删除等的那个菜单,也就是windows桌面那个右键菜单,不是窗体那个哦~

    2009年12月26日 7:26