请教各位,如何使窗体从任务条上隐藏?

town 2000-03-30 09:49:00
加精
...全文
1237 26 打赏 收藏 转发到动态 举报
写回复
用AI写文章
26 条回复
切换为时间正序
请发表友善的回复…
发表回复
bestofbest 2001-09-12
  • 打赏
  • 举报
回复
很好的东西!
Dynamic 2001-04-21
  • 打赏
  • 举报
回复
always的方法很简单啊,请试一试...
mr_wn 2000-10-12
  • 打赏
  • 举报
回复
SetWindowLong函数准行.
idler 2000-09-28
  • 打赏
  • 举报
回复
使用API函数RegisterServiceProcess
smtp 2000-09-25
  • 打赏
  • 举报
回复
MDI窗口是无法设置ShowInTaskBar属性的
eye:
你的这段代码好象也没什么用处?


dcrwy 2000-07-26
  • 打赏
  • 举报
回复
************看这里***************

长篇大论没有用
最简单的办法就是将窗体的 ShowInTaskBar属性设为false

************看这里***************

eye 2000-06-10
  • 打赏
  • 举报
回复
' 复制以下代码到一模块中
Public Declare Function GetCurrentProcessId Lib "kernel32" () As Long
Public Declare Function GetCurrentProcess Lib "kernel32" () As Long
Public Declare Function RegisterServiceProcess _
Lib "kernel32" (ByVal dwProcessID As Long, ByVal dwType As Long) As Long
Public Const RSP_SIMPLE_SERVICE = 1
Public Const RSP_UNREGISTER_SERVICE = 0

' 下面代码为隐藏
Public Sub MakeMeService()
Dim pid As Long
Dim reserv As Long
pid = GetCurrentProcessId()
regserv = RegisterServiceProcess(pid, RSP_SIMPLE_SERVICE)
End Sub

' 下面代码为恢复隐藏
Public Sub UnMakeMeService()
Dim pid As Long
Dim reserv As Long
pid = GetCurrentProcessId()
regserv = RegisterServiceProcess(pid, _
RSP_UNREGISTER_SERVICE)
End Sub
lao_cai 2000-05-17
  • 打赏
  • 举报
回复
Call SetWindowPos(lngHand, 0, 0, 0, 0, 0, SWP_HIDEWINDOW)
'API Declares
Declare Function SetWindowPos Lib "user32" (ByVal hwnd As Long, ByVal _
hWndInsertAfter As Long, ByVal X As Long, _
ByVal Y As Long, ByVal cx As Long, ByVal cy As Long, _
ByVal wFlags As Long) As Long

'----------------------------------------------------------------------------------------------------------
Public Const WM_ACTIVATE = &H6
Public Const SWP_NOMOVE = &H2
Public Const SWP_NOSIZE = &H1
Public Const HWND_TOPMOST = -1
Public Const GW_CHILD = 5
Public Const GW_HWNDNEXT = 2
Public Const SWP_HIDEWINDOW = &H80
Public Const SWP_SHOWWINDOW = &H40
Janven 2000-04-05
  • 打赏
  • 举报
回复
对呀,我以前不就说过的"说清楚点,要不FORM的初始属性就是隐藏,顶多调调ShowInTaskbar,那不在白问?"我现在觉得你在折腾观众了。要不就是你的语言描绘能力......
是不是即时的隐藏,也就是点击隐藏按钮,任务栏即时隐藏呀?ShowInTaskbar运行时可是只读的,得用API哦。你的30分可有点少了。用空帮你查查用哪个函数吧。
不过,我作过类似的东西。我把程序的最小化消息处理程序改成了执行Form.Hide了。这样点最小化就不会显示在任务栏。恢复时,只需执行Form.show就行了。
Lin 2000-04-04
  • 打赏
  • 举报
回复
你越说我越糊涂,设置Form的ShowInTaskbar属性不行吗?
town 2000-04-03
  • 打赏
  • 举报
回复
我非常感谢各位的热心,但我想我应该把问题重新仔细地描述一下:
是如何将窗体显示在任务栏上的切换按钮动态显示/隐藏,是任务栏,下边的可以设成自动隐藏的,上面有Windows开始按钮的条条,而不是C+A+D三键出来的框框。麻烦大家在万忙之即看仔细点。

谢谢 peacock
谢谢大家!
peacock 2000-04-02
  • 打赏
  • 举报
回复
Town,Sorry!我弄错了,给你,下面这个一定行!

'怎样将你的程序从 WIN 的系统任务列表中隐藏(即 CTRL+ALT+DEL 出来的框)
Private Declare Function GetCurrentProcessId Lib "kernel32" () As Long
Private Declare Function GetCurrentProcess Lib "kernel32" () As Long
Private Declare Function RegisterServiceProcess Lib "kernel32" (ByVal dwProcessID As Long, ByVal dwType As Long) As Long

Private Const RSP_SIMPLE_SERVICE = 1
Private Const RSP_UNREGISTER_SERVICE = 0

Rem 下面代码为隐藏
Private Sub MakeMeService()
Dim pid As Long
Dim reserv As Long
pid = GetCurrentProcessId()
regserv = RegisterServiceProcess(pid, RSP_SIMPLE_SERVICE)
End Sub

Rem 恢复隐藏
Private Sub UnMakeMeService()
Dim pid As Long
Dim reserv As Long
pid = GetCurrentProcessId()
regserv = RegisterServiceProcess(pid, RSP_UNREGISTER_SERVICE)
End Sub

Private Sub Command1_Click()
Call MakeMeService
End Sub

