Что нового

Заморозка процесса

BiG_BoY

Новичок
Сообщения
51
Репутация
1
Всем привет.
Как можно заморозить процесс через автоит?
Надо чтобы при нажатии на определённую кнопку процесс замораживался, при повторном нажатии - процесс размораживался.
Например под кнопку
Код:
#include <ButtonConstants.au3>
#include <GUIConstantsEx.au3>
#include <WindowsConstants.au3>
#Region ### START Koda GUI section ### Form=
$Form1 = GUICreate("Form1", 208, 154, 192, 124)
$Button1 = GUICtrlCreateButton("Заморозить\разморозить", 24, 40, 155, 73)
GUISetState(@SW_SHOW)
#EndRegion ### END Koda GUI section ###

While 1
	$nMsg = GUIGetMsg()
	Switch $nMsg
		Case $GUI_EVENT_CLOSE
			Exit
        Case $Button1

	EndSwitch
WEnd
 

kaster

Мой Аватар, он лучший самый
Команда форума
Глобальный модератор
Сообщения
4,020
Репутация
626
Re: Заморозака процесса

привет. ходят слухи, что ты теперь форумный авторитет ;D
1. исправь орфографические ошибки в теме и теле сообщения
2. убери ненужную транслитерацию в соответствие с правилами
3. воспользуйся поиском. такая тема уже была. хотя бы вот эта http://autoit-script.ru/index.php?topic=3133.0
 
Автор
B

BiG_BoY

Новичок
Сообщения
51
Репутация
1
Re: Заморозака процесса

Kaster сказал(а):
привет. ходят слухи, что ты теперь форумный авторитет ;D
1. исправь орфографические ошибки в теме и теле сообщения
2. убери ненужную транслитерацию в соответствие с правилами
3. воспользуйся поиском. такая тема уже была. хотя бы вот эта http://autoit-script.ru/index.php?topic=3133.0
Почему это я форумный авторитет?
Вроде ошибок уже нет) Что это транслитерация?
По теме, которую ты мне дал у меня не получается(когда не замораживается, когда не размораживается)
 

Yashied

Модератор
Команда форума
Глобальный модератор
Сообщения
5,379
Репутация
2,724
Re: Заморозака процесса

Во-первых, не нужно выделять текст "жирным", а во-вторых, если это твой собственный процесс, то логичнее предусмотреть "заморозку-разморозку" в самом коде. Выложи полностью свой код или ту часть, котрую необходимо "заморозить".
 

kaster

Мой Аватар, он лучший самый
Команда форума
Глобальный модератор
Сообщения
4,020
Репутация
626
Автор
B

BiG_BoY

Новичок
Сообщения
51
Репутация
1
Прочитал ещё раз тему, не получилось вставить под кнопку.
 

Yuri

AutoIT Гуру
Сообщения
737
Репутация
282
Может эта тема сможет помочь:
http://autoit-script.ru/index.php?topic=4288.msg30953#msg30953
Заморозить - это типа так, как в примере?
Код:
#include <ButtonConstants.au3>
#include <GUIConstantsEx.au3>
#include <WindowsConstants.au3>
#Region ### START Koda GUI section ### Form=
$Form1 = GUICreate("Form1", 208, 154, 192, 124)
$Button1 = GUICtrlCreateButton("Заморозить\разморозить", 24, 40, 155, 73)
GUISetState(@SW_SHOW)
#EndRegion ### END Koda GUI section ###

While 1
    $nMsg = GUIGetMsg()
    Switch $nMsg
        Case $GUI_EVENT_CLOSE
            Exit
        Case $Button1
		$hWND = WinGetHandle ($Form1) ;получили в переменную $hWND специальное уникальное значение (хэндл) нашей формы
		WinSetState ($hWND, "", @SW_DISABLE) ;установили нашему окну с ЭТИМ хендлом состояние - ОТКЛЮЧИТЬ (типа заблокировать)
		Sleep(9000) ; и через 9 секунд
		Exit ; выход через 9 секунд
    EndSwitch
WEnd
 
Автор
B

BiG_BoY

