Private Declare Function SetWindowLong Lib "user32" Alias "SetWindowLongA" (ByVal hwnd As Long, ByVal nIndex As Long, ByVal dwNewLong As Long) As Long
Private Declare Function GetWindowLong Lib "user32" Alias "GetWindowLongA" (ByVal hwnd As Long, ByVal nIndex As Long) As Long
Private Declare Function DrawMenuBar Lib "user32" (ByVal hwnd As Long) As Long
Const GWL_STYLE = (-16)
Const WS_SYSMENU = &H80000Private Sub RemoveSysButton(ByVal hHwnd As Long)
'功能:移除窗口系统菜单
'参数:hHwnd - 窗口的句柄
Dim lWnd As Long
lWnd = GetWindowLong(hHwnd, GWL_STYLE)
lWnd = lWnd And Not (WS_SYSMENU)
lWnd = SetWindowLong(hHwnd, GWL_STYLE, lWnd)
DrawMenuBar hHwnd
End SubPrivate Sub Command1_Click()
Dim OneHwnd as long
OneHwnd = Shell(某个应用程序, vbNormalFocus)
RemoveSysButton (OneHwnd) '可以确知OneHwnd >0
End Sub
由于历史原因,某个程序源码丢失,如果从它的右上角的关闭按钮退出程序,则不能完全释放内存资源,所以老板现在要求:在启动它的时候移出它的右上角的关闭按钮!
以上代码对外部运行程序不起作用,郁闷!高手看一下,小妹那点出错了,谢谢先。
Private Declare Function GetWindowLong Lib "user32" Alias "GetWindowLongA" (ByVal hwnd As Long, ByVal nIndex As Long) As Long
Private Declare Function DrawMenuBar Lib "user32" (ByVal hwnd As Long) As Long
Const GWL_STYLE = (-16)
Const WS_SYSMENU = &H80000Private Sub RemoveSysButton(ByVal hHwnd As Long)
'功能:移除窗口系统菜单
'参数:hHwnd - 窗口的句柄
Dim lWnd As Long
lWnd = GetWindowLong(hHwnd, GWL_STYLE)
lWnd = lWnd And Not (WS_SYSMENU)
lWnd = SetWindowLong(hHwnd, GWL_STYLE, lWnd)
DrawMenuBar hHwnd
End SubPrivate Sub Command1_Click()
Dim OneHwnd as long
OneHwnd = Shell(某个应用程序, vbNormalFocus)
RemoveSysButton (OneHwnd) '可以确知OneHwnd >0
End Sub
由于历史原因,某个程序源码丢失,如果从它的右上角的关闭按钮退出程序,则不能完全释放内存资源,所以老板现在要求:在启动它的时候移出它的右上角的关闭按钮!
以上代码对外部运行程序不起作用,郁闷!高手看一下,小妹那点出错了,谢谢先。
解决方案 »
- VB的打印预览问题?
- VB中如何才能在picture中让文字翻转角度呢?
- 突然转向VB,有事请教!!!
- 如何让一个“NO BorderStyle"的form在windows task bar 上显示图标呢?
- 怎样实现两张表直接的关联啊?
- 谁有cced2000注册码?
- 关于ACCESS数据库的问题
- 挑战自已 看能不能实现 大家都来讨论啊
- 问个问题,关于SSTab控件,50分都给第一个解决问题的兄弟,错了,姐妹也行的!^_^
- ▲高分求助::::::::::::::::::::::::::我在使用datacombo控件地时候发现一个问题,当不改变其它的值,datacombo的值无法改变!RecordSource是一个查询语句(▲大侠们,救我啊!!!!!!!)
- 问个小问题~~~见识多的进
- 如何做一个三角形或其他形状的shape?
也可以先用EnumWindows枚举所有父窗口,然后用GetWindowThreadProcessId来获得每个窗口的进程ID与Shell返回的进程ID比对
你用GetWindowLong、SetWindowLong怎么可能成功叻~你不如用findwindow再找一下启动后窗体的句柄,如果窗体标题是动态的那就用楼上的楼上的方法罗
'------------- API常数声明 ----------------------------
Public Const TH32CS_SNAPPROCESS = &H2'---------- API类型声明 -----------
Public Type PROCESSENTRY32 '进程
dwsize As Long
cntusage As Long
th32ProcessID As Long
th32DefaultHeapID As Long
th32ModuleID As Long
cntThreads As Long
th32ParentProcessID As Long
pcPriClassBase As Long
dwFlags As Long
szExeFile As String * 1024
End Type
Public Declare Function CloseHandle Lib "kernel32" (ByVal hObject As Long) As Long
Public Declare Function CreateToolhelp32Snapshot Lib "kernel32" (ByVal dwFlags As Long, ByVal th32ProcessID As Long) As Long
Public Declare Function Process32First Lib "kernel32" (ByVal hSnapshot As Long, lppe As PROCESSENTRY32) As Long
Public Declare Function Process32Next Lib "kernel32" (ByVal hSnapshot As Long, lppe As PROCESSENTRY32) As LongPrivate Sub Command1_Click()
Dim OneHwnd as long
OneHwnd = Shell("notepad.exe", vbNormalFocus)
Dim Process As PROCESSENTRY32
Dim ProcSnap As LongProcSnap = CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS, 0)
If ProcSnap Then
Process.dwsize = 1060 ' 通常用法
Process32First ProcSnap, Process
Do Until Process32Next(ProcSnap, Process) < 1 ' 遍历所有进程直到返回值为False
If InStr(1, Process.szExeFile, "notepad.exe", vbTextCompare) > 0 Then
RemoveSysButton Process.th32ProcessID'移出记事本的窗口系统菜单
Exit Do
End If
Loop
CloseHandle (ProcSnap)
End IfEnd Sub
Private Sub Command1_Click()
Dim pid As Long
pid = Shell("notepad.exe", vbNormalFocus)
EnumWindows AddressOf EnumWindowsProc, pid
End Sub------------------------------------------------------------------------------------------------------------------
'模块文件
Public Declare Function EnumWindows Lib "user32" (ByVal lpEnumFunc As Long, ByVal lParam As Long) As Long
Public Declare Function GetWindowThreadProcessId Lib "user32" (ByVal hwnd As Long, lpdwProcessId As Long) As LongPublic Declare Function SetWindowLong Lib "user32" Alias "SetWindowLongA" (ByVal hwnd As Long, ByVal nIndex As Long, ByVal dwNewLong As Long) As Long
Public Declare Function GetWindowLong Lib "user32" Alias "GetWindowLongA" (ByVal hwnd As Long, ByVal nIndex As Long) As Long
Public Declare Function DrawMenuBar Lib "user32" (ByVal hwnd As Long) As Long
Public Const GWL_STYLE = (-16)
Public Const WS_SYSMENU = &H80000Public Function EnumWindowsProc(ByVal hwnd As Long, ByVal lParam As Long) As Long
Dim pid As Long
GetWindowThreadProcessId hwnd, pid
If pid = lParam Then
RemoveSysButton hwnd
End If
EnumWindowsProc = 1
End FunctionPrivate Sub RemoveSysButton(ByVal hHwnd As Long)
'功能:移除窗口系统菜单
'参数:hHwnd - 窗口的句柄
Dim lWnd As Long
lWnd = GetWindowLong(hHwnd, GWL_STYLE)
lWnd = lWnd And Not (WS_SYSMENU)
lWnd = SetWindowLong(hHwnd, GWL_STYLE, lWnd)
DrawMenuBar hHwnd
End Sub