void CProcessDlg::OnTerminateProcess() { DWORD ProcessId; LPSTR serverName = g_pDoc->GetServerName(); HANDLE serverHandle = WTSOpenServer(serverName); CString tempName; int temp; PWTS_PROCESS_INFO pProcess = pProcessInfo; temp = m_processList.GetCurSel(); m_processList.GetText(temp, tempName); for (DWORD i=0; i < count; i++) { if (tempName == (pProcess->pProcessName)) { ProcessId = pProcess->ProcessId; if (!WTSTerminateProcess(serverHandle,ProcessId,0x0)) AfxMessageBox("Unable to terminate process"); i = count; } pProcess++; } Refresh(); }
// @pymethod |win32ts|WTSTerminateProcess|Kills a process on a terminal server static PyObject *PyWTSTerminateProcess(PyObject *self, PyObject *args, PyObject *kwargs) { static char *keywords[]={"Server", "ProcessId", "ExitCode", NULL}; PyObject *obh; HANDLE h; DWORD ProcessId, ExitCode; if (!PyArg_ParseTupleAndKeywords(args, kwargs, "Okk:WTSTerminateProcess", keywords, &obh, // @pyparm <o PyHANDLE>|Server||Handle to a terminal server &ProcessId, // @pyparm int|ProcessId||Id of a process as returned by <om win32ts.WTSEnumerateProcesses> &ExitCode)) // @pyparm int|ExitCode||Exit code for the process return NULL; if (!PyWinObject_AsHANDLE(obh, &h)) return NULL; if (!WTSTerminateProcess(h, ProcessId, ExitCode)) return PyWin_SetAPIError("WTSTerminateProcess"); Py_INCREF(Py_None); return Py_None; }