Что нового

Секундомер. Подсчёт времени, которое была нажата кнопка

moose512

Новичок
Сообщения
4
Репутация
0
Версия AutoIt: 3.

Описание:
Алгоритм следующий:
Нажимаю левый CTRL - запускается первый секундомер, отпускаю левый CTRL - останавливается первый секундомер, а значение записывается в первую переменную.
Нажимаю правый CTRL - запускается второй секундомер, отпускаю правыйCTRL - останавливается второй секундомер, а значение записывается во вторую переменную.

Затем эти переменные сохранить в .csv и вывести на экран. Секундомер на экране выводить не имеет смысла, важно только время нажатия клавиш.

Помогите, пожалуйста, для приведенных ниже заготовок собрать работающий код!

Примечания:

Нашел код секундомера:

Код:
#include <Misc.au3>
#include <GUIConstantsEx.au3>
#include <WindowsConstants.au3>
Opt('GUIOnEventMode', 1)
Global $sIND = 'Stop'
Global $Pause


$hParent = GUICreate('Timer', 160, 40, -1, -1, $WS_POPUP)
GUISetState()

$hLabel = GUICtrlCreateLabel('', 2, 2, 156, 36)
GUICtrlSetFont(-1, 20, 1000)

GUISetOnEvent($GUI_EVENT_CLOSE, '_Exit')
GUISetOnEvent($GUI_EVENT_PRIMARYDOWN, '_Move')
GUISetOnEvent($GUI_EVENT_PRIMARYUP, '_Move')
GUISetOnEvent($GUI_EVENT_MOUSEMOVE, '_Move')
HotKeySet('^+p', '_TogglePause')

Global $iStart = TimerInit()
Global $IDLE = 0
While 1
    Global $iCurrent = TimerDiff($iStart) - $IDLE
	$iElapsed = Int($iCurrent)
	$iHour = Int($iElapsed/(1000*60*60))
	$iMin = Int(($iElapsed - $iHour*1000*60*60)/(1000*60))
	$iSec = Int(($iElapsed - $iHour*1000*60*60 - $iMin*1000*60)/1000)
	$iMsec = Int($iElapsed - $iHour*1000*60*60 - $iMin*1000*60 - $iSec*1000)
	$sLabel = $iHour & ":" & $iMin & ":" & $iSec & "." & $iMsec
    GUICtrlSetData($hLabel, $sLabel)
    Sleep(90)
WEnd

Func _Move()
    Switch @GUI_CtrlID
        Case $GUI_EVENT_PRIMARYDOWN
            Global $aWCoord_B = WinGetPos('Timer')
            Global $aMCoord_B = MouseGetPos()
            Global $ixWCoord_B = $aWCoord_B[0]
            Global $iyWCoord_B = $aWCoord_B[1]
            Global $ixMCoord_B = $aMCoord_B[0]
            Global $iyMCoord_B = $aMCoord_B[1]
            Global $ixDelta = $ixMCoord_B - $ixWCoord_B
            Global $iyDelta = $iyMCoord_B - $iyWCoord_B
            If ($ixDelta <= 170 AND $iyDelta <= 40) Then $sIND = 'Move'
        Case $GUI_EVENT_MOUSEMOVE
            If $sIND = 'Move' Then
                $aMCoord = MouseGetPos()
                $ixMCoord = $aMCoord[0]
                $iyMCoord = $aMCoord[1]
                $ixWCoord = $ixMCoord - $ixDelta
                $iyWCoord = $iyMCoord - $iyDelta
                WinMove('Timer', '', $ixWCoord, $iyWCoord)
            EndIf
        Case $GUI_EVENT_PRIMARYUP
            $sIND = 'Stop'
    EndSwitch
EndFunc

Func _TogglePause()
	$Pause = NOT $Pause
	$IDLE_dif = TimerInit()
	While $Pause
		Sleep(100)
	WEnd
	$IDLE += TimerDiff($IDLE_dif)
EndFunc


И отслеживание нажатия кнопок:

Код:
Global $iKey_1 = "A2", $iKey_2 = "A3", $t1 = 0, $t2 = 0
While 0
    If _IsPressed($iKey_1) Then
        ..........
	Else 
		If $t1 > 0 Then 
		   MsgBox(4096, "_IsPressed", $t1) 
		   $t1 = 0
		EndIf   
	EndIf
WEnd
 

InnI

AutoIT Гуру
Сообщения
4,912
Репутация
1,429
Код:
#include <Misc.au3>

Global $LTime, $RTime, $Refresh

While Sleep(10)
  If _IsPressed("A2") Then
    $LTime = Count("A2")
  EndIf
  If _IsPressed("A3") Then
    $RTime = Count("A3")
  EndIf
  If $Refresh Then Refresh()
WEnd

Func Count($Key)
  Local $t = TimerInit()
  While _IsPressed($Key)
    Sleep(10)
  WEnd
  $Refresh = True
  Return Round(TimerDiff($t))
EndFunc

Func Refresh()
  FileWriteLine("timers.csv", $LTime & ";" & $RTime)
  ConsoleWrite($LTime & ";" & $RTime & @CRLF)
  $Refresh = False
EndFunc
 
Верх