Hi,
I want to find out How many time my application is run in memory.
Can anyone help me where to start?
Thanks.
Hakan ONEMLI
Harbour & MSVC 2022 & FWH 23.06
Hi,
I want to find out How many time my application is run in memory.
Can anyone help me where to start?
Thanks.
Do you mean how long one of your programs has been running?
From powershell:
New-TimeSpan -Start (get-process <yourapplication>).StartTime
Internal to the program? I would just set a variable with DateTime() on entry, then diff that with current DateTime() to get total runtime of the app.
And I just realized I may have misinterpreted the question. Are you asking how many instances of your application are in memory? (and not how long it's been running as I commented about.)
This can also still be done easily with powershell, though I'd need to look that up.
(Get-Process | Where-Object {$_.Name -eq 'YourApp'}).count
rhlawek wrote:And I just realized I may have misinterpreted the question. Are you asking how many instances of your application are in memory? (and not how long it's been running as I commented about.)
This can also still be done easily with powershell, though I'd need to look that up.
rhlawek wrote:(Get-Process | Where-Object {$_.Name -eq 'YourApp'}).count
Dear Hakan,
Do you mean that you want to allow just one single execution of your app ?
Antonio Linares wrote:Dear Hakan,
Do you mean that you want to allow just one single execution of your app ?
cRelauFle := cFilePath(GetModuleFileName( GetInstance() ))+'\Relaunch.Bat'
hFile := FCreate( cRelauFle, 0 ) // 0 Normal/Default,Read/Write
if hFile >= 0
FWrite( hFile, "COPY "+::cRoot+"Convert32.exe "+cFilePath(GetModuleFileName( GetInstance() ))+"\Convert32.exe /Y" +CRLF )
FWrite( hFile, GetModuleFileName( GetInstance() ) +CRLF )
FWrite( hFile, "exit" +CRLF )
FClose( hFile )
SysRefresh()
*--
WinExec( cRelauFle, 0 ) // 0 not show Cmd.exe Window, 1 yes
ENDIF
QUITAs a rule, the class name of the main window is TWindow (you can make a unique name) And using Enum() to determine the number of running instances of the task
IF HowManyApp("Notepad.exe") > 1
MsgInfo("more that 1 Instance running ! ")FUNCTION HowManyApp(cApp)
LOCAL oProcesses, oProcess, oWMI, oLocator
LOCAL nRet := 0
oLocator := CreateObject( "wbemScripting.SwbemLocator" )
IF EMPTY( oLocator )
msginfo( "can not create wbemScripting.SwbemLocator" )
RETURN 0
ELSE
oWMI := oLocator:ConnectServer()
ENDIF
IF EMPTY( oWMI )
msginfo( "can not connect oLocator:ConnectServer()" )
RETURN 0
ELSE
oProcesses = oWMI:ExecQuery( "SELECT * FROM Win32_Process" )
IF oProcesses:Count > 0
FOR EACH oProcess in oProcesses
IF UPPER( TRIM( oProcess:Name ) ) = UPPER( TRIM( cApp ) )
nRet += 1
ENDIF
NEXT
ENDIF
ENDIF
oProcesses := NIL
oWMI := NIL
oLocator := NIL
RETURN nRetmany thanks Jimmy! ![]()
Jimmy wrote:hi,
when run same App "more" than once it will use same "Name" in each Instance
IF HowManyApp("Notepad.exe") > 1 MsgInfo("more that 1 Instance running ! ")
FUNCTION HowManyApp(cApp) LOCAL oProcesses, oProcess, oWMI, oLocator LOCAL nRet := 0 oLocator := CreateObject( "wbemScripting.SwbemLocator" ) IF EMPTY( oLocator ) msginfo( "can not create wbemScripting.SwbemLocator" ) RETURN 0 ELSE oWMI := oLocator:ConnectServer() ENDIF IF EMPTY( oWMI ) msginfo( "can not connect oLocator:ConnectServer()" ) RETURN 0 ELSE oProcesses = oWMI:ExecQuery( "SELECT * FROM Win32_Process" ) IF oProcesses:Count > 0 FOR EACH oProcess in oProcesses IF UPPER( TRIM( oProcess:Name ) ) = UPPER( TRIM( cApp ) ) nRet += 1 ENDIF NEXT ENDIF ENDIF oProcesses := NIL oWMI := NIL oLocator := NIL RETURN nRet
Jimmy wrote:hi,
when run same App "more" than once it will use same "Name" in each Instance
IF HowManyApp("Notepad.exe") > 1 MsgInfo("more that 1 Instance running ! ")
FUNCTION HowManyApp(cApp) LOCAL oProcesses, oProcess, oWMI, oLocator LOCAL nRet := 0 oLocator := CreateObject( "wbemScripting.SwbemLocator" ) IF EMPTY( oLocator ) msginfo( "can not create wbemScripting.SwbemLocator" ) RETURN 0 ELSE oWMI := oLocator:ConnectServer() ENDIF IF EMPTY( oWMI ) msginfo( "can not connect oLocator:ConnectServer()" ) RETURN 0 ELSE oProcesses = oWMI:ExecQuery( "SELECT * FROM Win32_Process" ) IF oProcesses:Count > 0 FOR EACH oProcess in oProcesses IF UPPER( TRIM( oProcess:Name ) ) = UPPER( TRIM( cApp ) ) nRet += 1 ENDIF NEXT ENDIF ENDIF oProcesses := NIL oWMI := NIL oLocator := NIL RETURN nRet
![]()