俩问题

踏平扶桑 2003-12-04 09:05:52
1。如何把程序压入系统托盘后响应鼠标双击(也就是只有双击才执行比如form.show)
2。如何让程序在2000/xp中的任务管理器里的应用程序中消失,象flashget一样,当显示主界面的时候在任务管理器里的应用程序中可以看到,当最小化后任务管理器里的应用程序中消失

谢谢
...全文
52 19 打赏 收藏 转发到动态 举报
写回复
用AI写文章
19 条回复
切换为时间正序
请发表友善的回复…
发表回复
踏平扶桑 2003-12-10
  • 打赏
  • 举报
回复
搞定
谢谢各位:)
踏平扶桑 2003-12-10
  • 打赏
  • 举报
回复
up
123yy321 2003-12-08
  • 打赏
  • 举报
回复
5653325(等待开刃的刀):Good!
wanderstar 2003-12-08
  • 打赏
  • 举报
回复
晕!!漏了一句!!
在FORM_LOAD事件里面加一句

addIcon
踏平扶桑 2003-12-08
  • 打赏
  • 举报
回复
Private Sub Form_MouseMove(Button As Integer, Shift As Integer, X As Single, Y As Single)
Select Case CLng(X)
Case WM_LBUTTONDBLCLK
msgbox "a"
'双击事件
Case WM_LBUTTONDBLCLK
msgbox "b"
Case WM_LBUTTONDOWN
msgbox "c"
Case WM_LBUTTONUP
msgbox "d"
Case WM_RBUTTONDBLCLK
msgbox "e"
Case WM_RBUTTONDOWN
msgbox "f"
Case WM_RBUTTONUP
msgbox "g"
End Select
End Sub
你可以试一下,结果是都不执行
踏平扶桑 2003-12-07
  • 打赏
  • 举报
回复
up
wanderstar 2003-12-06
  • 打赏
  • 举报
回复
第二个问题是怎么解决的?我也想知道一下哦!!
第一个问题用我的方法不能解决吗?我一直都是这样用的啊!
踏平扶桑 2003-12-06
  • 打赏
  • 举报
回复
up
踏平扶桑 2003-12-06
  • 打赏
  • 举报
回复
是啊
我用断点调试,不执行那段代码
Private Sub Form_MouseMove(Button As Integer, Shift As Integer, X As Single, Y As Single)
Select Case CLng(X)
Case WM_LBUTTONDBLCLK
'双击事件
Case WM_LBUTTONDBLCLK
Case WM_LBUTTONDOWN
Case WM_LBUTTONUP
Case WM_RBUTTONDBLCLK
Case WM_RBUTTONDOWN
Case WM_RBUTTONUP
End Select
End Sub

那个clng(x)和select case的任何条件都不匹配,我用debug.print输出值看到的也不一样

请把你的代码发给我好吗wdw984@sohu.com
wanderstar 2003-12-05
  • 打赏
  • 举报
回复
第一个问题

声明
Declare Function Shell_NotifyIcon Lib "shell32.dll" Alias "Shell_NotifyIconA" (ByVal dwMessage As Long, lpData As NOTIFYICONDATA) As Long
Public Const NIM_ADD = &H0 '添加图标
Public Const NIM_DELETE = &H2 '删除图标
Public Const NIM_MODIFY = &H1 '图标属性已经改变的消息
Public Const NIF_ICON = &H2
Public Const NIF_MESSAGE = &H1
Public Const NIF_TIP = &H4
'鼠标消息
Public Const WM_LBUTTONDBLCLK = &H203
Public Const WM_LBUTTONDOWN = &H201
Public Const WM_LBUTTONUP = &H202
Public Const WM_RBUTTONDBLCLK = &H206
Public Const WM_RBUTTONDOWN = &H204
Public Const WM_RBUTTONUP = &H205
Public Const WM_MOUSEMOVE = &H200

'图标特性
Type NOTIFYICONDATA
cbSize As Long
hwnd As Long
uID As Long
uFlags As Long
uCallbackMessage As Long
hIcon As Long
szTip As String * 64
End Type


用法
Dim zmIcon As NOTIFYICONDATA

Private Sub addIcon()
Dim tmp As Long
zmIcon.cbSize = Len(zmIcon)
zmIcon.hwnd = Ficon.hwnd
zmIcon.uCallbackMessage = WM_MOUSEMOVE '定义回调事件为MouseMove
zmIcon.uID = 0 '定义图标号
zmIcon.uFlags = NIF_ICON Or NIF_MESSAGE Or NIF_TIP
zmIcon.hIcon = Ficon.Icon
zmIcon.szTip = "提示" + Chr$(0)
tmp = Shell_NotifyIcon(NIM_ADD, zmIcon)
End Sub

Private Sub delIcon()
Dim tmp As Long
tmp = Shell_NotifyIcon(NIM_DELETE, zmIcon)
End Sub

Private Sub Form_MouseMove(Button As Integer, Shift As Integer, X As Single, Y As Single)
Select Case CLng(X)
Case WM_LBUTTONDBLCLK
'双击事件
Case WM_LBUTTONDBLCLK
Case WM_LBUTTONDOWN
Case WM_LBUTTONUP
Case WM_RBUTTONDBLCLK
Case WM_RBUTTONDOWN
Case WM_RBUTTONUP
End Select
End Sub
Private Sub Form_Unload(Cancel As Integer)
delIcon
End
End Sub

Private Sub Wnl_Click()
Fcalendar.Visible = True
End Sub

第二个问题
RegisterServiceProcess 好像是WIN95才有的API啊!
App.TaskVisible = False
只适合WIN98 在WIN2K里面并不适用!
3661512 2003-12-05
  • 打赏
  • 举报
回复
1.参考这张贴
http://www.yesky.com/SoftChannel/72342371928637440/20030306/1655428.shtml
2.App.TaskVisible = False
xayzmb 2003-12-05
  • 打赏
  • 举报
回复
第一个问题代码有很多
没记住
^_^

第二个问题试试下面这个,看看行不?

'当按下 ctrl + alt + del 键时
'在任务管理器里看不到正在运行的程序
'加入下列代码

App.TaskVisible = False
踏平扶桑 2003-12-05
  • 打赏
  • 举报
回复
up
踏平扶桑 2003-12-05
  • 打赏
  • 举报
回复
谢谢各位回复
3661512(菜鸟一只) 我就是按那个做的,我是要实现只有双击任务栏图标时才执行代码

xayzmb(行者)
3661512(菜鸟一只)
wanderstar(☆★流浪星★☆)
第二个问题解决了,谢谢
等我解决第一个问题后马上结贴:)
bbgbianbaogui 2003-12-04
  • 打赏
  • 举报
回复
up
踏平扶桑 2003-12-04
  • 打赏
  • 举报
回复
SoHo_Andy(冰)

首先谢谢你的回复

但是两个都不能用,第一个执行压入托盘的代码就全部结束任务(包括vb)

第二个没有那个api函数RegisterServiceProcess
我的系统是2000server
frankkon 2003-12-04
  • 打赏
  • 举报
回复
关注
SoHo_Andy 2003-12-04
  • 打赏
  • 举报
回复
问题1:
托盘的模块代码
Option Explicit
Type NOTIFYICONDATA
cbSize As Long
hwnd As Long
uID As Long
uFlags As Long
uCallbackMessage As Long
hIcon As Long
szTip As String * 64
End Type
Public a As Long
'以下为 Shell_NotifyIcon将用到的常量
Public Const NIF_ICON = &H2
Public Const NIF_MESSAGE = &H1
Public Const NIF_TIP = &H4
Public Const NIM_ADD = &H0
Public Const NIM_DELETE = &H2
Public Const NIM_MODIFY = &H1
'Shell_NotifyIcon的函数声明
Declare Function Shell_NotifyIcon Lib "shell32.dll" Alias "Shell_NotifyIconA" _
(ByVal dwMessage As Long, lpData As NOTIFYICONDATA) As Long
'处理消息将用到的结构、常量、API声明
Type POINTAPI
x As Long
y As Long
End Type
Type Msg
hwnd As Long
message As Long
wParam As Long
lParam As Long
time As Long
pt As POINTAPI
End Type
Public Const WM_USER = &H400
Public Const WM_RBUTTONDOWN = &H204
Public Const WM_LBUTTONDOWN = &H201
Public Const GWL_WNDPROC = -4
Public trayflag As Boolean
Global lpPrevWndProc As Long
Global gHW As Long
Declare Function CallWindowProc Lib "user32" Alias "CallWindowProcA" (ByVal lpPrevWndFunc As Long, ByVal hwnd As Long, ByVal Msg As Long, ByVal wParam As Long, ByVal lParam As Long) As Long
Declare Function SetWindowLong Lib "user32" Alias "SetWindowLongA" (ByVal hwnd As Long, ByVal nIndex As Long, ByVal dwNewLong As Long) As Long

'以下过程为消息循环处理

Function WindowProc(ByVal hw As Long, ByVal uMsg As Long, ByVal wParam As Long, ByVal lParam As Long) As Long
If hw = Form1.hwnd And uMsg = WM_USER + 100 Then '检测到鼠标点动托盘图标
Select Case lParam
Case WM_RBUTTONDOWN '鼠标右键按下
Form1.PopupMenu Form1.traymnu '弹出菜单
Case WM_LBUTTONDOWN '鼠标左键按下
Form1.PopupMenu Form1.mnutray2 '弹出菜单
Case Else
End Select
Else '调用缺省窗口指针
' WindowProc = CallWindowProc(lpPrevWndProc, hw, uMsg, wParam, lParam)
End If
WindowProc = CallWindowProc(lpPrevWndProc, hw, uMsg, wParam, lParam)
End Function

调用方法的简单演示
Private Sub Command5_Click()
On Error GoTo err
gHW = Me.hwnd '取得本窗体指针
'下一句调用钩子函数,将自制消息处理函数钩入Windows的消息循环
hook
Exit Sub
err:
MsgBox err.Description, vbOKOnly, App.Title
End Sub

Public Sub hook()
'利用AddressOf取得消息处理函数WindowProc的指针,并将其传给SetWindowLong
'lpPrevWndProc用来存储原窗口的指针
lpPrevWndProc = SetWindowLong(gHW, GWL_WNDPROC, AddressOf WindowProc)
End Sub
Public Sub Unhook()
'本子程序用原窗口的指针替换WindowProc函数的指针,即关闭子类、退出消息循环
Dim temp As Long
temp = SetWindowLong(gHW, GWL_WNDPROC, lpPrevWndProc)
End Sub

问题2:
隐藏进程代码
Private Declare Function RegisterServiceProcess Lib "kernel32.dll" (ByVal _
dwProcessId As Long, ByVal dwType As Long) As Long
Private Declare Function GetCurrentProcessId Lib "kernel32.dll" () As Long
Private Sub ShowInTaskList(ByVal bShowInTaskList As Boolean)
RegisterServiceProcess GetCurrentProcessId, IIf(bShowInTaskList, 0, 1))
End Sub

当单击窗体最小化时执行
Private Sub Form_Resize()
Me.WindowState = 1
call ShowInTaskList(Flase)
End Sub
踏平扶桑 2003-12-04
  • 打赏
  • 举报
