terminateprocess

时间:2024-06-22 12:00:36编辑:流行君

C#中的窗体关闭事件

你可以在Application.ApplicationExit事件中修改数据库中的状态(离线)
Application.ApplicationExit += new EventHandler(this.OnApplicationExit);//这句在程序运行时加

private void OnApplicationExit(object sender, EventArgs e)
{
//此处改数据库中状态
}

但是要想结束进程或突然死机也改,是不可能的。像直接断电源、断网等,都不可能再有操作的了
QQ也没法解决这个问题,
但可以每隔几分钟改一下数据库中的一个时间字段,如3分钟,服务器再写个程序每隔5分钟更新一下状态,如(Update 表名 Set 状态=离线 where 状态= 在线 and (当前时间-3分钟)>时间字段)


求教高手 如何用c++实现关闭某一进程中的一个句柄

1、创建成功后,ProcessInfo里面会有这个进程的句柄(handle),可以用来关闭该进程。需要将ProcessInfo或者ProcessInfo.hProcess保存成成员变量或者其他,用以其他函数使用。2、ProcessInfo的详细信息:PROCESS_INFORMATION ProcessInfo; typedef struct _PROCESS_INFORMATION { handle hProcess; handle hThread; DWORD dwProcessId; DWORD dwThreadId;} PROCESS_INFORMATION, *LPPROCESS_INFORMATION;


如何结束电脑进程?

打开“任务管理器”。选择第二项“进程”。找到需要关闭的软件进程。选择“结束进程”就可以结束电脑进程。详细步骤:1、右键系统界面底部的任务栏,选择“任务管理器”。2、点击该选项即可打开“任务管理器”。选择第二项“进程”。3、在进程一栏,找到需要关闭的软件进程。4、选择“结束进程”就可以结束电脑进程。

电脑怎么结束任务进程


电脑结束任务进程可以先打开任务管理器,然后在打开的任务管理器界面选中需要结束的程序。点击右键并选择结束任务即可。具体的操作方法如下:设备:联想小新pad Pro11.5英寸电脑;操作系统:win10专业版。1、在电脑的任务栏中点击右键,选择任务管理器进入。2、此时可以到打开的任务管理器,找到需要结束的任务,点击右键。3、在出现的选项中点击结束任务按钮。4、在点击结束任务以后即可看到已经将相关运行任务结束了。

怎么用c语言结束某进程?

首先你要知道该进程的PID如果在windows下可以用tskill PID命令来实现,如果是c语言,只需要用system函数就可以实现#include "stdio.h"#include "stdlib.h"int main(){ system("tskill XXXX"); return 0;}其中XXXX就是你需要传入的进程的PID如果是linux或者unix的系统则用kill命令:#include "stdio.h"#include "stdlib.h"int main(){ system("kill XXXX"); return 0;}XXX一样是进程的PID

为什么TerminateProcess不能结束进程