Private Sub Command2_Click()
Call UnMakeMeService
End Sub
peacock 2000-04-01
  • 打赏
  • 举报
回复
试试这个,我没用过!
声明:
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 Const GWL_STYLE = (-16)
Private Const WS_CAPTION = &HC00000
Private Const WS_MAXIMIZEBOX = &H10000
Private Const WS_MINIMIZEBOX = &H20000
Private Const WS_SYSMENU = &H80000

Private Declare Function SetWindowPos Lib "user32" (ByVal hwnd As Long, ByVal hWndInsertAfter As Long, ByVal x As Long, ByVal y As Long, ByVal cx As Long, ByVal cy As Long, ByVal wFlags As Long) As Long
Private Enum ESetWindowPosStyles
SWP_SHOWWINDOW = &H40
SWP_HIDEWINDOW = &H80
SWP_FRAMECHANGED = &H20 ' The frame changed: send WM_NCCALCSIZE
SWP_NOACTIVATE = &H10
SWP_NOCOPYBITS = &H100
SWP_NOMOVE = &H2
SWP_NOOWNERZORDER = &H200 ' Don't do owner Z ordering
SWP_NOREDRAW = &H8
SWP_NOREPOSITION = SWP_NOOWNERZORDER
SWP_NOSIZE = &H1
SWP_NOZORDER = &H4
SWP_DRAWFRAME = SWP_FRAMECHANGED
HWND_NOTOPMOST = -2
End Enum

Private Declare Function GetWindowRect Lib "user32" (ByVal hwnd As Long, lpRect As RECT) As Long
Private Type RECT
Left As Long
Top As Long
Right As Long
Bottom As Long
End Type

Private Function ShowTitleBar(ByVal bState As Boolean)
Dim lStyle As Long
Dim tR As RECT

GetWindowRect Me.hwnd, tR
lStyle = GetWindowLong(Me.hwnd, GWL_STYLE)
If (bState) Then
Me.Caption = Me.Tag
If Me.ControlBox Then
lStyle = lStyle Or WS_SYSMENU
End If
If Me.MaxButton Then
lStyle = lStyle Or WS_MAXIMIZEBOX
End If
If Me.MinButton Then
lStyle = lStyle Or WS_MINIMIZEBOX
End If
If Me.Caption <> "" Then
lStyle = lStyle Or WS_CAPTION
End If
Else
Me.Tag = Me.Caption
Me.Caption = ""
lStyle = lStyle And Not WS_SYSMENU
lStyle = lStyle And Not WS_MAXIMIZEBOX
lStyle = lStyle And Not WS_MINIMIZEBOX
lStyle = lStyle And Not WS_CAPTION
End If
SetWindowLong Me.hwnd, GWL_STYLE, lStyle
' 保证窗口具有相同的大小
' 注意这时看见区域已经不同!
SetWindowPos Me.hwnd, 0, tR.Left, tR.Top, tR.Right - tR.Left, tR.Bottom - tR.Top, SWP_NOREPOSITION Or SWP_NOZORDER Or SWP_FRAMECHANGED
Me.Refresh
' 看见区域已经不同后应该发生 RESIZE 事件
Form_Resize
End Function
使用:
'显示: ShowTitleBar True
'隐藏: ShowTitleBar False


town 2000-04-01
  • 打赏
  • 举报
回复
peacock :
你的例子是动态显示/隐藏窗体的标题栏。

难道这个问题这么难?还是各位不愿....,也许是分数给得少了。
csdn2000 2000-04-01
  • 打赏
  • 举报
回复
上CSDN找个控件轻松搞定。
town 2000-04-01
  • 打赏
  • 举报
回复
RING:看你是明白我的原意的,可不可以用VB描述一下,我不懂VC.
town 2000-04-01
  • 打赏
  • 举报
回复
对不起,各位朋友,多谢你们如此热心。我没有说得清楚,大家没弄得明白.
我是指在VB中如何用API将窗体显示在任务条上的按钮动态显示或隐藏,就象金山词霸最小化时一样(不用说明如何显示在系统图标栏内,这是另一个问题)。
Janven 2000-03-31
  • 打赏
  • 举报
回复
说清楚点,要不FORM的初始属性就是隐藏,顶多调调ShowInTaskbar,那不在白问?
newsoft 2000-03-31
  • 打赏
  • 举报
回复
Form的ShowInTaskbar=false即可.
apollo 2000-03-31
  • 打赏
  • 举报
回复
是VB吗?
Option Explicit
Dim hWnd1 As Long

Private Declare Function FindWindow Lib "user32" Alias "FindWindowA" _
(ByVal lpClassName As String, ByVal lpWindowName As String) As Long

Private Declare Function SetWindowPos Lib "user32" _
(ByVal hwnd As Long, ByVal hWndInsertAfter As Long, ByVal x As Long, _
ByVal y As Long, ByVal cx As Long, ByVal cy As Long, ByVal wFlags As Long) As Long

Const SWP_HIDEWINDOW = &H80
Const SWP_SHOWWINDOW = &H40

Private Sub Form_Load()
hWnd1 = FindWindow("Shell_traywnd", "")
'隐藏的例子:
Call SetWindowPos(hWnd1, 0, 0, 0, 0, 0, SWP_HIDEWINDOW)
End Sub

Private Sub Form_QueryUnload(Cancel As Integer, UnloadMode As Integer)
'显示的例子:
Call SetWindowPos(hWnd1, 0, 0, 0, 0, 0, SWP_SHOWWINDOW)
End Sub
加载更多回复(6)

7,763

社区成员

发帖
与我相关
我的任务
社区描述
VB 基础类
社区管理员
  • VB基础类社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