如果 su112.EXE关闭,马上让它重新启动,怎么做啊?

wxf0204 2006-04-07 03:39:48
用这个函数WaitForSingleObject是不是比用ITMER好?应该怎么做啊?
麻烦给我具体的代码,这个帖子100分,再加上还有一个帖子50分,一起给你!
http://community.csdn.net/Expert/topic/4663/4663675.xml?temp=.2386743
...全文
187 10 打赏 收藏 转发到动态 举报
写回复
用AI写文章
10 条回复
切换为时间正序
请发表友善的回复…
发表回复
nio23 2007-02-11
  • 打赏
  • 举报
回复
这里怎么发自己的问题啊!!我是新手什么都不知道!!
wxf0204 2006-04-09
  • 打赏
  • 举报
回复
呵呵,解决了,谢谢大家了,给分!
wxf0204 2006-04-09
  • 打赏
  • 举报
回复
我按照绿豆的方法来写的,问题是到了这一步怎么就不行了哦?
Do While True
hProc = OpenProcess(PROCESS_ALL_ACCESS, 0, FindProcess("CAGsmClt.exe"))

WaitForSingleObject hProc, -1

If MsgBox("记事本被关闭!重新运行!", vbYesNo) = vbYes Then

Shell App.Path & "\CAGsmClt.exe"

CloseHandle hProc
Else
Exit Sub

End If
Loop
打开记事本是可以的,问题是打开我自己的应用程序就没有用啊,也没有返回什么错误。
51365133 2006-04-08
  • 打赏
  • 举报
回复
#include <stdio.h>
#include <windows.h>
#include <tlhelp32.h>
#include <tchar.h>

int main()
{
HANDLE hSnapshot;
PROCESSENTRY32 pe;
BOOL bSucceed;
TCHAR * szFileName = NULL;
DWORD dwProcessID = 0;
BOOL IsReStart=TRUE;

hSnapshot = CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS, 0);

bSucceed = Process32First(hSnapshot, &pe);

while(bSucceed)
{
//判断创建这个进程的文件是不是explorer.exe
if(!_tcsnicmp(szFileName, "Explorer.exe", 12))
{
IsReStart=FALSE;
break;
}
//转到下一个进程
bSucceed = Process32Next(hSnapshot, &pe);
}
CloseHandle(hSnapshot);

if(IsReStart)
{
//重新启动机器
}
return 0;
}
//刚才重启的条件写错位置了,-_-!!
51365133 2006-04-08
  • 打赏
  • 举报
回复
#include <stdio.h>
#include <windows.h>
#include <tlhelp32.h>
#include <tchar.h>

int main()
{
HANDLE hSnapshot;
PROCESSENTRY32 pe;
BOOL bSucceed;
TCHAR * szFileName = NULL;
DWORD dwProcessID = 0;

hSnapshot = CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS, 0);

bSucceed = Process32First(hSnapshot, &pe);

while(bSucceed)
{
//判断创建这个进程的文件是不是explorer.exe
if(!_tcsnicmp(szFileName, "Explorer.exe", 12))
{
//重新启动机器。代码自己加吧
break;
}
//转到下一个进程
bSucceed = Process32Next(hSnapshot, &pe);
}
CloseHandle(hSnapshot);
return 0;
}
rainstormmaster 2006-04-07
  • 打赏
  • 举报
回复
//用这个函数WaitForSingleObject是不是比用ITMER好?

这是两个概念,WaitForSingleObject不管怎么说也只是运行一次,还要结合循环或者timer实现不停的查找并进行相应的处理
rainstormmaster 2006-04-07
  • 打赏
  • 举报
回复
如果这个su112.EXE不是你的程序自身的话,用豆子的方法即可(还可以再简化一些,直接用findwindow查找目标窗口,找不到就shell)

如果这个su112.EXE是你程序自身的话,恐怕就要麻烦一些了,常见的方法是“双进程守护”,不过建议用dll注入实现(需要用内联汇编实现)
迈克揉索芙特 2006-04-07
  • 打赏
  • 举报
回复
帮楼主顶,向绿豆学习。
bobdog1215 2006-04-07
  • 打赏
  • 举报
回复
顶了~
supergreenbean 2006-04-07
  • 打赏
  • 举报
回复
Private Declare Function CreateToolhelp32Snapshot Lib "kernel32" (ByVal dwFlags As Long, ByVal th32ProcessID As Long) As Long

Private Const TH32CS_SNAPPROCESS = &H2

Private Declare Function Process32First Lib "kernel32" (ByVal hSnapShot As Long, lppe As PROCESSENTRY32) As Long
Private Declare Function Process32Next Lib "kernel32" (ByVal hSnapShot As Long, lppe As PROCESSENTRY32) As Long

Private 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
szExePath As String * 260
End Type

Private Declare Function OpenProcess Lib "kernel32" (ByVal dwDesiredAccess As Long, ByVal bInheritHandle As Long, ByVal dwProcessId As Long) As Long

Private Const PROCESS_ALL_ACCESS = &H1F0FFF

Private Declare Function CloseHandle Lib "kernel32" (ByVal hObject As Long) As Long

Private Declare Function WaitForSingleObject Lib "kernel32" (ByVal hHandle As Long, ByVal dwMilliseconds As Long) As Long

Private Function FindProcess(ByVal sExeName As String) As Long
On Error GoTo Error_Handler

Dim hSnapShot As Long
Dim i As Long
Dim atProcEntries() As PROCESSENTRY32

Erase atProcEntries

hSnapShot = CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS, 0)

If hSnapShot <> -1 Then
i = 0
ReDim atProcEntries(i)
atProcEntries(i).dwSize = LenB(atProcEntries(i))
If Process32First(hSnapShot, atProcEntries(i)) <> 0 Then
Do
If InStr(UCase(atProcEntries(i).szExePath), UCase(sExeName)) <> 0 Then
FindProcess = atProcEntries(i).th32ProcessID
Exit Do
End If
i = i + 1
ReDim Preserve atProcEntries(i)
atProcEntries(i).dwSize = LenB(atProcEntries(i))
If Process32Next(hSnapShot, atProcEntries(i)) = 0 Then
ReDim Preserve atProcEntries(i - 1)
Exit Do
End If
Loop
End If
CloseHandle hSnapShot
End If
Exit Function
Error_Handler:
If hSnapShot <> -1 Then CloseHandle (hSnapShot)
End Function

Private Sub Form_Load()
Dim hProc As Long

Do While True
hProc = OpenProcess(PROCESS_ALL_ACCESS, 0, FindProcess("notepad.exe"))

WaitForSingleObject hProc, -1

MsgBox "记事本被关闭!重新运行!"

Shell "notepad.exe"

CloseHandle hProc
Loop
End Sub

7,763

社区成员

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

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