Здравствуйте, гость ( Вход | Регистрация )

 
Ответить в эту темуОткрыть новую тему
> Get the time since given process is started., Получить время с момента запуска данного процесса.
neves
сообщение 11.5.2020, 23:06
Сообщение #1


**

Neophyte
Сообщений: 31
Регистрация: 4.10.2019
Группа: Пользователи
Наличность: 330
Пользователь №: 19.419
Возраст: 19



Is there any lua function to get the time since given process is started?
Есть ли какая-нибудь функция lua для получения времени с момента запуска данного процесса?
Пользователь в офлайнеDelete PostОтправить личное сообщение
Вернуться в начало страницы
+Ответить с цитированием данного сообщения
cirus
сообщение 11.5.2020, 23:16
Сообщение #2


**********

Elder
Сообщений: 2.828
Регистрация: 18.8.2014
Группа: Пользователи
Наличность: 18112
Пользователь №: 16.971
Возраст: 29



Код
--lua
local t = os.clock()

while true do
    log (os.clock() - t)
    wait (100)
end
Пользователь в офлайнеDelete PostОтправить личное сообщение
Вернуться в начало страницы
+Ответить с цитированием данного сообщения
neves
сообщение 11.5.2020, 23:22
Сообщение #3


**

Neophyte
Сообщений: 31
Регистрация: 4.10.2019
Группа: Пользователи
Наличность: 330
Пользователь №: 19.419
Возраст: 19



Цитата(cirus @ 11.5.2020, 22:16) *

Код
--lua
local t = os.clock()

while true do
    log (os.clock() - t)
    wait (100)
end


Thanks for the fast reply, but that's not what I need.
Example:
I bind given script to 'calculator.exe', and I wanna know at what time 'calculator.exe' was started or for how long calcualtor.exe is running.
For what I need this? I just want to make script which checks if process is running for more than 3 hours.
Пользователь в офлайнеDelete PostОтправить личное сообщение
Вернуться в начало страницы
+Ответить с цитированием данного сообщения
Fors1k
сообщение 11.5.2020, 23:38
Сообщение #4


*****

Journeyman
Сообщений: 350
Регистрация: 19.12.2017
Группа: Пользователи
Наличность: 1792
Пользователь №: 18.746
Возраст: 26



Цитата(neves @ 11.5.2020, 23:22) *
I wanna know at what time 'calculator.exe' was started

Код
--lua
log"clear";log"mode compact"
require"luaposh";PScode('return',{[[#}

log (Get-Process *calc*).StartTime

]]})


--------------------
Пользователь в офлайнеDelete PostОтправить личное сообщение
Вернуться в начало страницы
+Ответить с цитированием данного сообщения
Fors1k
сообщение 11.5.2020, 23:55
Сообщение #5


*****

Journeyman
Сообщений: 350
Регистрация: 19.12.2017
Группа: Пользователи
Наличность: 1792
Пользователь №: 18.746
Возраст: 26



Цитата(neves @ 11.5.2020, 23:22) *
I just want to make script which checks if process is running for more than 3 hours.

Код
--lua
log"clear";log"mode compact"
require"luaposh";PScode('return',{[[#}

if(((get-date) - (Get-Process *calc*).StartTime).totalhours -gt 3){
    log 'YES'
}
else{
    log 'NO'
}

]]})

note
-gt Greater than
-lt Less than


--------------------
Пользователь в офлайнеDelete PostОтправить личное сообщение
Вернуться в начало страницы
+Ответить с цитированием данного сообщения
neves
сообщение 12.5.2020, 0:05
Сообщение #6


**

Neophyte
Сообщений: 31
Регистрация: 4.10.2019
Группа: Пользователи
Наличность: 330
Пользователь №: 19.419
Возраст: 19



Цитата(Fors1k @ 11.5.2020, 22:55) *

Код
--lua
log"clear";log"mode compact"
require"luaposh";PScode('return',{[[#}

if(((get-date) - (Get-Process *calc*).StartTime).totalhours -gt 3){
    log 'YES'
}
else{
    log 'NO'
}

]]})