Новичок
Сообщения
51
Репутация
1
Нет ты не так понял мне надо этот скрипт вбить под кнопку. И если можно покажи на примере блакнота.
Вот скрипт
Код:
Func _ProcSuspendResume($process)
    $processid = ProcessExists($process)
    If $processid Then
        If $fSuspended Then
            $ai_Handle = DllCall("kernel32.dll", 'int', 'OpenProcess', 'int', 0x1f0fff, 'int', False, 'int', $processid)
            $i_sucess = DllCall("ntdll.dll","int","NtResumeProcess","int",$ai_Handle[0])
            DllCall('kernel32.dll', 'ptr', 'CloseHandle', 'ptr', $ai_Handle)
            If IsArray($i_sucess) Then 
                $fSuspended = 0
                Return 1
            Else
                SetError(1)
                Return 0
            Endif
        Else
            $ai_Handle = DllCall("kernel32.dll", 'int', 'OpenProcess', 'int', 0x1f0fff, 'int', False, 'int', $processid)
            $i_sucess = DllCall("ntdll.dll","int","NtSuspendProcess","int",$ai_Handle[0])
            DllCall('kernel32.dll', 'ptr', 'CloseHandle', 'ptr', $ai_Handle)
            If IsArray($i_sucess) Then 
                $fSuspended = 1
                Return 1
            Else
                SetError(1)
                Return 0
            Endif
        EndIf
    Else
        SetError(2)
        Return 0
    Endif
EndFunc

Global $fSuspended = 0

За старание спасибо.
 

Yashied

Модератор
Команда форума
Глобальный модератор
Сообщения
5,379
Репутация
2,724
Если процесс сам себя "заморозит", то как потом он сможет "разморозиться"?

:smile:

И потом, для работы этого кода нужны права администратора.
 

Yuri

AutoIT Гуру
Сообщения
737
Репутация
282
При нажатии кнопки - капец.
Так?
Код:
#include <ButtonConstants.au3>
#include <GUIConstantsEx.au3>
#include <WindowsConstants.au3>
#Region ### START Koda GUI section ### Form=
$Form1 = GUICreate("Form1", 208, 154, 192, 124)
$Button1 = GUICtrlCreateButton("Заморозить\разморозить", 24, 40, 155, 73)
GUISetState(@SW_SHOW)
#EndRegion ### END Koda GUI section ###

While 1
    $nMsg = GUIGetMsg()
    Switch $nMsg
        Case $GUI_EVENT_CLOSE
            Exit
        Case $Button1
        Ice()
    EndSwitch
WEnd

Func Ice()
$hWND = WinGetHandle ($Form1) ;получили в переменную $hWND специальное уникальное значение (хэндл) нашей формы
WinSetState ($hWND, "", @SW_DISABLE) ;установили нашему окну с ЭТИМ хендлом состояние - ОТКЛЮЧИТЬ (типа заблокировать)
EndFunc
 

Yuri

AutoIT Гуру
Сообщения
737
Репутация
282
Пример с Блокнотом.
Код:
#include <ButtonConstants.au3>
#include <GUIConstantsEx.au3>
#include <WindowsConstants.au3>
#Region ### START Koda GUI section ### Form=
$Form1 = GUICreate("Form1", 482, 65, 192, 124)
$Button1 = GUICtrlCreateButton("Старт Блокнота", 8, 16, 129, 33)
$Button2 = GUICtrlCreateButton("Морозим Блокнот", 144, 16, 129, 33)
$Button3 = GUICtrlCreateButton("Убиваем все процессы Блокнотов", 280, 16, 193, 33)
GUISetState(@SW_SHOW)
#EndRegion ### END Koda GUI section ###

While 1
	$nMsg = GUIGetMsg()
	Switch $nMsg
	Case $GUI_EVENT_CLOSE
			KillProc()
			Exit		
		Case $Button1
			Run("notepad.exe") ;запустим Блкнот
		Case $Button2
			If WinExists ("[Class:Notepad]") Then ;проверяем - ЕСЛИ наличие окна Блокнот по имени класса окна (класс этого окна узнали из программы AutoIt Window Info - это Notepad) есть, ТОГДА
				$hWND = WinGetHandle ("[Class:Notepad]") ;получили в переменную $hWND специальное уникальное значение (хэндл) Блокнота			
				WinSetState ($hWND, "", @SW_DISABLE) ;установили нашему окну (Блокноту) с ЭТИМ хендлом состояние - ОТКЛЮЧИТЬ (типа заблокировать)		
				WinSetState ($hWND, "", @SW_RESTORE) ; и еще ставим Блокнот в положение ОТКРЫТОГО
			EndIf
		Case $Button3
			KillProc()			 
	EndSwitch
WEnd

Func KillProc()
If ProcessExists("notepad.exe") Then
	Run("taskkill /f /im notepad.exe", "", @SW_HIDE)
EndIf
EndFunc
 
Автор
B

BiG_BoY

Новичок
Сообщения
51
Репутация
1
Вставьте кто-нибудь этот скрипт под кнопку(она в первом сообщении)

Код:
Func _ProcSuspendResume($process)
    $processid = ProcessExists($process)
    If $processid Then
        If $fSuspended Then
            $ai_Handle = DllCall("kernel32.dll", 'int', 'OpenProcess', 'int', 0x1f0fff, 'int', False, 'int', $processid)
            $i_sucess = DllCall("ntdll.dll","int","NtResumeProcess","int",$ai_Handle[0])
            DllCall('kernel32.dll', 'ptr', 'CloseHandle', 'ptr', $ai_Handle)
            If IsArray($i_sucess) Then 
                $fSuspended = 0
                Return 1
            Else
                SetError(1)
                Return 0
            Endif
        Else
            $ai_Handle = DllCall("kernel32.dll", 'int', 'OpenProcess', 'int', 0x1f0fff, 'int', False, 'int', $processid)
            $i_sucess = DllCall("ntdll.dll","int","NtSuspendProcess","int",$ai_Handle[0])
            DllCall('kernel32.dll', 'ptr', 'CloseHandle', 'ptr', $ai_Handle)
            If IsArray($i_sucess) Then 
                $fSuspended = 1
                Return 1
            Else
                SetError(1)
                Return 0
            Endif
        EndIf
    Else
        SetError(2)
        Return 0
    Endif
EndFunc

Global $fSuspended = 0
 

joiner

Модератор
Локальный модератор
Сообщения
3,556
Репутация
628
вобщем работает..окно блокнота становится недоступным. при повторном нажатии "размораживается" :smile:
Код:
#include <ButtonConstants.au3>
#include <GUIConstantsEx.au3>
#include <WindowsConstants.au3>
Global $process="notepad.exe",$fSuspended
#Region ### START Koda GUI section ### Form=
$Form1 = GUICreate("Form1", 208, 154, 192, 124)
$Button1 = GUICtrlCreateButton("Заморозить\разморозить", 24, 40, 155, 73)
GUISetState(@SW_SHOW)
#EndRegion ### END Koda GUI section ###

While 1
    $nMsg = GUIGetMsg()
    Switch $nMsg
        Case $GUI_EVENT_CLOSE
            Exit
        Case $Button1
_ProcSuspendResume($process)
    EndSwitch
WEnd
 Func _ProcSuspendResume($process)
    $processid = ProcessExists($process)
    If $processid Then
        If $fSuspended Then
            $ai_Handle = DllCall("kernel32.dll", 'int', 'OpenProcess', 'int', 0x1f0fff, 'int', False, 'int', $processid)
            $i_sucess = DllCall("ntdll.dll","int","NtResumeProcess","int",$ai_Handle[0])
            DllCall('kernel32.dll', 'ptr', 'CloseHandle', 'ptr', $ai_Handle)
            If IsArray($i_sucess) Then
                $fSuspended = 0
                Return 1
            Else
                SetError(1)
                Return 0
            Endif
        Else
            $ai_Handle = DllCall("kernel32.dll", 'int', 'OpenProcess', 'int', 0x1f0fff, 'int', False, 'int', $processid)
            $i_sucess = DllCall("ntdll.dll","int","NtSuspendProcess","int",$ai_Handle[0])
            DllCall('kernel32.dll', 'ptr', 'CloseHandle', 'ptr', $ai_Handle)
            If IsArray($i_sucess) Then
                $fSuspended = 1
                Return 1
            Else
                SetError(1)
                Return 0
            Endif
        EndIf
    Else
        SetError(2)
        Return 0
    Endif
EndFunc

Global $fSuspended = 0
 

VladUs

Скриптер
Сообщения
621
Репутация
181
_CoProc([$sFunction],[$vParameter]) Starts another Process and Calls $sFunc, Returns PID
_SuperGlobalSet($sName,[$vValue],[$sRegistryBase]) Sets or Deletes a Superglobal Variable
_SuperGlobalGet($sName,[$fOption],[$sRegistryBase]) Returns the Value of a Superglobal Variable
_ProcSuspend($vProcess) Suspends all Threads in $vProcess (PID or Name)
_ProcResume($vProcess) Resumes all Threads in $vProcess (PID or Name)
_ProcessGetWinList($vProcess, $sTitle = Default, $iOption = 0) Enumerates Windows of a Process
_CoProcReciver([$sFunction = ""]) Register/Unregister Reciver Function
_CoProcSend($vProcess, $vParameter,[$iTimeout = 500],[$fAbortIfHung = True]) Send Message to Process
_ConsoleForward($iPid1, [$iPid2], [$iPid3], [$iPidn])
_ProcessEmptyWorkingSet($vPid = @AutoItPID,[$hDll_psapi],[$hDll_kernel32]) Removes as many pages as possible from the working set of the specified process.
_DuplicateHandle($dwSourcePid, $hSourceHandle, $dwTargetPid = @AutoItPID, $fCloseSource = False) Returns a Duplicate handle
_CloseHandle($hAny) Close a Handle

