这段代码怎么用PB实现?

dzbswl 2001-11-28 03:02:49
Private Declare Function GetSystemMenu Lib "user32" (ByVal hwnd As Long, ByVal bRevert As Long) As Long
Private Declare Function DeleteMenu Lib "user32" (ByVal hMenu As Long, ByVal nPosition As Long, ByVal wFlags As Long) As Long
Private Declare Function GetActiveWindow Lib "user32.dll" () As Long
Const MF_STRING = &H0&
Const MF_BYCOMMAND = &H0&
Const SC_CLOSE = &HF060
Const SC_MAXIMIZE = &HF030&
Const SC_MINIMIZE = &HF020&
Const SC_SIZE = &HF000&
Const SC_MOVE = &HF010&
Sub User_Limit()
Dim hMenu As Long
Dim whwnd As Long
Dim wwhwnd As Long
whwnd = GetActiveWindow()
hMenu = GetSystemMenu(whwnd, 0)
Call DeleteMenu(hMenu, SC_CLOSE, MF_BYCOMMAND)
Call DeleteMenu(hMenu, SC_MAXIMIZE, MF_BYCOMMAND)
Call DeleteMenu(hMenu, SC_MINIMIZE, MF_BYCOMMAND)
Call DeleteMenu(hMenu, SC_SIZE, MF_BYCOMMAND)
Call DeleteMenu(hMenu, SC_MOVE, MF_BYCOMMAND)
End Sub
这是VB中的一段代码,我想在PB实现同样的功能,请帮忙
...全文
99 9 打赏 收藏 举报
写回复
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
咚咚咚咚咚咚 2001-11-29
  • 打赏
  • 举报
回复
同意
dzbswl 2001-11-29
  • 打赏
  • 举报
回复
已经搞定,谢谢各位
dzbswl 2001-11-29
  • 打赏
  • 举报
回复
可我在PB中的程序中当用 CREATE OLEOBJECT 一个EXCEL后,使其可见,然后使用如你们所说的代码,运行后发现失去系统菜单的是PB应用程序,不是EXCEL,各位高手,怎么才能得到EXCEL的句柄?
紫焰月读 2001-11-28
  • 打赏
  • 举报
回复
yandong_mars(信) 有代码有一处应该这样比较合原意:
long MF_STRING = 0
long MF_BYCOMMAND = 0
constant long SC_CLOSE = 61536
constant long SC_MAXIMIZE = 61488
constant long SC_MINIMIZE = 61472
constant long SC_SIZE = 61440
constant long SC_MOVE = 61456
以上应是常量,不是变量,另外对于窗口及菜单句柄,
pb的long 的长度不够,所以应使用 ulong 无符号长整型,
另外 API 声明中都用 ulong 型,所以更不应该是 long 了,有可能发生溢出
ulong hMenu,whwnd,wwhwnd

dzbswl 2001-11-28
  • 打赏
  • 举报
回复
你说的很对,我就是要实现这样的功能
我以前是用VB做程序的,可最近领导又要用PB来实现同样的功能,所以只能边学边做
^-^
我是想在PB中控制WORD,为了防止用户把WORD关掉,所以想把它的关闭按钮不可用
dzbswl 2001-11-28
  • 打赏
  • 举报
回复
 yandong_mars(信)
谢谢你,我下午一直在开会,所以现在才上来------- 
咚咚咚咚咚咚 2001-11-28
  • 打赏
  • 举报
回复
有不正确的自己改吧

首先添加声明Global External Functions(菜单中有,也可以是Local的)
FUNCTION ulong GetSystemMenu(ulong hwnd,ulong bRevert) LIBRARY "user32.dll"
FUNCTION ulong DeleteMenu(ulong hMenu,ulong nPosition,ulong wFlags) LIBRARY "user32.dll"
FUNCTION ulong GetActiveWindow() LIBRARY "user32.dll"

相应的执行脚本(例如加到窗口中的Open事件里)
long MF_STRING = 0
long MF_BYCOMMAND = 0
long SC_CLOSE = 61536
long SC_MAXIMIZE = 61488
long SC_MINIMIZE = 61472
long SC_SIZE = 61440
long SC_MOVE = 61456
long hMenu,whwnd,wwhwnd

whwnd=GetActiveWindow()
hMenu=GetSystemMenu(whwnd,0)

DeleteMenu(hMenu, SC_CLOSE, MF_BYCOMMAND)
DeleteMenu(hMenu, SC_MAXIMIZE, MF_BYCOMMAND)
DeleteMenu(hMenu, SC_MINIMIZE, MF_BYCOMMAND)
DeleteMenu(hMenu, SC_SIZE, MF_BYCOMMAND)
DeleteMenu(hMenu, SC_MOVE, MF_BYCOMMAND)
咚咚咚咚咚咚 2001-11-28
  • 打赏
  • 举报
回复
在解释解释程序
我的理解是:
得到活动窗口
得到活动窗口的菜单句柄
然后是不是,把系统的菜单都删掉例如还原、移动、大小、最小化、最大化等等
咚咚咚咚咚咚 2001-11-28
  • 打赏
  • 举报
回复
Const MF_STRING = &H0&
Const MF_BYCOMMAND = &H0&
Const SC_CLOSE = &HF060
Const SC_MAXIMIZE = &HF030&
Const SC_MINIMIZE = &HF020&
Const SC_SIZE = &HF000&
Const SC_MOVE = &HF010&
是什么东西?VB我不太懂
相关推荐
发帖
PowerBuilder

1028

社区成员

PowerBuilder 相关问题讨论
社区管理员
  • 基础类社区
  • WorldMobile
加入社区
帖子事件
创建了帖子
2001-11-28 03:02
社区公告
暂无公告