Orion9

|
Posted: Sun Nov 24, 2024 14:29 Post subject: |
|
|
Loopback
При вызове GetState в конце остается двойной перевод строки. Можно, конечно, убрать его средстави скрипта, но хотелось бы, чтобы сразу все возвращалось как надо.
Остановился пока на таком варианте кнопки "Autorun". Правый клик висит пока временно, как и многое остальное. Но уже неплохо и довольно удобно. Правда RestartScript мне таким образом не удалось заставить работать, но с ним я мало эксперементировал.
 Hidden text Code: | RegisterCommand 77000 "AutorunStatus"
ControlSetMouseAction /L /B:7 17 AutorunStatus 0
ControlSetMouseAction /R /B:7 17 AutorunStatus 1
Func AutorunStatus(lParam)
Local vars, h = 0
Local dbgv = %COMMANDER_PATH% & "\Utilites\Sysinternals\Dbgview.exe"
Static t = 0, t1
#If IsPressed (0x11) Then Return RestartScript(1000)
vars = GetState("vars")
If lParam = 1 Then
ClipPut(vars)
ShowHint("Информация скопирована в буфер")
Sleep(100)
h = WinFind(0, "AkelPad4")
If h > 0 Then
ShellExec /SW_SHOWNORMAL %AKELP% '/Command(4101) /Command(4155) /Call("Scripts::Main", 1, "GoHome.vbs")'
Else
ShellExec /SW_SHOWNORMAL %AKELP% '/Command(4155) /Call("Scripts::Main", 1, "GoHome.vbs")'
Endif
Return
Endif
t = t + 1
# второй вызов функции менее,
# чем за 300 млс. (второй клик)
If t > 1 And (GetUptime() - t1) < 300 Then
t = 0
If Not WinFind(0, "dbgviewClass") Then
If Not FileExist(dbgv) Then
ShowHint("Файл не найден " & dbgv)
Return
Endif
ShellExec /SW_SHOWNORMAL %dbgv%
Sleep(100)
Endif
For i = 1 To 3
If WinFind(0, "dbgviewClass") Then
OutputDebugString(vars)
break
Endif
Sleep(150)
Next
Return
Endif
h = WinFind(0, "dbgviewClass")
If h > 0 Then
OutputDebugString(vars)
WinSetState(23, h)
Else
ShowHint("Просмотрщик DebugView не запущен")
# Sleep(500)
# WinSetState(23)
Endif
# первый клик (вызов функции)
t1 = GetUptime()
EndFunc
ControlSetHint /F /D:50 /B:7 17 "AutorunHints"
Func AutorunHints()
Local A_Version, A_Copyright, A_DateTime, A_Wdx = AUTORUN_PATH & "\Autorun.wdx"
If IsPressed (0x10) Then Return GetState("libs")
If IsPressed (0x11) Then Return GetState("threads") & auCR & GetState("procs")
If IsPressed (0x12) Then Return GetState("paths")
A_Version = FileGetVersion(A_Wdx, "FileVersion")
A_Copyright = FileGetVersion(A_Wdx, "LegalCopyright")
obj = Plugin("FileDateTime")
If ERROR = 0 Then
obj.FileName = A_Wdx
A_DateTime = StrFormat("%.0f", obj.GetValue(3))
Free(obj)
Else
A_DateTime = "Error " & ERROR
Endif
Return "Версия: " & A_Version & auCR & "Дата изменения: " & A_DateTime & auCR & "Авторские права: " & A_Copyright
EndFunc |
Попутно обновил код кнопки "MediaInfo & AkelPad". Есть пара интересных моментов (может, кому-то пригодится в своих целях):
 Hidden text Code: | Func GetMediaInfo(lParam)
Local sPath, sName, sFile, sAkel, sMI, pMI, txt, sTemp
Local sComplete, sLanguage, sLogFie, sParams
# lParam = 0 - использовать временный файл
# lParam = 1 - использовать вставку из буфера
# ALT - смена состояния lParam
# CTRL - полная информация
# SHIFT - русский перевод полей и единиц
sMI = %COMMANDER_PATH% & "\Plugins\arc\MediaInfo\MediaInfo.exe"
pMI = %COMMANDER_PATH% & "\Plugins\arc\MediaInfo\"
sAkel = %COMMANDER_PATH% & "\Utilites\AkelPad\AkelPad.exe"
sPath = RequestCopyDataInfo("SP")
sName = RequestCopyDataInfo("SN")
sFile = sPath & sName
sTemp = %TEMP% & "\" & StrFormat("07%d", Random(1, 100000, 1)) & ".txt"
If Not FileExist(sFile) Then
ShowHint("Файл не существует " & sFile)
Return
Endif
If StrPos(FileGetAttr(sFile), "D") Then
ShowHint("Каталог")
Return
Endif
If IsPressed (0x11) Then
sComplete = " --Complete=1"
Else
sComplete = " --Complete=0"
Endif
If IsPressed (0x10) Then
sLanguage = " --Language=file://ru.csv"
Else
sLanguage = ""
Endif
If IsPressed (0x12) Then
sLogFie = ' --LogFile="' & sTemp & '"'
lParam = 0
Else
sLogFie = ''
lParam = 1
Endif
sParams = sLanguage & sComplete & sLogFie & ' "' & sFile & '"'
ProcessExecGetOutput /C:65001 txt %sMI% %sParams% %pMI%
#OutputDebugString(GetState('vars',2))
If lParam = 1 Then
ClipPut(txt)
h = WinFind(0, "AkelPad4")
If h > 0 Then
ShellExec /SW_SHOWNORMAL %sAkel% '/Command(4101) /Command(4155) /Call("Scripts::Main", 1, "GoHome.vbs")'
Else
ShellExec /SW_SHOWNORMAL %sAkel% '/Command(4155) /Call("Scripts::Main", 1, "GoHome.vbs")'
Endif
Else
If txt = "" Then
ShowHint("Пустой stdout")
Return
Else
ShellExec /SW_SHOWNORMAL %sAkel% '%sTemp%'
Endif
Endif
Sleep(25)
For i = 1 To 3
h = WinFind(0, "AkelPad4")
If h > 0 Then
WinSetState(23, h)
break
Endif
Sleep(100)
Next
EndFunc
|
Прикольное сочетание Alt+Ctrl+Shift. В следующий раз добавлю еще клавишу Win  |
|