中国DOS联盟

-- 联合DOS 推动DOS 发展DOS --

联盟域名:www.cn-dos.net 论坛域名:www.cn-dos.net/forum
DOS,代表着自由开放与发展,我们努力起来,学习FreeDOS和Linux的自由开放与GNU精神,共同创造和发展美好的自由与GNU GPL世界吧!

中国DOS联盟论坛
现在时间是 2026-07-07 05:23
中国DOS联盟论坛 » DOS批处理 & 脚本技术(批处理室) » 【未结,急】强制程序后台运行 查看 1,395 回复 7
楼 主 【未结,急】强制程序后台运行 发表于 2008-10-28 20:46 ·  中国 广东 深圳 联通
初级用户
★★
积分 153
发帖 103
注册 2008-03-27 19:38
18年会员
UID 114210
性别 男
状态 离线
有时侯上网时,有的程序只想后台运行,比如进程123.exe,有老板键^h(ctrl+h),按下老板键后会重托盘图标里消失(或出来)
可是当资源管理器崩溃的时候(或其它异常原因),123.exe自动重托盘里面显示出来了

请问大家,怎么用vbs(或其它什么软件)实现下面其中一种效果:
1 监视123.exe,当123.exe在托盘图标里时,WshShell.SendKeys "^h"
(wscript.sleep 15000,每15秒种查看一次)
2 监视123.exe,当别人双击托盘图标的123.exe,123.exe主被激活,任务管理器的 应用进程栏 产生123.exe(进程栏 里也有123.exe)
此时,WshShell.SendKeys "^h"
(wscript.sleep 15000,每15秒种查看一次)
上面的效果只要实现一种就可以了

反正,求个监视的脚本,使托盘里面没有123.exe 的图标,由于修改注册表好像不能实现
以前有个有个tray.dll的文件,是个托盘冒泡的,不能实现不了这种效果。
我拭了几个软件都只能隐藏主界面,不能同时隐藏 软件本身和123.exe 的托盘图标,或者老弹出注册窗口.

[ Last edited by kioskboy on 2008-11-18 at 10:43 ]
2 发表于 2008-10-29 07:21 ·  中国 广东 广州 电信
金牌会员
★★★★
一叶枝头,万树皆春
积分 2,564
发帖 1,127
注册 2006-12-25 22:57
19年会员
UID 74552
性别 男
状态 离线
我曾经也问过这样的问题,后来慢慢知道的多了,才发现那时自已很无知
49206C6F766520796F752067757973 54656C3A3133383238343036373837
3 发表于 2008-11-04 13:04 ·  中国 广东 深圳 联通
初级用户
★★
积分 153
发帖 103
注册 2008-03-27 19:38
18年会员
UID 114210
性别 男
状态 离线
这样说不行啊,兄弟
说清楚点啊

[ Last edited by kioskboy on 2008-11-5 at 01:28 ]
4 发表于 2008-11-04 17:02 ·  中国 北京 鹏博士长城宽带
银牌会员
★★★★
[b]看你妹啊[/b]
积分 1,488
发帖 1,357
注册 2006-05-20 12:00
20年会员
UID 55770
状态 离线
楼主继续再深入学学批处理

系统里自带的命令不太可能实现这样功能的。

有问题请发论坛或者自行搜索,再短消息问我的统统是SB
5 发表于 2008-11-05 01:45 ·  中国 广东 深圳 联通
初级用户
★★
积分 153
发帖 103
注册 2008-03-27 19:38
18年会员
UID 114210
性别 男
状态 离线
那vbs应该行吧,用个dll帮忙也可以呀,希望vb和 vbs高手帮下我

[ Last edited by kioskboy on 2008-11-5 at 05:26 ]
6 发表于 2008-11-17 11:07 ·  中国 广东 深圳 电信
初级用户
★★
积分 153
发帖 103
注册 2008-03-27 19:38
18年会员
UID 114210
性别 男
状态 离线
根据下面的代码,Private Sub Command2_Click() 和Private Sub Command3_Click() 不需要, 怎么改,或其它方法,
算了,不改成vbs,就修改下vb。能达到不使123.exe托盘图标始终(或尽量)不出来 就可以了,如以qq.exe为测试对象(反正按ctrl+alt+z可以再跑出来,或者好象关掉多出的进程*dll就可以了),只需要对qq.exe进行操作
我不知道把”qq.exe“字符串 放在哪个地方?

Option Explicit
Private Const WM_USER = &H400
Private Const TB_BUTTONCOUNT = (WM_USER + 24)
Private Const TB_HIDEBUTTON = (WM_USER + 4)
Private Const TB_GETBUTTONTEXTA = (WM_USER + 45)
Private Const TB_AUTOSIZE = (WM_USER + 33)