Awesome! That's working, but is there any way to do it without using posh?
I just found this -> winapi/process.lua and now trying to implement it.
Пользователь в офлайнеDelete PostОтправить личное сообщение
Вернуться в начало страницы
+Ответить с цитированием данного сообщения
Fors1k
сообщение 12.5.2020, 0:19
Сообщение #7


*****

Journeyman
Сообщений: 350
Регистрация: 19.12.2017
Группа: Пользователи
Наличность: 1792
Пользователь №: 18.746
Возраст: 26



Цитата(neves @ 12.5.2020, 0:05) *

Awesome! That's working, but is there any way to do it without using posh?

With posh you can solve almost all ur needs, without necessary to install any mods.
For example u can remember this issue.
Ask, if u'll need more help with the code.

Anyway, u can continue writing in lua below this luaposh block. Or above it.


--------------------
Пользователь в офлайнеDelete PostОтправить личное сообщение
Вернуться в начало страницы
+Ответить с цитированием данного сообщения
cirus
сообщение 12.5.2020, 0:59
Сообщение #8


**********

Elder
Сообщений: 2.828
Регистрация: 18.8.2014
Группа: Пользователи
Наличность: 18112
Пользователь №: 16.971
Возраст: 29



Цитата
but is there any way to do it without using posh?

code
Код
--lua
local PROCESS_ALL_ACCESS = 2097151
local ffi = require("ffi")
local user, kernel = ffi.load('User32'), ffi.load('Kernel32')
ffi.cdef[[
    typedef unsigned short  WORD;
    typedef unsigned long   DWORD;
    typedef DWORD           *LPDWORD;
    typedef struct _FILETIME {DWORD dwLowDateTime; DWORD dwHighDateTime;} FILETIME, *PFILETIME, *LPFILETIME;
    typedef struct _SYSTEMTIME {WORD wYear; WORD wMonth; WORD wDayOfWeek; WORD wDay;
        WORD wHour; WORD wMinute; WORD wSecond; WORD wMilliseconds;} SYSTEMTIME, *PSYSTEMTIME, *LPSYSTEMTIME;
    bool CloseHandle(int hObject);
    int OpenProcess(DWORD dwDesiredAccess, bool bInheritHandle, DWORD dwProcessId);
    bool GetProcessTimes(int hProcess, LPFILETIME lpCreationTime, LPFILETIME lpExitTime, LPFILETIME lpKernelTime, LPFILETIME lpUserTime);
    DWORD GetWindowThreadProcessId(int hWnd, LPDWORD lpdwProcessId);
    bool FileTimeToSystemTime(const FILETIME *lpFileTime, LPSYSTEMTIME lpSystemTime);
    bool FileTimeToLocalFileTime(const FILETIME *lpFileTime, LPFILETIME lpLocalFileTime);
]]
local ft, ft2, ft3, ft4, st = ffi.new('FILETIME'), ffi.new('FILETIME'), ffi.new('FILETIME'), ffi.new('FILETIME'), ffi.new('SYSTEMTIME')
local PID = ffi.new('unsigned long[1]')

function GetProcessTime(handle)
    if handle == 0 then return 0 end
    user.GetWindowThreadProcessId(handle, PID)
    local process = kernel.OpenProcess(PROCESS_ALL_ACCESS, 1, PID[0])
    if process > 0 then
        kernel.GetProcessTimes(process, ft, ft2, ft3, ft4)
        kernel.FileTimeToLocalFileTime(ft, ft);
        kernel.FileTimeToSystemTime(ft, st);
        local datetime = { year = st.wYear, month = st.wMonth, day = st.wDay, hour = st.wHour, min = st.wMinute, sec = st.wSecond}
        kernel.CloseHandle(process);
        return os.time() - os.time(datetime)
    end
    return -1
end