http://www.autoitscript.com/forum/topic/29326-another-multi-process-helper/page__hl__openthread
 
Автор
B

BiG_BoY

Новичок
Сообщения
51
Репутация
1
Александр [?]
вобщем работает..окно блокнота становится недоступным. при повторном нажатии "размораживается"
smiley.gif
А если мне надо для другого процесса?
 

VladUs

Скриптер
Сообщения
621
Репутация
181
А если мне надо для другого процесса?

У Александра очень хороший пример и ссылку я тебе дал не просто так.

Код:
#include <CoProc.au3> 
#Include <WinAPI.au3>
GUICreate ("myform")
$Combo=GUICtrlCreateCombo ( "", 0, 10  )
$ButSusp = GUICtrlCreateButton("Suspend",220,10,150,30)
$ButResume = GUICtrlCreateButton("Resume",220,45,150,30)
GUISetState(@SW_SHOW)


$pid = ProcessList()
FOR $i=1 to UBound($pid)-1
	GUICtrlSetData($Combo, $pid[$i][0])
next

While GUIGetMsg() <> $GUI_EVENT_CLOSE
$msg = GUIGetMsg()
$hpid = GUICtrlRead($Combo)
$pidname = ProcessList($hpid)
$hpidid  = $pidname[1][1]

Select
case $msg = $ButSusp
	_ProcSuspend ($hpidid )
	;MsgBox(1,"",$hpidid)
case $msg = $ButResume
	_ProcResume($hpidid )
EndSelect
wend


Прикрепленный файл в "C:\Program Files\AutoIt3\Include"
 

seriousstas

Новичок
Сообщения
32
Репутация
0
Как реализовать это после сна ?:
Код:
#NoTrayIcon
#RequireAdmin
#pragma compile(Icon, "C:\Program Files (x86)\AutoIt3\Icons\au3script_v9.ico")
#Region ;**** Directives created by AutoIt3Wrapper_GUI ****
#AutoIt3Wrapper_Compression=4
#AutoIt3Wrapper_UseUpx=y
#AutoIt3Wrapper_Run_AU3Check=n
#EndRegion ;**** Directives created by AutoIt3Wrapper_GUI ****
#include <WindowsConstants.au3>
#include<Process.au3>
; Это команда на сон
Global $PBT_APMSUSPEND = 0x0004
Global $PBT_APMRESUMESUSPEND = 0x0007

$hGUI = GUICreate("Restart", 100, 100, 1, 1)
GUIRegisterMsg($WM_POWERBROADCAST, "Standby")

Func Standby($hWnd, $Msg, $wParam, $lParam)
    Select
        ; Вход в спящий режим
        Case $wParam = $PBT_APMSUSPEND
            Suspend()
        ; Выход из спящего режима
        Case $wParam = $PBT_APMRESUMESUSPEND
            ResumeSuspend()
        Case Else
    EndSelect
EndFunc

; Вход в спящий режим
Func Suspend()

; ЗАМОРОЗИТЬ БЛОКНОТ

EndFunc

; Выход из спящего режима
Func ResumeSuspend();
; РАЗМОРОЗИТЬ БЛОКНОТ

EndFunc

EndFunc
 

Garrett

Модератор
Локальный модератор
Сообщения
3,999
Репутация
967
seriousstas
Создайте новую тему. Эта тема решена.
Предупреждение За нарушение общих правил (пункт В.4):
Не лепите несколько вопросов разной тематики в один пост. По типу "Ребят, а ещё такой вопрос...". Каждый вопрос в свою тему.


С уважением, ваш Глобальный модератор.
 

seriousstas

Новичок
Сообщения
32
Репутация
0
Garrett сказал(а):
[warn]За нарушение общих правил (пункт В.4):
Не лепите несколько вопросов разной тематики в один пост. По типу "Ребят, а ещё такой вопрос...". Каждый вопрос в свою тему.


С уважением, ваш Глобальный модератор.[/warn]







ок.
Есть и правило - не плодить темы .
Вопрос был по заморозке процесса, а после сна или кнопкой - не суть !
 
Верх