回复
up
DirectX修复工具(DirectX Repair)是一款系统级工具软件,简便易用。本程序为绿色版,无需安装,可直接运行。 本程序的主要功能是检测当前系统的DirectX状态,如果发现异常则进行修复。程序主要针对0xc000007b问题设计,可以完美修复该问题。本程序中包含了最新版的DirectX redist(Jun2010),并且全部DX文件都有Microsoft的数字签名,安全放心。 本程序为了应对一般电脑用户的使用,采用了傻瓜式一键设计,只要点击主界面上的“检测并修复”按钮,程序就会自动完成校验、检测、下载、修复以及注册的全部功能,无需用户的介入,大大降低了使用难度。 本程序适用于多个操作系统,如Windows XP(需先安装.NET 2.0,详情请参阅“致Windows XP用户.txt”文件)、Windows Vista、Windows 7、Windows 8、Windows 8.1、Windows 8.1 Update、Windows 10,同时兼容32位操作系统和64位操作系统。本程序会根据系统的不同,自动调整任务模式,无需用户进行设置。 本程序的V3.3版分为标准版、增强版以及在线修复版。其中的标准版以及增强版都包含完整的DirectX组件。除此之外,增强版中还额外包含了c++ Redistributable Package,因此增强版不但能解决DirectX组件的问题,而且还能解决c++组件异常产生的问题。增强版适合无法自行解决c++相关问题的用户使用。在线修复版的功能与标准版相同,只是其所需的文件将通过Internet下载,因此大大减小了程序的体积。本程序的各个版本之间,主程序完全相同,只是配套使用的数据包不同。因此,当您使用标准版数据包时,程序将进行标准修复;当您使用增强版的数据包时,程序将进行增强修复;当数据包不全或没有数据包(即只有DirectX Repair.exe程序)时,程序将进行在线修复。在线修复、离线修复可自由灵活组合,充分满足不同用户的需要。 本程序自V2.0版起采用全新的底层程序架构,使用了异步多线程编程技术,使得检测、下载、修复单独进行,互不干扰,快速如飞。新程序更改了自我校验方式,因此使用新版本的程序时不会再出现自我校验失败的错误;但并非取消自我校验,因此程序安全性与之前版本相同,并未降低。 程序有自动更新c++功能。由于绝大多数软件运行时需要c++的支持,并且c++的异常也会导致0xc000007b错误,因此程序在检测修复的同时,也会根据需要更新系统中的c++组件。自V3.2版本开始使用了全新的c++扩展包,可以大幅提高工业软件修复成功的概率。修复c++的功能仅限于增强版,标准版及在线修复版在系统c++异常时(非丢失时)会提示用户使用增强版进行修复。 程序有两种窗口样式。正常模式即默认样式,适合绝大多数用户使用。另有一种简约模式,此时窗口将只显示最基本的内容,修复会自动进行,修复完成10秒钟后会自动退出。该窗口样式可以使修复工作变得更加简单快速,同时方便其他软件、游戏将本程序内嵌,即可进行无需人工参与的快速修复。开启简约模式的方法是:打开程序所在目录下的“Settings.ini”文件(如果没有可以自己创建),将其中的“FormStyle”一项的值改为“Simple”并保存即可。 程序有高级筛选功能,开启该功能后用户可以自主选择要修复的文件,避免了其他不必要的修复工作。同时,也支持通过文件进行辅助筛选,只要在程序目录下建立“Filter.dat”文件,其中的每一行写一个需要修复文件的序号即可。该功能仅针对高级用户使用,并且必须在正常窗口模式下才有效(简约模式时无效)。 本程序有自动记录日志功能,可以记录每一次检测修复结果,方便在出现问题时,及时分析和查找原因,以便找到解决办法。 程序的“选项”对话框中包含了4项高级功能。点击其中的“注册系统文件夹中所有dll文件”按钮可以自动注册系统文件夹下的所有dll文件。该项功能不仅能修复DirectX的问题,还可以修复系统中很多其他由于dll未注册而产生的问题,颇为实用。点击该按钮旁边的小箭头,还可以注册任意指定文件夹下的dll文件,方便用户对绿色版、硬盘版的程序组件进行注册。点击第二个按钮可以为dll文件的右键菜单添加“注册”和“卸载”项,方便对单独的dll文件进行注册。请注意,并不是所有的dll文件都可以通过这种方式注册。点击“DirectX版本”选项卡可以自行修改系统中DirectX的版本信息。点击“DirectX加速”选项卡可以控制系统中DirectX加速的开启与关闭。 新版程序集成了用户反馈程序,可以在用户允许的前提下发送检测修复结果。用户也可以在出现问题时通过反馈程序和软件作者进行交流,共同查找问题。反馈是完全自愿和匿名(如果不填写E-mail地址)的。 本程序的通用版基于Microsoft .NET Framework 2.0开发,对于Windows 2000、Windows XP、Windows 2003的用户需要首先安装.NET Framework 2.0或更高版本方可运行本程序。有关下载和安装的详细信息请参阅“致Windows XP用户.txt”文件。对于Windows Vista、Windows 7及后续用户,可以直接运行本程序。 同时鉴于Windows 8(Windows 8.1、Windows 8.1 Update)、Windows 10系统中默认未包含.NET Framework 2.0,因此新版的程序文件夹内将包含一个DirectX_Repair_win8的特别版程序,该程序功能与通用版相同,基于.NET Framework 4.0开发,可以在Windows8(Windows 8.1、Windows 8.1 Update)、Windows 10系统中直接运行(其他系统如果安装了.NET Framework 4.0也可以运行这个特别版的程序)。 本程序的官方博客地址为:http://blog.csdn.net/vbcom/article/details/6962388 所有的更新以及技术支持都可以到该博客上找到。

7,789

社区成员

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

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