Что нового

[Элементы GUI] Как показать процент выполнения

FullZero

Новичок
Сообщения
8
Репутация
0
Есть переменные $x = 0 и $y = 100, на +1 должно увеличиваться каждую секунду
Не могу понять как их вывести в
Код:
$Progress1 = GUICtrlCreateProgress(16, 16, 150, 17)

Знаю что есть GUICtrlSetData которая может указать данные у GUICtrlCreateProgress
Только не могу понять как всё это вывести. Расскажите по подробнее, всё что нашёл было не тем или непонятным мне.
 

XpycT

Скриптер
Сообщения
380
Репутация
133
Код:
For $i = 1 To 100
	Sleep(1000)
	GUICtrlSetData($Progress1, $i)
Next
 
Автор
F

FullZero

Новичок
Сообщения
8
Репутация
0
Отлично, можно многое что вывести в прогресс :smile:

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

Код:
#include <GUIConstantsEx.au3>
#include <ProgressConstants.au3>
#include <WindowsConstants.au3>
#Region ### START Koda GUI section ### Form=
$Form1 = GUICreate("Form1", 172, 34, 192, 124)
$Progress1 = GUICtrlCreateProgress(8, 8, 150, 17)
GUISetState(@SW_SHOW)
#EndRegion ### END Koda GUI section ###

#include <NomadMemory.au3>
$memory = _MemoryOpen (ProcessExists("ent.exe")) ; Открываем память процесса
$HPmax = 0x10E26B94				; Максимальное ХП
$HP = 0x10E26B4C				; Текущее ХП
$result1 = _MemoryRead($HPmax, $memory)		; Читаем  память (переменную) в которой находятся значения по указателю
$result2 = _MemoryRead($HP, $memory)		; Читаем  память (переменную) в которой находятся значения по указателю

$Progress = round($HP * 100 / $HPmax);  //Присваиваем процентное значение ХП
While 1
	GUICtrlSetData($Progress1, $Progress)
WEnd
 

joiner

Модератор
Локальный модератор
Сообщения
3,556
Репутация
628
может так? я правда не уверен

Код:
#include <GUIConstantsEx.au3>
#include <ProgressConstants.au3>
#include <WindowsConstants.au3>
#include <NomadMemory.au3>
Global $Progress, $Progress1
AdlibRegister('_progress', 500)

$Form1 = GUICreate("Form1", 172, 34, 192, 124)
$Progress1 = GUICtrlCreateProgress(8, 8, 150, 17)
GUISetState(@SW_SHOW)

While 1
	$nMsg = GUIGetMsg()
	Switch $nMsg
		Case $GUI_EVENT_CLOSE
			Exit
	EndSwitch
	GUICtrlSetData($Progress1, $Progress)
WEnd

Func _progress()
	$memory = _MemoryOpen(ProcessExists("rundll32.exe")) ; Открываем память процесса
	$HPmax = 0x10E26B94 ; Максимальное ХП
	$HP = 0x10E26B4C ; Текущее ХП
	$result1 = _MemoryRead($HPmax, $memory) ; Читаем  память (переменную) в которой находятся значения по указателю
	$result2 = _MemoryRead($HP, $memory) ; Читаем  память (переменную) в которой находятся значения по указателю
	$Progress = Round($HP * 100 / $HPmax);  //Присваиваем процентное значение ХП
	GUICtrlSetData($Progress1, '')
EndFunc   ;==>_progrss
 
Автор
F

FullZero

Новичок
Сообщения
8
Репутация
0
Александр спасибо, не помогло но дошло как правильно написать. :smile:
Я ещё допустил ошибку в переменной $Progress, поставил ХП а надо было $result1 и $result2 полученные из памяти игры.

Вот что вышло, переставил немного местами код
Код:
#include <GUIConstantsEx.au3>
#include <ProgressConstants.au3>
#include <WindowsConstants.au3>
#Region ### START Koda GUI section ### Form=
$Form1 = GUICreate("Form1", 172, 34, 192, 124)
$Progress1 = GUICtrlCreateProgress(8, 8, 150, 17)
GUISetState(@SW_SHOW)
#EndRegion ### END Koda GUI section ###

#include <NomadMemory.au3>

While 1
    $nMsg = GUIGetMsg()
    Switch $nMsg
        Case $GUI_EVENT_CLOSE
            Exit
    EndSwitch
    $memory = _MemoryOpen(ProcessExists("ent.exe")) ; Открываем память процесса
    $HPmax = 0x18E8D97C ; Максимальное ХП
    $HP = 0x18E8D934 ; Текущее ХП
    $result1 = _MemoryRead($HPmax, $memory) ; Читаем  память (переменную) в которой находятся значения по указателю
    $result2 = _MemoryRead($HP, $memory) ; Читаем  память (переменную) в которой находятся значения по указателю
    $Progress = Round($result2 * 100 / $result1);  //Присваиваем процентное значение ХП
    GUICtrlSetData($Progress1, $Progress)
WEnd


И снова возник вопрос, добавил Sleep(500) но теперь окошко не закрывается. Вопросик: Почему? :-\
 

joiner

Модератор
Локальный модератор
Сообщения
3,556
Репутация
628
FullZero
ну у тебя и прогресс не работает в этом коде..в данной конструкции не нужно добавлять остановку скрипта..
выведи строки чтения памяти в функцию, как я тебе показал перед этим и там поставь остановку на нужное время..
и если пишешь что не сработало, то что именно. я делал запись в консоль, пишет значения
 
Верх