Microsoft 365 vérifier qu'une session SAP ne soit pas déjà ouverte

yann-86

XLDnaute Nouveau
Bonjour

j'ai développé mon code afin de me connecter à SAP et tout fonctionne très bien.

Maintenant je voudrai l'améliorer en ajoutant certaine condition:

- vérifier si une session utilisateur (avec login et password) n'est pas déjà ouverte
- si oui fermer cette session


est ce quelqu'un aurait un code VBA pour cela svp?

cordialement

Yann
 
Solution
Différentes possibilités...
En fait rien à voir avec le nom de la fenêtre dans ce code. J'aurais aussi l'option mais avec API.
Le mieux est que tu connaisses le nom du processus SAP dans le Gestionnaire de Tâches.
VB:
Option Explicit

'----------------------------------
'TestProcessIDsByProcessNamePattern
'----------------------------------
Sub TestProcessIDsByProcessNamePattern()
    Dim TabPID As Variant
    Dim i As Integer
  
    TabPID = ProcessIDsByProcessNamePattern("firefox*")
    If IsArray(TabPID) Then
        For i = 1 To UBound(TabPID)
            MsgBox TabPID(i)
        Next i
    End If
End Sub

'-------------------
'TestKillByProcessID
'-------------------
Sub TestKillByProcessID()
    Call KillByProcessID(10000)
End Sub...

Dudu2

XLDnaute Barbatruc
Bonjour,
C'est quoi le titre de la fenêtre Windows SAP ?
Le titre est dans le menu système de la fenêtre (là où on trouve
1658315816318.png
)
 
Dernière édition:

Dudu2

XLDnaute Barbatruc
Différentes possibilités...
En fait rien à voir avec le nom de la fenêtre dans ce code. J'aurais aussi l'option mais avec API.
Le mieux est que tu connaisses le nom du processus SAP dans le Gestionnaire de Tâches.
VB:
Option Explicit

'----------------------------------
'TestProcessIDsByProcessNamePattern
'----------------------------------
Sub TestProcessIDsByProcessNamePattern()
    Dim TabPID As Variant
    Dim i As Integer
  
    TabPID = ProcessIDsByProcessNamePattern("firefox*")
    If IsArray(TabPID) Then
        For i = 1 To UBound(TabPID)
            MsgBox TabPID(i)
        Next i
    End If
End Sub

'-------------------
'TestKillByProcessID
'-------------------
Sub TestKillByProcessID()
    Call KillByProcessID(10000)
End Sub

'----------------------------
'TestKillByProcessNamePattern
'----------------------------
Sub TestKillByProcessNamePattern()
    Call KillByProcessNamePattern("*Notepad++*")
End Sub

'------------------------------------------------------
'Termine le processus dont le PID est passé en argument
'------------------------------------------------------
Sub KillByProcessID(PID As Integer)
    Dim Process As Object
  
    For Each Process In GetObject("winmgmts:").ExecQuery("Select * from Win32_Process")
        If Process.processid = PID Then Process.Terminate
    Next
End Sub

'-----------------------------------------------------------------
'Termine le processus dont la pattern du nom est passé en argument
'Ex: "*notepad++*"
'-----------------------------------------------------------------
Sub KillByProcessNamePattern(NamePattern As String)
    Dim Process As Object
  
    For Each Process In GetObject("winmgmts:").ExecQuery("Select * from Win32_Process")
        If UCase(Process.Name) Like UCase(NamePattern) Then Process.Terminate
    Next
End Sub

'--------------------------------------------------------------
'Retourne les PIDs de processus identifés par la pattern du nom
'--------------------------------------------------------------
Function ProcessIDsByProcessNamePattern(NamePattern As String) As Variant
    Dim Process As Object
    Dim TabPID() As Integer
    Dim NbTabPID As Integer
  
    For Each Process In GetObject("winmgmts:").ExecQuery("Select * from Win32_Process")
        If UCase(Process.Name) Like UCase(NamePattern) Then
            NbTabPID = NbTabPID + 1
            ReDim Preserve TabPID(1 To NbTabPID)
            TabPID(NbTabPID) = Process.processid
        End If
    Next
  
    If NbTabPID > 0 Then
        ProcessIDsByProcessNamePattern = TabPID
    Else
        ProcessIDsByProcessNamePattern = False
    End If
End Function