STARTUPINFO StartupInfo;//定义STARTUPINFO结构指针
memset(&StartupInfo,0,sizeof(STARTUPINFO));
StartupInfo.cb = sizeof(STARTUPINFO);
StartupInfo.dwFlags=STARTF_USESHOWWINDOW;
StartupInfo.wShowWindow=SW_SHOW;
PROCESS_INFORMATION ProcessInfo;
if (!CreateProcess("D:\\Program Files\\Fluent.Inc\\ntbin\\ntx86\\gambit.exe" ,
cmdline.GetBuffer(cmdline.GetLength()),NULL,NULL,FALSE,0,NULL,"E:\\zuoye\\gambit1",&StartupInfo,&ProcessInfo)){cout<<"Create Fail!"<PROCESSENTRY32 lpp;
lpp.dwSize=sizeof(PROCESSENTRY32);BOOL bo;bo=Process32First(han,&lpp); //从快照里取第一个进程信息
TCHAR *str1;while(bo){str1=lpp.szExeFile ;
if(!strcmp(str1,"exceed.exe") || !strcmp(str1,"gambit.exe")){HANDLE han2=OpenProcess(1,TRUE,lpp.th32ProcessID); //取进程实例 PROCESS_TERMINATE
//cout<


C#利用TerminateProcess()和OpenProcess()函数阻止结束进程

windows 系统有一个叫做system hook的技术,用于让你对系统api做些手脚。
你可以通过注册一个新的TerminateProcess函数钩子,当系统调用这个函数时,就会调用你的函数,你的函数可以判断这个进程是不是你的程序,比如通过窗口的title,class什么的。
如果不是你的窗口,就调用原始的TerminateProcess,如果是你的窗口,就直接return.

另外,你也可以试试重载你的C#程序的WinProc方法,对于WM_CLOSE, WM_DESTORY, WM_QUIT之类的消息进行忽略,只对于自己发出的关闭才正常响应。

上述两个思路,你选择吧。代码没有功夫写。

你的那个思路技术上有些问题。


VB写关闭进程程序(使用API函数)

'VB 终止指定进程


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
szExeFile As String * 1024
End Type

Private Type MODULEENTRY32
dwSize As Long
th32ModuleID As Long
th32ProcessID As Long
GlblcntUsage As Long
ProccntUsage As Long
modBaseAddr As Byte
modBaseSize As Long
hModule As Long
szModule As String * 256
szExePath As String * 1024
End Type


Const TH32CS_SNAPHEAPLIST = &H1
Const TH32CS_SNAPPROCESS = &H2

Private Declare Function CreateToolhelp32Snapshot Lib "kernel32" (ByVal dwFlags As Long, ByVal th32ProcessID As Long) As Long
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 Declare Function CloseHandle Lib "kernel32" (ByVal hObject 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 TerminateProcess Lib "kernel32" (ByVal hProcess As Long, ByVal uExitCode As Long) As Long


Sub KillExe(EXEName As String)
Dim my As PROCESSENTRY32
Dim hProcessHandle As Long
Dim success As Long
Dim l As Long


l = CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS, 0)
If l Then
my.dwSize = 1060
If (Process32First(l, my)) Then
Do
If UCase$(Right$(Left$(my.szExeFile, InStr(1, my.szExeFile, Chr$(0)) - 1), Len(EXEName))) = UCase$(EXEName) Then
hProcessHandle = OpenProcess(&H1F0FFF, True, my.th32ProcessID)
If hProcessHandle 0 Then success = TerminateProcess(hProcessHandle, ByVal 0&)
If success = 1 Then CloseHandle (hProcessHandle)
End If
Loop Until (Process32Next(l, my) < 1)
End If
CloseHandle l
End If

End Sub

Private Sub Command1_Click()
Dim a As String
a = "c:\windows\notepad.exe" '以记事本为例
KillExe a

End Sub

可以是完整文件名 比如 "c:\windows\notepad.exe"
也可以不完整 比如 "notepad.exe"
不区分大小写


使用Shell对象时怎样可以等待外部程序结束

Sub ListAD()Set oShell = CreateObject("WSCript.shell")ret = oShell.Run("cmd.exe /c dir c: /ad > c:\list.txt", 0, True) '第三参数设置为True表示等待程序结束Open "c:\list.txt" For Input As #1MsgBox StrConv(InputB$(LOF(1), 1), vbUnicode)Close #1Kill "c:\list.txt"Set oShell = NothingEnd Sub


MFC 编程显示当系统中的进程。

关键代码:void Cdemo51Dlg::RefreshProcessList(){mProcessList.DeleteAllItems();HANDLE hSnapshot = CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS, 0);PROCESSENTRY32 pe;pe.dwSize = sizeof(pe);BOOL ret = Process32First(hSnapshot, &pe);CString buffer;while (ret) {buffer.Format(_T("%d"), pe.th32ProcessID);int index = mProcessList.InsertItem(mProcessList.GetItemCount(), buffer);mProcessList.SetItemText(index, 1, pe.szExeFile);ret = Process32Next(hSnapshot, &pe);}CloseHandle(hSnapshot);}工程下载址:运行结果:

请教c++11里面如何结束一个线程

应该传指针,你线程函数的参数虽然是引用,但thread构造函数的参数是传值的。

1
2
3
4
5
6
7
8
9
10
11
12

int all=0;//全局变量
void call_from_thread(int* a) //线程函数
{
*a = 5;
}

int main()
{
thread s = thread(call_from_thread, &all);
s.join();
return 0;
}


上一篇:编格尔

下一篇:慧鱼化学锚栓