FreeBasic
Главная
Вход
Регистрация
Пятница, 29.03.2024, 03:16Приветствую Вас Гость | RSS
[ Новые сообщения · Участники · Правила форума · Поиск · RSS ]
  • Страница 1 из 1
  • 1
Форум » Freebasic » Исходники » убиваем процесс (Принудительное завершение процесса при помощи WinApi)
убиваем процесс
electrikДата: Понедельник, 08.07.2013, 01:14 | Сообщение # 1
Полковник
Группа: Друзья
Сообщений: 180
Репутация: 3
Статус: Offline
Код
#include "windows.bi"
#include "win/tlhelp32.bi"
#define TOKEN_QUERY_TOKEN_ADJUST_PRIVILEGES &h20
dim as TOKEN_PRIVILEGES Privileges  
dim as LUID   pLocalId
dim as handle phToken
dim as handle hSnapshot
dim as PROCESSENTRY32 prcs  
dim as zstring * 12 PrcList = "notepad.exe"
dim as zstring * 17 Privilege = "SeDebugPrivilege"

OpenProcessToken(GetCurrentProcess(),TOKEN_QUERY_TOKEN_ADJUST_PRIVILEGES,@phToken)
LookupPrivilegeValue(0,Privilege ,@pLocalId)
privileges.PrivilegeCount = 1
         Privileges.Privileges(0).Attributes = 2
AdjustTokenPrivileges(@phToken,0,@privileges,0,0,0)
prcs.dwSize = sizeof(PROCESSENTRY32)
hSnapshot = CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS, 0)
Process32First(hSnapshot,@prcs)
do
if(inStr(prcs.szExeFile, PrcList)) then
TerminateProcess(OpenProcess(PROCESS_TERMINATE,0,prcs.th32ProcessID),0)
print "process is killed"
end if
loop while Process32Next(hSnapshot,@prcs)


следующий  пример убивает процесс по его классу окна

Код
#include "windows.bi"
dim hProc as HANDLE
dim procId as dword
dim ErrId as dword
Dim MyError as zstring * 1024
GetWindowThreadProcessId (FindWindow ("Notepad", 0),@procId)
hProc = OpenProcess(PROCESS_TERMINATE, FALSE, procId)
If hProc then
if TerminateProcess(hProc, -1) then
MessageBox (0, "Процесс  успешно убит.", "prockill", MB_OK or MB_TASKMODAL)
Else
ErrId = GetLastError()
FormatMessage(FORMAT_MESSAGE_FROM_SYSTEM,0,ErrId,0,MyError,1023,0)
MessageBox (0, "Не удалось убить процесс: "+MyError+".", "prockill Ошибка", MB_OK or MB_TASKMODAL)
End If
Else
MessageBox (0, "Не удалось убить процесс: Процессы не обнаружены.", "prockill Ошибка", MB_OK or MB_TASKMODAL)
End If




Сообщение отредактировал electrik - Понедельник, 08.07.2013, 01:40
 
haavДата: Понедельник, 08.07.2013, 05:53 | Сообщение # 2
Генералиссимус
Группа: Администраторы
Сообщений: 1361
Репутация: 49
Статус: Offline
Отличные примеры, сегодня же выложу их на основном сайте.

Вы сохраняете власть над людьми покуда оставляете им что-то…Отберите у человека все, и этот человек уже будет неподвластен вам…
 
electrikДата: Среда, 10.07.2013, 16:30 | Сообщение # 3
Полковник
Группа: Друзья
Сообщений: 180
Репутация: 3
Статус: Offline
этот пример закрывает процесс корректно, так, как бы вы нажали кнопку закрыть. помните, что TerminateProcess, далеко не всегда освобождает ресурсы захваченные процессом, и лучше завершать приложения ниже приведенным способом.

Код
#INCLUDE "windows.bi"

declare function EnumWindowsProc(byval hwnd as HWND,byval lParam as LPARAM) as BOOL

         dim hProcess as HANDLE
Dim procId As dword

GetWindowThreadProcessId (FindWindow ("Notepad", 0),@procId)
if procId then
print "found process notepad"
else
print "process notepad not found"
sleep
end
end if

hProcess = OpenProcess(SYNCHRONIZE,FALSE,procId)
         EnumWindows(@EnumWindowsProc, procId)
if hProcess then
WaitForSingleObject(hProcess,INFINITE)
print "process notepad is closed"
CloseHandle(hProcess)
end if
sleep

function EnumWindowsProc(byval hwnd as HWND,byval lParam as LPARAM) as BOOL
Dim procId As dword
GetWindowThreadProcessId(hWnd, @procId)
if (IsWindowVisible(hWnd) and procId = lParam) then
PostMessage(hWnd, WM_CLOSE, 0, 0)
end if
function = TRUE
end function
 
Форум » Freebasic » Исходники » убиваем процесс (Принудительное завершение процесса при помощи WinApi)
  • Страница 1 из 1
  • 1
Поиск: