Windows 11 taskbar on right side
Labels: Taskbar, Windows 11
News, links, downloads, tips and tricks on Microsoft Access and related
About Me | Search |
Labels: Taskbar, Windows 11
When TeamViewer running as service - connections established by System account, so we can't detect which user has TeamViewer session active. In that case we can use a following function, which looks through TeamViewer log file (logging must be enabled in TeamViewer options). Idea is based on that KB article Log file reading - Incoming connection
Public Function TeamViewerActive() As Boolean
Dim tvLog As String
tvLog = "C:\Program Files (x86)\TeamViewer\TeamViewer15_Logfile.log"
If Len(Dir(tvLog)) = 0 Then Exit Function
'Get user's process TeamViewer PID
Dim objServices As Object, objProcessSet As Object, Process As Object
Set objServices = GetObject("winmgmts:\\.\root\CIMV2")
Set objProcessSet = objServices.ExecQuery("SELECT * FROM Win32_Process WHERE Name = 'TeamViewer.exe'", , 48) '
Dim tvPID As Long
For Each Process In objProcessSet
Dim ProcessUserName As Variant
Call Process.GetOwner(ProcessUserName)
If ProcessUserName = GetWindowsUserName Then
tvPID = Process.ProcessID
Exit For
End If
Next
Set objProcessSet = Nothing
'no PID - no TeamViewer running
If tvPID = 0 Then Exit Function
Dim FSO As Object
Dim strLog As String, a, i As Long
Set FSO = CreateObject("scripting.FileSystemObject")
Dim TS As Object 'TextStream
Set TS = FSO.OpenTextFile(tvLog, 1) 'ForReading
strLog = TS.ReadAll
a = Split(strLog, vbNewLine)
TS.Close
'Get the lastest session
Dim lngLastStart As Long, strSessionID As String
For i = 0 To UBound(a)
If a(i) Like "* " & tvPID & " *" Then
If a(i) Like "* CParticipantManagerBase participant *" Then
lngLastStart = i
End If
End If
Next i
If lngLastStart > 0 Then
'Session was started
TeamViewerActive = True
'Get session ID
strSessionID = Mid(a(lngLastStart), InStr(1, a(lngLastStart), " (ID [") + 5)
strSessionID = Left(strSessionID, InStr(1, strSessionID, "]"))
'Check if that session already ended, if no - then user in TeamViewer session
For i = lngLastStart To UBound(a)
If a(i) Like "* CPersistentParticipantManager::RemoveParticipant:*" & Replace(strSessionID, "[", "[[]") & "*" Then
TeamViewerActive = False
End If
Next i
End If
End Function
This function can be used to determine if current user session has active TeamViewer connection. The only way I found so far is to check specific port for established connection using netstat
netstat -nb | find ":5938" | find "ESTABLISHED"
If anything found - Teamviewer is running on PC
netstat -nb | find ":6039" | find "ESTABLISHED"
If anything found - Teamviewer session is active
Using this code GetTcpTable: Local Machine TCP Connection Table you can make TeamviewerSessionIsActive() function, just replace With TcpRow block with following:
Public Function TeamviewerSessionIsActive() As Boolean
…
With TcpRow
If ntohs(.dwRemotePort) = 6039 And & _
.dwState = MIB_TCP_STATE_ESTAB Then
TeamviewerSessionIsActive = True
Exit Function
End If
End With
…
End Function
Got i from friend of mine, be aware of this CylancePROTECT Script Control...
Hi Everyone
I spent a frustrating five hours yesterday tracking down a problem on some (but not all) of one of my clients’ workstations, and I hope I might save some of you from a similar waste of time.
Attempts to open their Access application (an ACCDR) with the /runtime switch gave:
Execution of this application has stopped due to a run-time error.
The application can’t continue and will shut down.
Further investigation, running it as an ACCDB, showed that any attempt to touch the ErrEx class (Wayne Philips’ vbWatchdog) gave:
Run-time error '453':
Can't find DLL entry point VirtualAlloc in kernel32
This was from a call to VirtualAlloc from the Class_Initialize event procedure of ErrEx.
My initial thought was that a Microsoft update over the weekend had installed something that was interfering with vbWatchdog, so I was composing as email to Wayne when I thought to try some other calls to Kernel32 functions. They all failed with Error 453, as did calls to User32 procedures.
I then spent considerable time uninstalling updates and reverting to restore points, without any success. While googling for ideas, I found this:
Note the final comment by the OP.
Sure enough, I checked and there was a service named “CylancePROTECT” running on the workstation I was looking at.
I called their IT “support” company and finally found somebody who knew that they were trialling new “security software” on some of their customers’ workstations. I googled it, and it includes a “script control” feature which blocks certain functions in “scripts”, which apparently include VBA code:
In this document, it recommends “that administrators initially enable CylancePROTECT Script Control in Alert Mode to monitor and observe all scripts running in their environment.” Then later, “Once administrators have a good understanding of all scripts running in their environment, they can change their settings to block mode and only allow scripts to run out of specified folders.” Of course, these idiots had not followed these recommendations.
Anyway, I hope this is useful knowledge to put in the toolbox if ever you are diagnosing Error 453.
Cheers,
Graham
AccessImagine is ActiveX control, which helps to insert images into DB – from file, webcam, clipboard or drag-n-drop, crop and display images, store outside database.
Labels: ActiveX
64 different system tables were documented and summarised the properties
Purpose of System Tables
How Access Stores Queries
Using multivalued fields..and why you really shouldn't
How Access manages Relationships
Using Column History in Memo/Long Text fields
Remove deleted objects from MSysObjects
Labels: Access
Labels: VBA