Воскресенье
02.02.2025
16:56
Форма входа
Поиск
Друзья сайта
  • Официальный блог
  • Сообщество uCoz
  • FAQ по системе
  • Инструкции для uCoz
  • Статистика

    OPEN SOURCE PROJECT

    [ Новые сообщения · Участники · Правила форума · Поиск · RSS ]
    • Страница 1 из 1
    • 1
    Завершение процесса
    andXreiДата: Пятница, 17.04.2009, 14:32 | Сообщение # 1
    Майор
    Группа: Проверенные
    Сообщений: 95
    Репутация: 2
    Статус: Offline
    Как можно завершить принудительно процесс??
    есть такие Api функции??
     
    fasmДата: Пятница, 17.04.2009, 19:10 | Сообщение # 2
    Admin
    Группа: Заблокированные
    Сообщений: 122
    Репутация: 5
    Статус: Offline
    Code

    Function getProcessId(Exename:string):Dword;
    var snap:DWORD;
    pe:TprocessEntry32;
    begin
    result:=0;
    snap:=CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS,0);
    if snap <>INVALID_HANDLE_VALUE then begin
    pe.dwSize:=sizeof(TPROCESSENTRY32);
    if process32First(snap,pe) then
    repeat
    if  pe.szExeFile=exename then begin
    result:=pe.th32ProcessID;
    closehandle(snap);
    exit;
    end;
    until  not process32Next(snap,pe);
    closehandle(snap);
    result:=0;
    end;
    end;

    function TerminateProcess(id:integer):boolean;
    var  hprocess:Thandle;
    begin
    hprocess:=OpenProcess(PROCESS_TERMINATE,false,id);
    if (hprocess=0) then begin
    result:=false;
    exit;
    end;
    result:=windows.TerminateProcess(hprocess,0);
    closehandle(hprocess);
    if not result then exit;
    result:=True;
    end;
    Сможешь перевести на fasm?
     
    andXreiДата: Пятница, 17.04.2009, 21:50 | Сообщение # 3
    Майор
    Группа: Проверенные
    Сообщений: 95
    Репутация: 2
    Статус: Offline
    Quote (fasm)
    Сможешь перевести на fasm?

    Попробую

    Добавлено (17.04.2009, 21:47)
    ---------------------------------------------
    Доступно только для пользователей

    Добавлено (17.04.2009, 21:50)
    ---------------------------------------------
    А так можно
    Этот исходник у меня что то не работает!
    Проверте мож что нибудь упустил или не так написал??

     
    At0mДата: Пятница, 17.04.2009, 23:02 | Сообщение # 4
    Рядовой
    Группа: Пользователи
    Сообщений: 3
    Репутация: 1
    Статус: Offline
    Quote
    invoke GetModuleHandle,lpModuleName,0
    invoke SendMessage,eax,WM_CLOSE,0,0

    Если хочешь закрыть окно, то тебе нужен хэндл этого окна, а не модуля. Получить его можно через FindWindow.

    Code
    include 'win32ax.inc'
    ;пример для MINIPAD
    .data
    pWinName db 'MiniPad',0 ;заголовок окна
    ;pClassName db 'MINIPAD32',0 ;класс окна

    .code
    start:
    invoke FindWindow,0,pWinName
    invoke SendMessage,eax,WM_CLOSE,0,0
    invoke ExitProcess,0
    .end start


    Сообщение отредактировал At0m - Пятница, 17.04.2009, 23:03
     
    fasmДата: Суббота, 18.04.2009, 10:44 | Сообщение # 5
    Admin
    Группа: Заблокированные
    Сообщений: 122
    Репутация: 5
    Статус: Offline
    Функция GetModuleHandle извлекает дескриптор указанного модуля, если файл был отображен в адресном пространстве вызывающего процесса. Т.е. хендлы dll и т.п. чего подгружает своя программа...

    Вот что у меня получилось:

    Code

    include '%fasminc%\win32ax.inc'

    struct PROCESSENTRY32
       dwSize                dd ?
       cntUsage              dd ?
       th32ProcessID         dd ?
       th32DefaultHeapID     dd ?
       th32ModuleID          dd ?
       cntThreads            dd ?
       th32ParentProcessID   dd ?
       pcPriClassBase        dd ?
       dwFlags               dd ?
       szExeFile             dd ?
       th32MemoryBase        dd ?
       th32AccessKey         dd ?
    ends

       TH32CS_SNAPHEAPLIST = $00000001;
       TH32CS_SNAPPROCESS  = $00000002;
       TH32CS_SNAPTHREAD   = $00000004;
       TH32CS_SNAPMODULE   = $00000008;
       TH32CS_SNAPALL      = TH32CS_SNAPHEAPLIST or TH32CS_SNAPPROCESS or TH32CS_SNAPTHREAD or TH32CS_SNAPMODULE;
       TH32CS_INHERIT      = $80000000;

    .data
             szFileExe       db 'Notepad.exe'

    .code

       start:
             stdcall GetProcessId, szFileExe
             or      eax, eax
             jz      close
             stdcall TerminateApplication, eax
       close:
             invoke  ExitProcess,0

    proc GetProcessId, FileName
          locals
             snap    dd ?
             pe      PROCESSENTRY32
          endl
             int3
             mov    [pe.dwSize], sizeof.PROCESSENTRY32

             invoke CreateToolhelp32Snapshot, TH32CS_SNAPPROCESS, 0
             mov    [snap], eax
             inc    eax
             or     eax, eax
             je    .error_snap

             lea    esi, [pe]
             invoke Process32First, [snap], esi
             or     eax, eax
             jz     .error_snap

           .loop_find:
             lea    esi, [pe]
             invoke Process32Next, [snap], esi
             or     eax, eax
             jz     .error_snap
             invoke lstrcmp, [pe.szExeFile], [FileName]
             or     eax, eax
             je    .end_find
           .end_find:
             invoke CloseHandle, [snap]
             mov    eax, [pe.th32ProcessID]
             ret
           .error_snap:
             xor    eax, eax
             ret
    endp

    proc TerminateApplication, id
          local hprocess:DWORD

             invoke  OpenProcess, PROCESS_TERMINATE, FALSE, [id]
    ;        mov     [hprocess], eax
             invoke  TerminateProcess, eax, 0
             ret
    endp  
     
    andXreiДата: Понедельник, 20.04.2009, 14:09 | Сообщение # 6
    Майор
    Группа: Проверенные
    Сообщений: 95
    Репутация: 2
    Статус: Offline
    А как можно получить хэндл дочерного окна??
     
    fasmДата: Понедельник, 20.04.2009, 18:17 | Сообщение # 7
    Admin
    Группа: Заблокированные
    Сообщений: 122
    Репутация: 5
    Статус: Offline
    http://social.msdn.microsoft.com/Search....20&ac=8
     
    • Страница 1 из 1
    • 1
    Поиск: