API 更改系统菜单条目

原创 2004年02月02日 23:31:00

一个运用API 更改系统菜单,复制系统菜单的例子。(需要注意的是:如果要响应菜单项的单击事件,可能要用到钩子函数和更多的代码)

Option Explicit

Private Declare Function TrackPopupMenu Lib "user32" (ByVal hMenu As Long, ByVal wFlags As Long, ByVal x As Long, ByVal y As Long, ByVal nReserved As Long, ByVal hwnd As Long, ByVal lprc As Any) As Long
Private Declare Function GetCursorPos Lib "user32" (lpPoint As POINTAPI) As Long
Private Declare Function ModifyMenu Lib "user32" Alias "ModifyMenuA" (ByVal hMenu As Long, ByVal nPosition As Long, ByVal wFlags As Long, ByVal wIDNewItem As Long, ByVal lpString As Any) As Long
Private Declare Function GetSystemMenu Lib "user32" (ByVal hwnd As Long, ByVal bRevert As Long) As Long
Private Declare Function InsertMenu Lib "user32" Alias "InsertMenuA" (ByVal hMenu As Long, ByVal nPosition As Long, ByVal wFlags As Long, ByVal wIDNewItem As Long, ByVal lpNewItem As Any) As Long
Private Const TPM_LEFTALIGN = &H0&
Private hsysmenu As Long
Private Type POINTAPI
    x As Long
    y As Long
End Type

 


Function num(i As Integer) As String
num = Mid("    长恨歌 汉皇重色思倾国,御宇多年求不得。杨家有女初长成,养在深闺人未识。天生丽质难自弃,一朝选在君王侧。回眸一笑百媚生,六宫粉黛无颜色。春寒赐浴华清池,温泉水滑洗凝脂。侍儿扶起娇无力,始是新承恩泽时。云鬓花颜金步摇,芙蓉帐暖度春宵。春宵苦短日高起,从此君王不早朝。", 8 * i + 1, 8)
End Function

 


Private Sub Form_Load()
Dim i As Integer
hsysmenu = GetSystemMenu(hwnd, False) '系统菜单句柄

InsertMenu hsysmenu, 0, &H800, &H0, "" '加入分割符
For i = 0 To 5
ModifyMenu hsysmenu, i, &H4410, 0, num(i+1) '改变菜单条目
Next

For i = 6 To 15

InsertMenu hsysmenu, i, &H400, &H0, num(i+1)   '插入菜单条目
Next 'i=6 对应条目为关闭按钮,如此设置是为了留下该条目


InsertMenu hsysmenu, 0, &H800, &H0, "" '加入分割符
InsertMenu hsysmenu, 0, &H400, &H0, num(0)

Me.Move Screen.Width / 2 - 3000, Screen.Height / 2 - 2000, 6000, 4000 ' 窗体居中
Me.Caption = "请用鼠标右键调出系统菜单!!!"
End Sub

 


Private Sub Form_MouseUp(Button As Integer, Shift As Integer, x As Single, y As Single)
    Dim Pts As POINTAPI
 GetCursorPos Pts '获取鼠标位置
    If Button = 2 Then TrackPopupMenu hsysmenu, TPM_LEFTALIGN, Pts.x, Pts.y, 0, Me.hwnd, ByVal 0&
 '在鼠标点击处弹出更改后的系统菜单
End Sub

 

效果如下:

C#+Windows API操纵系统菜单

一、前言  本文针对C#.NET中没有提供直接的类似SystemMenu的属性或类似GetSystemMenu的成员函数的情况,通过调用Windows API设计了一个C#类SystemMenu,从而...
  • MutStory
  • MutStory
  • 2006年11月17日 09:11
  • 697

修改Win7启动顺序和启动菜单名称

对于安装了XP与WIN7双系统的朋友,可能对新的启动菜单还不太会用,主要有两个方面需要修改(都是在windows7系统下) 1,修改系统启动顺序 默认下启动的是WIN7,想改为...
  • missever
  • missever
  • 2013年02月20日 14:43
  • 3298

listView条目添加菜单

package zxf.mobilesafe.ui; import java.util.List; import zxf.mobilesafe.R; import zxf.mobilesafe....
  • zxf216216
  • zxf216216
  • 2012年12月14日 17:37
  • 344

菜单枚举记

菜单枚举记 有一MDI应用程序,现假设要枚举出其能够得到系统命令响应所有菜单项的内容:如命令ID,资源名称,所在(子)菜单的句柄等,并对之进行操作。本文对此略述一二,未达意处,望各位海涵之外,以我之深...
  • _17708668
  • _17708668
  • 2001年10月16日 23:45
  • 1050

API实现添加系统托盘图标及其菜单

添加系统托盘图标下面用winapi 实现#define IDI_ICON 600                                //此处为图标ID,用于标识此图标#define WM_...
  • xkou
  • xkou
  • 2004年10月12日 22:31
  • 1464

使用Win API创建顶级菜单(不使用资源文件)

作者:朱金灿来源:http://blog.csdn.net/clever101          最近使用Code::Blocks进行业余学习(VS200x对我的机子来说太庞大了)。我就编编些Win ...
  • clever101
  • clever101
  • 2012年02月15日 22:16
  • 4336

有关菜单的API

有关菜单的API 2.13.1 CheckMenuRadlol 函数功能:该函数校核一个指定的菜单项并使其成为一个圆按钮项。同时不校核相关组里的其他菜单项并清除这些项的国按钮的类型标志。 ...
  • ywbab751109
  • ywbab751109
  • 2011年10月16日 17:22
  • 666

c#中添加Windows任务栏右键菜单

namespace AppendMenu{ public partial class Form1 : Form { public Form1() { ...
  • sohighthesky
  • sohighthesky
  • 2009年04月16日 22:18
  • 2754

【Web API系列教程】3.9 — 实战:处理数据(添加新条目到数据库)

在本节,你将添加让用户可以创建新book的功能。在app.js中,添加如下代码到视图模型:self.authors = ko.observableArray(); self.newBook = { ...
  • NoMasp
  • NoMasp
  • 2016年02月27日 09:24
  • 1993

Linux下菜单编辑配置

"Linux下菜单编辑配置,文件打开方式,开始菜单管理"KDE,GNOME等桌面环境都支持 desktop快捷方式在Gnome环境,与之相关的目录和文件有~/.local/share/applicat...
  • jiangxinyu
  • jiangxinyu
  • 2007年07月25日 16:05
  • 6823
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:API 更改系统菜单条目
举报原因:
原因补充:

(最多只允许输入30个字)