log 'clear' log 'mode compact'
local t = GetProcessTime(workwindow())     -- function call
log (tostring(t) .. ' seconds')
Пользователь в офлайнеDelete PostОтправить личное сообщение
Вернуться в начало страницы
+Ответить с цитированием данного сообщения
neves
сообщение 12.5.2020, 4:02
Сообщение #9


**

Neophyte
Сообщений: 31
Регистрация: 4.10.2019
Группа: Пользователи
Наличность: 330
Пользователь №: 19.419
Возраст: 19



Цитата(Fors1k @ 11.5.2020, 23:19) *

With posh you can solve almost all ur needs, without necessary to install any mods.
For example u can remember this issue.
Ask, if u'll need more help with the code.

Anyway, u can continue writing in lua below this luaposh block. Or above it.

Posh solution is very simple and clean! Just wanted to see ffi/winapi solution because I already had them imported in my script.
About this issue. Other problems popped up and sadly its not finished. :/

Цитата(cirus @ 11.5.2020, 23:59) *

code
Код
--lua
local PROCESS_ALL_ACCESS = 2097151
local ffi = require("ffi")
local user, kernel = ffi.load('User32'), ffi.load('Kernel32')
ffi.cdef[[
    typedef unsigned short  WORD;
    typedef unsigned long   DWORD;
    typedef DWORD           *LPDWORD;
    typedef struct _FILETIME {DWORD dwLowDateTime; DWORD dwHighDateTime;} FILETIME, *PFILETIME, *LPFILETIME;
    typedef struct _SYSTEMTIME {WORD wYear; WORD wMonth; WORD wDayOfWeek; WORD wDay;
        WORD wHour; WORD wMinute; WORD wSecond; WORD wMilliseconds;} SYSTEMTIME, *PSYSTEMTIME, *LPSYSTEMTIME;
    bool CloseHandle(int hObject);
    int OpenProcess(DWORD dwDesiredAccess, bool bInheritHandle, DWORD dwProcessId);
    bool GetProcessTimes(int hProcess, LPFILETIME lpCreationTime, LPFILETIME lpExitTime, LPFILETIME lpKernelTime, LPFILETIME lpUserTime);
    DWORD GetWindowThreadProcessId(int hWnd, LPDWORD lpdwProcessId);
    bool FileTimeToSystemTime(const FILETIME *lpFileTime, LPSYSTEMTIME lpSystemTime);
    bool FileTimeToLocalFileTime(const FILETIME *lpFileTime, LPFILETIME lpLocalFileTime);
]]
local ft, ft2, ft3, ft4, st = ffi.new('FILETIME'), ffi.new('FILETIME'), ffi.new('FILETIME'), ffi.new('FILETIME'), ffi.new('SYSTEMTIME')
local PID = ffi.new('unsigned long[1]')

function GetProcessTime(handle)
    if handle == 0 then return 0 end
    user.GetWindowThreadProcessId(handle, PID)
    local process = kernel.OpenProcess(PROCESS_ALL_ACCESS, 1, PID[0])
    if process > 0 then
        kernel.GetProcessTimes(process, ft, ft2, ft3, ft4)
        kernel.FileTimeToLocalFileTime(ft, ft);
        kernel.FileTimeToSystemTime(ft, st);
        local datetime = { year = st.wYear, month = st.wMonth, day = st.wDay, hour = st.wHour, min = st.wMinute, sec = st.wSecond}
        kernel.CloseHandle(process);
        return os.time() - os.time(datetime)
    end
    return -1
end
log 'clear' log 'mode compact'
local t = GetProcessTime(workwindow())     -- function call
log (tostring(t) .. ' seconds')


Works perfect! Thank you.
Пользователь в офлайнеDelete PostОтправить личное сообщение
Вернуться в начало страницы
+Ответить с цитированием данного сообщения

Ответить в эту темуОткрыть новую тему
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 

- Текстовая версия | Версия для КПК Сейчас: 2.6.2020, 21:11
Designed by Nickostyle