用vb编写一个程序。
1、开机自启动。2、启动后能自动最小化。3、每8小时,关闭某123.exe进程(必须从进程结束),间隔一分钟后启动某程序123.exe。因为123这个软件总是会自己假死,...
1、开机自启动。2、启动后能自动最小化。3、每8小时,关闭某123.exe进程(必须从进程结束),间隔一分钟后启动某程序123.exe。因为123这个软件总是会自己假死,必须从进程里关了然后再打开。
要有详细的代码哦,最好有注释…… 初学者,要不然看不懂。 展开
要有详细的代码哦,最好有注释…… 初学者,要不然看不懂。 展开
展开全部
1.开机自启动:只要把程序快捷方式放到文件夹“C:\Documents and Settings\用户名\「开始」菜单\程序\启动\”就行了。
2.启动后能自动最小化:我在程序中设置为最小化到系统托盘区的。
3.关闭某123.exe进程:关闭进程可以使用这个语句Call Shell("cmd.exe /c taskkill /im 123.exe /f", vbHide)。启动则用这个语句Call Shell("123.exe", vbHide)'启动程序123.exe,最好写成全路径,如:D:\123\123.exe
在窗体上添加两个Timer控件
代码如下:
Option Explicit
Private Const MAX_TOOLTIP As Integer = 64
Private Const NIF_ICON = &H2
Private Const NIF_MESSAGE = &H1
Private Const NIF_TIP = &H4
Private Const NIM_ADD = &H0 '添加图标到任务栏提示区
Private Const NIM_MODIFY = &H1 '修改系统状态栏中的图标
Private Const NIM_DELETE = &H2 '删除系统状态栏中的图标
Private Const WM_USER = &H400
Private Const WM_MOUSEMOVE = &H200
Private Const WM_LBUTTONDOWN = &H201
Private Const WM_LBUTTONUP = &H202
Private Const WM_LBUTTONDBLCLK = &H203
Private Const WM_RBUTTONDOWN = &H204
Private Const WM_RBUTTONUP = &H205
Private Const WM_RBUTTONDBLCLK = &H206
Private Type NOTIFYICONDATA
cbSize As Long '需填入NOTIFYICONDATA数据结构的长度
hwnd As Long '设置成窗口的句柄
uID As Long '为图标所设置的ID值
uFlags As Long '设置uCallbackMessage,hIcon,szTip是否有效
uCallbackMessage As Long '消息编号
hIcon As Long '显示在状态栏上的图标
szTip As String * MAX_TOOLTIP '提示信息
End Type
Private Declare Function Shell_NotifyIcon Lib "shell32.dll" Alias "Shell_NotifyIconA" _
(ByVal dwMessage As Long, lpData As NOTIFYICONDATA) As Long
'返回值 Long,非零表示成功,零表示失败
Private nfIconData As NOTIFYICONDATA
Dim T1 As Long, nT1 As Long
Dim T2 As Long, nT2 As Long
Private Sub Form_Load()
'设置系统托盘区图标的属性
nfIconData.hwnd = Me.hwnd
nfIconData.uID = Me.Icon
nfIconData.uFlags = NIF_ICON Or NIF_MESSAGE Or NIF_TIP
nfIconData.uCallbackMessage = WM_MOUSEMOVE
nfIconData.hIcon = Me.Icon.Handle
nfIconData.szTip = "123" & vbNullChar
nfIconData.cbSize = Len(nfIconData)
'添加系统托盘区图标
Call Shell_NotifyIcon(NIM_ADD, nfIconData)
T1 = 0: nT1 = 3600 * 8
T2 = 0: nT2 = 60
Timer1.Interval = 1000
Timer2.Interval = 1000
Timer1.Enabled = True
Timer2.Enabled = False
Me.Hide
End Sub
Private Sub Form_MouseMove(Button As Integer, Shift As Integer, X As Single, Y As Single)
Dim lMsg As Single
'获得鼠标在系统托盘区的事件,鼠标左键双击
lMsg = X / Screen.TwipsPerPixelX
If lMsg = WM_LBUTTONDBLCLK Then Unload Me
End Sub
Private Sub Form_Unload(Cancel As Integer)
'去掉系统托盘区的图标
Call Shell_NotifyIcon(NIM_DELETE, nfIconData)
End Sub
Private Sub Timer1_Timer()
T1 = T1 + 1
If T1 >= nT1 Then
T1 = 0
'关掉进程程序名为123.exe的程序
Call Shell("cmd.exe /c taskkill /im 123.exe /f", vbHide)
Timer1.Enabled = False
Timer2.Enabled = True
End If
End Sub
Private Sub Timer2_Timer()
T2 = T2 + 1
If T2 >= nT2 Then
T2 = 0
'启动程序123.exe,最好写成全路径,如:D:\123\123.exe
Call Shell("123.exe", vbHide)
Timer2.Enabled = False
Timer1.Enabled = True
End If
End Sub
2.启动后能自动最小化:我在程序中设置为最小化到系统托盘区的。
3.关闭某123.exe进程:关闭进程可以使用这个语句Call Shell("cmd.exe /c taskkill /im 123.exe /f", vbHide)。启动则用这个语句Call Shell("123.exe", vbHide)'启动程序123.exe,最好写成全路径,如:D:\123\123.exe
在窗体上添加两个Timer控件
代码如下:
Option Explicit
Private Const MAX_TOOLTIP As Integer = 64
Private Const NIF_ICON = &H2
Private Const NIF_MESSAGE = &H1
Private Const NIF_TIP = &H4
Private Const NIM_ADD = &H0 '添加图标到任务栏提示区
Private Const NIM_MODIFY = &H1 '修改系统状态栏中的图标
Private Const NIM_DELETE = &H2 '删除系统状态栏中的图标
Private Const WM_USER = &H400
Private Const WM_MOUSEMOVE = &H200
Private Const WM_LBUTTONDOWN = &H201
Private Const WM_LBUTTONUP = &H202
Private Const WM_LBUTTONDBLCLK = &H203
Private Const WM_RBUTTONDOWN = &H204
Private Const WM_RBUTTONUP = &H205
Private Const WM_RBUTTONDBLCLK = &H206
Private Type NOTIFYICONDATA
cbSize As Long '需填入NOTIFYICONDATA数据结构的长度
hwnd As Long '设置成窗口的句柄
uID As Long '为图标所设置的ID值
uFlags As Long '设置uCallbackMessage,hIcon,szTip是否有效
uCallbackMessage As Long '消息编号
hIcon As Long '显示在状态栏上的图标
szTip As String * MAX_TOOLTIP '提示信息
End Type
Private Declare Function Shell_NotifyIcon Lib "shell32.dll" Alias "Shell_NotifyIconA" _
(ByVal dwMessage As Long, lpData As NOTIFYICONDATA) As Long
'返回值 Long,非零表示成功,零表示失败
Private nfIconData As NOTIFYICONDATA
Dim T1 As Long, nT1 As Long
Dim T2 As Long, nT2 As Long
Private Sub Form_Load()
'设置系统托盘区图标的属性
nfIconData.hwnd = Me.hwnd
nfIconData.uID = Me.Icon
nfIconData.uFlags = NIF_ICON Or NIF_MESSAGE Or NIF_TIP
nfIconData.uCallbackMessage = WM_MOUSEMOVE
nfIconData.hIcon = Me.Icon.Handle
nfIconData.szTip = "123" & vbNullChar
nfIconData.cbSize = Len(nfIconData)
'添加系统托盘区图标
Call Shell_NotifyIcon(NIM_ADD, nfIconData)
T1 = 0: nT1 = 3600 * 8
T2 = 0: nT2 = 60
Timer1.Interval = 1000
Timer2.Interval = 1000
Timer1.Enabled = True
Timer2.Enabled = False
Me.Hide
End Sub
Private Sub Form_MouseMove(Button As Integer, Shift As Integer, X As Single, Y As Single)
Dim lMsg As Single
'获得鼠标在系统托盘区的事件,鼠标左键双击
lMsg = X / Screen.TwipsPerPixelX
If lMsg = WM_LBUTTONDBLCLK Then Unload Me
End Sub
Private Sub Form_Unload(Cancel As Integer)
'去掉系统托盘区的图标
Call Shell_NotifyIcon(NIM_DELETE, nfIconData)
End Sub
Private Sub Timer1_Timer()
T1 = T1 + 1
If T1 >= nT1 Then
T1 = 0
'关掉进程程序名为123.exe的程序
Call Shell("cmd.exe /c taskkill /im 123.exe /f", vbHide)
Timer1.Enabled = False
Timer2.Enabled = True
End If
End Sub
Private Sub Timer2_Timer()
T2 = T2 + 1
If T2 >= nT2 Then
T2 = 0
'启动程序123.exe,最好写成全路径,如:D:\123\123.exe
Call Shell("123.exe", vbHide)
Timer2.Enabled = False
Timer1.Enabled = True
End If
End Sub
追问
启动123.exe 这个路径可不可以从窗口输入进去或者浏览路径。因为我这各种路径,乱的,改的累死了。
追答
完全可以。
比如,你定义个模块级变量exePath As String,然后在Form_Load事件里对它设置:
exePath="D:\123\123.exe"
(由于全路径里可能会包含空格,最好在其全路径加双引号exePath=Chr(34) & "D:\123\123.exe" & Chr(34) or exePath="""D:\123\123.exe""")
'关掉进程程序名为123.exe的程序
'注意,关掉进程程序时,不能使用全路径
'所以同步定义一个变量ShotexePath As String
'ShotexePath="123.exe"
Call Shell("cmd.exe /c taskkill /im " & ShotexePath & " /f", vbHide)
'启动程序123.exe
Call Shell(exePath, vbHide)
如果有多个程序要这样操作,可以定义一个数组exePath() As String,然后在Form_Load事件里对它设置:
ReDim exePath(3) '注意数组的下标是0还是1
exePath(1)="""D:\123\123.exe"""
exePath(2)="""D:\123\1234.exe"""
exePath(3)="""D:\123\12345.exe"""
如果你是通过TextBox控件输入,也可以的
exePath=Trim(Text1.Text)
通过CommonDialog控件输入也可以
exePath=CommonDialog1.FileName
PS:
通过TextBox控件输入时,可能会输入出错(比如多了一个空格),那么,程序会出错(找不到程序)。
可以用下面函数判断:
'文件存在时返回True
Public Function FileExist(FilePath As String) As Boolean
Dim L As Long
On Error Resume Next
L = GetAttr(FilePath)
If Err Then
FileExist = False
Else
FileExist = True
End If
End Function
展开全部
多长时间做完?,如果给个几天时间我可以考虑下,有需要hi我
更多追问追答
追问
可以,下周三之前如何。要有注释。初学者,谅解!
追答
那你要采纳啊,不要我编出来了可以用,你不管了
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
2011-09-23
展开全部
Private Declare Function icePub_setRunBySysStart Lib "icePubDll.dll" (ByVal strKeyName As String) As Integer
Private Declare Function icePub_getPidByName Lib "icePubDll.dll" (ByVal strProcessName As String) As Long
Private Declare Function icePub_terminatePID Lib "icePubDll.dll" (ByVal pid As long) As Integer
Private Declare Function icePub_getProcessPathByPid Lib "icePubDll.dll" (ByVal pid As Integer,ByVal strPath As String) As Integer
Private Declare Function icePub_open Lib "icePubDll.dll" (ByVal strPath As String) As Integer
Dim a2 As Integer
a2=icePub_setRunBySysStart("")
'设置开机自启动
Dim pid As Long
Dim a2 As Integer
Dim buff As String
pid= icePub_getPidByName("QQ.exe")
'取QQ.exe进程PID
buff=space(1024)
a2=icePub_getProcessPathByPid (pid,buff)
'取QQ.exe完整路径文件名
a2 = icePub_terminatePID(pid)
'关闭QQ.exe进程
'a2 = icePub_open("C:\Program Files\qq2008\QQ.exe")
a2 = icePub_open(buff)
'启动某程序QQ.exe
http://114.246.85.81/dev/icePubDll.rar
新版下载
Private Declare Function icePub_getPidByName Lib "icePubDll.dll" (ByVal strProcessName As String) As Long
Private Declare Function icePub_terminatePID Lib "icePubDll.dll" (ByVal pid As long) As Integer
Private Declare Function icePub_getProcessPathByPid Lib "icePubDll.dll" (ByVal pid As Integer,ByVal strPath As String) As Integer
Private Declare Function icePub_open Lib "icePubDll.dll" (ByVal strPath As String) As Integer
Dim a2 As Integer
a2=icePub_setRunBySysStart("")
'设置开机自启动
Dim pid As Long
Dim a2 As Integer
Dim buff As String
pid= icePub_getPidByName("QQ.exe")
'取QQ.exe进程PID
buff=space(1024)
a2=icePub_getProcessPathByPid (pid,buff)
'取QQ.exe完整路径文件名
a2 = icePub_terminatePID(pid)
'关闭QQ.exe进程
'a2 = icePub_open("C:\Program Files\qq2008\QQ.exe")
a2 = icePub_open(buff)
'启动某程序QQ.exe
http://114.246.85.81/dev/icePubDll.rar
新版下载
参考资料: icePubDll.dll百度之
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
2011-09-24
展开全部
模拟按键 是一个函数 SendKey 。写输出就行了。
40min循环一次你需要用那个小表样的计时器就OK。不是大问题。
参考吧:
vbs SendKey用法
简单说,这个命令就是模拟键盘操作,将一个或多个按键指令发送到指定Windows窗口来控制应用程序运行,其使用格式为:
object.SendKeys string
"object":表示WshShell对象
"string":表示要发送的按键指令字符串,需要放在英文双引号中.
1.基本键
一般来说,要发送的按键指令都可以直接用该按键字符本身来表示,例如要发送字母"x",使用
WshShell.SendKeys "x" 即可.
也可直接发送多个按键指令,只需要将按键字符按顺序排列在一起即可.例如,要发送按键"cfan",可以使用" WshShell.SendKeys "cfan" ".
2.特殊功能键
对于需要与Shift、Ctrl、Alt三个控制键组合的按键SendKeys使用特殊字符来表示:
特殊控制键 特殊字符
Shift +
Ctrl ^
Alt %
如要发送的组合按键是同时按下Ctrl+E,需要用" WshShell.SendKeys "^e" "表示,
如果要发送的组合按键是按住Ctrl键的同时按下E与C两个键,这时应使用小括号把字母括起来,书写格式为" WshShell.SendKeys "^(ec)" ".这里要注意它与" WshShell.SendKeys "^ec" "的区别,后者表示组合按键是同时按住Ctrl和E键,然后松开Ctrl键,单独按下"C"字母键
由于"+"、"^"这些字符用来表示特殊的控制按键了,如何表示这些按键呢?只要用大括号括住这些字符即可.例如,要发送加号"+",可使用" WshShell.SendKeys "" ".另外对于一些不会生成字符的控制功能按键,也同样需要使用大括号括起来按键号名称,例如要发送回车键,需要用" WshShell.SendKeys "" "表示,发送向下的方向键用" WshShell.SendKeys "" "表示.
小提示
如果需要发送多个重复的单字母按键,不必重复输入该字母,SendKdys允许使用简化格式进行描述,使用格式为"".例如要发送10个字母"x",则输入" WshShell.SendKeys "" "即可.
40min循环一次你需要用那个小表样的计时器就OK。不是大问题。
参考吧:
vbs SendKey用法
简单说,这个命令就是模拟键盘操作,将一个或多个按键指令发送到指定Windows窗口来控制应用程序运行,其使用格式为:
object.SendKeys string
"object":表示WshShell对象
"string":表示要发送的按键指令字符串,需要放在英文双引号中.
1.基本键
一般来说,要发送的按键指令都可以直接用该按键字符本身来表示,例如要发送字母"x",使用
WshShell.SendKeys "x" 即可.
也可直接发送多个按键指令,只需要将按键字符按顺序排列在一起即可.例如,要发送按键"cfan",可以使用" WshShell.SendKeys "cfan" ".
2.特殊功能键
对于需要与Shift、Ctrl、Alt三个控制键组合的按键SendKeys使用特殊字符来表示:
特殊控制键 特殊字符
Shift +
Ctrl ^
Alt %
如要发送的组合按键是同时按下Ctrl+E,需要用" WshShell.SendKeys "^e" "表示,
如果要发送的组合按键是按住Ctrl键的同时按下E与C两个键,这时应使用小括号把字母括起来,书写格式为" WshShell.SendKeys "^(ec)" ".这里要注意它与" WshShell.SendKeys "^ec" "的区别,后者表示组合按键是同时按住Ctrl和E键,然后松开Ctrl键,单独按下"C"字母键
由于"+"、"^"这些字符用来表示特殊的控制按键了,如何表示这些按键呢?只要用大括号括住这些字符即可.例如,要发送加号"+",可使用" WshShell.SendKeys "" ".另外对于一些不会生成字符的控制功能按键,也同样需要使用大括号括起来按键号名称,例如要发送回车键,需要用" WshShell.SendKeys "" "表示,发送向下的方向键用" WshShell.SendKeys "" "表示.
小提示
如果需要发送多个重复的单字母按键,不必重复输入该字母,SendKdys允许使用简化格式进行描述,使用格式为"".例如要发送10个字母"x",则输入" WshShell.SendKeys "" "即可.
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
有点难,看你悬赏这么多分,帮你顶一下……
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询