Private Const MEM_COMMIT = &H1000
Private Const MEM_RESERVE = &H2000
Private Const MEM_RELEASE = &H8000

Private Const PAGE_READWRITE = &H4

Private Const PROCESS_VM_OPERATION = (&H8)
Private Const PROCESS_VM_READ = (&H10)
Private Const PROCESS_VM_WRITE = (&H20)

Private Declare Function FindWindow Lib "user32" Alias "FindWindowA" (ByVal lpClassName As String, ByVal lpWindowName As String) As Long
Private Declare Function FindWindowEx Lib "user32" Alias "FindWindowExA" (ByVal hWnd1 As Long, ByVal hwnd2 As Long, ByVal lpsz1 As String, ByVal lpsz2 As String) As Long
Private Declare Function SendMessage Lib "user32" Alias "SendMessageA" (ByVal hWnd As Long, ByVal wMsg As Long, ByVal wParam As Long, lParam As Any) As Long
Private Declare Function VirtualAllocEx Lib "kernel32.dll" (ByVal hProcess As Long, lpAddress As Any, ByRef dwSize As Long, ByVal flAllocationType As Long, ByVal flProtect As Long) As Long
Private Declare Function VirtualFreeEx Lib "kernel32.dll" (ByVal hProcess As Long, lpAddress As Any, ByRef dwSize As Long, ByVal dwFreeType As Long) As Long
Private Declare Function OpenProcess Lib "kernel32" (ByVal dwDesiredAccess As Long, ByVal bInheritHandle As Long, ByVal dwProcessId As Long) As Long
Private Declare Function CloseHandle Lib "kernel32" (ByVal hObject As Long) As Long
Private Declare Function GetWindowThreadProcessId Lib "user32" (ByVal hWnd As Long, lpdwProcessId As Long) As Long
Private Declare Function ReadProcessMemory Lib "kernel32" (ByVal hProcess As Long, lpBaseAddress As Any, lpBuffer As Any, ByVal nSize As Long, lpNumberOfBytesWritten As Long) As Long
Private Declare Function WriteProcessMemory Lib "kernel32" (ByVal hProcess As Long, lpBaseAddress As Any, lpBuffer As Any, ByVal nSize As Long, lpNumberOfBytesWritten As Long) As Long
Private Declare Function GetCurrentProcessId Lib "kernel32" () As Long

Private Sub Command1_Click() '隐藏
Dim pIdExplorer As Long, hwnd2 As Long, hExplorer As Long, lpIconText As Long
Dim i As Integer
Dim BtnCount As Integer
Dim IconText As String

hwnd2 = FindWindow("Shell_TrayWnd", vbNullString)
hwnd2 = FindWindowEx(hwnd2, 0, "TrayNotifyWnd", vbNullString)
hwnd2 = FindWindowEx(hwnd2, 0, "SysPager", vbNullString)
hwnd2 = FindWindowEx(hwnd2, 0, "ToolbarWindow32", vbNullString)

GetWindowThreadProcessId hwnd2, pIdExplorer
hExplorer = OpenProcess(PROCESS_VM_OPERATION Or PROCESS_VM_READ Or PROCESS_VM_WRITE, False, pIdExplorer)
lpIconText = VirtualAllocEx(ByVal hExplorer, ByVal 0&, Len(IconText), MEM_COMMIT Or MEM_RESERVE, PAGE_READWRITE)

BtnCount = SendMessage(hwnd2, TB_BUTTONCOUNT, 0, 0)

Dim lLen As Long, sBuff As String
For i = 0 To BtnCount - 1

IconText = Space$(256)
lLen = SendMessage(hwnd2, TB_GETBUTTONTEXTA, i, ByVal lpIconText)
ReadProcessMemory hExplorer, ByVal lpIconText, ByVal IconText, Len(IconText), 0
If lLen <> -1 Then IconText = Left$(IconText, InStr(1, IconText, Chr$(0)) - 1)
If IconText = List1.List(List1.ListIndex) Then ' "音量" Then
SendMessage hwnd2, TB_HIDEBUTTON, i, ByVal True
SendMessage hwnd2, TB_AUTOSIZE, 0, 0
End If
Next
VirtualFreeEx hExplorer, lpIconText, Len(IconText), MEM_RELEASE
CloseHandle hExplorer
End Sub

Private Sub Command2_Click() '显示列表
Dim pIdExplorer As Long, hwnd2 As Long, hExplorer As Long, lpIconText As Long
Dim i As Integer
Dim BtnCount As Integer
Dim IconText As String

hwnd2 = FindWindow("Shell_TrayWnd", vbNullString)
hwnd2 = FindWindowEx(hwnd2, 0, "TrayNotifyWnd", vbNullString)
hwnd2 = FindWindowEx(hwnd2, 0, "SysPager", vbNullString)
hwnd2 = FindWindowEx(hwnd2, 0, "ToolbarWindow32", vbNullString)

GetWindowThreadProcessId hwnd2, pIdExplorer
hExplorer = OpenProcess(PROCESS_VM_OPERATION Or PROCESS_VM_READ Or PROCESS_VM_WRITE, False, pIdExplorer)
lpIconText = VirtualAllocEx(ByVal hExplorer, ByVal 0&, Len(IconText), MEM_COMMIT Or MEM_RESERVE, PAGE_READWRITE)

BtnCount = SendMessage(hwnd2, TB_BUTTONCOUNT, 0, 0)

Dim lLen As Long, sBuff As String
For i = 0 To BtnCount - 1

IconText = Space$(256)
lLen = SendMessage(hwnd2, TB_GETBUTTONTEXTA, i, ByVal lpIconText)
ReadProcessMemory hExplorer, ByVal lpIconText, ByVal IconText, Len(IconText), 0
If lLen <> -1 Then IconText = Left$(IconText, InStr(1, IconText, Chr$(0)) - 1)
If IconText = List1.List(List1.ListIndex) Then ' "音量" Then
SendMessage hwnd2, TB_HIDEBUTTON, i, ByVal False
SendMessage hwnd2, TB_AUTOSIZE, 0, 0
End If
Next
VirtualFreeEx hExplorer, lpIconText, Len(IconText), MEM_RELEASE
CloseHandle hExplorer
End Sub

Private Sub Command3_Click() '刷新列表
List1.Clear
Dim pIdExplorer As Long, hwnd2 As Long, hExplorer As Long, lpIconText As Long
Dim i As Integer
Dim BtnCount As Integer
Dim IconText As String

hwnd2 = FindWindow("Shell_TrayWnd", vbNullString)
hwnd2 = FindWindowEx(hwnd2, 0, "TrayNotifyWnd", vbNullString)
hwnd2 = FindWindowEx(hwnd2, 0, "SysPager", vbNullString)
hwnd2 = FindWindowEx(hwnd2, 0, "ToolbarWindow32", vbNullString)

GetWindowThreadProcessId hwnd2, pIdExplorer
hExplorer = OpenProcess(PROCESS_VM_OPERATION Or PROCESS_VM_READ Or PROCESS_VM_WRITE, False, pIdExplorer)
lpIconText = VirtualAllocEx(ByVal hExplorer, ByVal 0&, Len(IconText), MEM_COMMIT Or MEM_RESERVE, PAGE_READWRITE)

BtnCount = SendMessage(hwnd2, TB_BUTTONCOUNT, 0, 0)

Dim lLen As Long, sBuff As String
For i = 0 To BtnCount - 1

IconText = Space$(256)
lLen = SendMessage(hwnd2, TB_GETBUTTONTEXTA, i, ByVal lpIconText)
ReadProcessMemory hExplorer, ByVal lpIconText, ByVal IconText, Len(IconText), 0
If lLen <> -1 Then IconText = Left$(IconText, InStr(1, IconText, Chr$(0)) - 1)
List1.AddItem IconText

Next
VirtualFreeEx hExplorer, lpIconText, Len(IconText), MEM_RELEASE
CloseHandle hExplorer
End Sub

Private Sub Form_Load()
Command3_Click
End Sub


[ Last edited by kioskboy on 2008-11-18 at 10:40 ]
7 Re 6楼 发表于 2008-11-17 12:06 ·  美国 惠普HP
版主
★★★★★
积分 9,023
发帖 5,017
注册 2007-05-31 19:39
19年会员
UID 89899
性别 男
状态 离线
8 发表于 2008-11-18 10:42 ·  中国 广东 深圳 电信
初级用户
★★
积分 153
发帖 103
注册 2008-03-27 19:38
18年会员
UID 114210
性别 男
状态 离线
不以qq.exe为例子也可以
如以internat.exe为例,达到下面的效果就可以了

用vb写个程序,使其托盘图标隐藏,最好这个程序没有窗口
(如根据上面vb代码,关闭进程*dll,可以使其托盘图标重新出来)

[ Last edited by kioskboy on 2008-11-18 at 10:44 ]
论坛跳转: