[ad_1]
Bonjour, je travaille dans une entreprise où beaucoup de gens connectent à distance le même ordinateur avec le même utilisateur.
Je souhaite obtenir le nom de l’ordinateur à partir duquel l’utilisateur a effectué la télécommande.
Je veux créer un petit programme pour vérifier quel ordinateur l’utilisateur connecté a connecté à l’ordinateur et cela n’a pas d’importance si c# ou java script ou vbscript.
Aussi, si possible, pour vérifier le nom de l’ordinateur de l’utilisateur connecté et installé un programme.
Je veux dire que si je vérifie le programme installé B, j’obtiens le nom de l’ordinateur de l’utilisateur connecté qui l’a installé.
Merci, Imbaro.
Solution 1
Sans avoir aucune information sur votre application, je ne peux que supposer que vous souhaitez exécuter un programme externe et trouver les noms DNS de tous les ordinateurs connectés. Je vais passer en revue les étapes que je suivrais :
Tout d’abord, je démarrerais le processus “netstat” avec les arguments de ligne de commande “-a”. Redirigez la sortie pour pouvoir la lire :
Process netStat = new Process(); netStat.StartInfo.UseShellExecute = true; netStat.StartInfo.CreateNoWindow = true; netStat.StartInfo.FileName = "netstat"; netStat.StartInfo.Arguments ="-a"; netStat.StartInfo.RedirectStandardOutput = true; netStat.Start(); //Can take several seconds to execute, good use for BackgroundWorker string output = netStat.StandardOutput.ReadToEnd();
Vous disposez désormais des données de tout ce qui est connecté à l’ordinateur (entrée et sortie). Vous pouvez exécuter la commande netstat dans une fenêtre de console pour voir le résultat. Vous diviseriez ensuite cela par lignes pour obtenir chaque entrée, puis le diviseriez à nouveau par onglets pour obtenir chaque colonne. Vous êtes intéressé par la troisième colonne, qui contient le nom de l’ordinateur : port ou l’adresse IP : port si le nom ne peut pas être déterminé.
Solution 3
Salut 🙂
Pas mon code, juste adapté pour les versions x64 (peut-être aide quelqu’un tant d’années plus tard). C’est juste pour obtenir le nom d’hôte actuel du client RDP (Remote Desktop).
Private Declare PtrSafe Sub WTSFreeMemory Lib "wtsapi32.dll" (ByVal pMemory As Any) Private Declare PtrSafe Sub CopyMemory Lib "kernel32" Alias "RtlMoveMemory" (Destination As Any, Source As Any, ByVal Length As LongLong) Private Declare PtrSafe Function WTSQuerySessionInformationA Lib "wtsapi32.dll" (ByVal hServer As LongLong, ByVal sessionId As LongLong, ByVal wtsInfoClass As LongLong, ByRef pBuffer As LongLong, ByRef dwSize As LongLong) As LongLong Public Function GetMachinenameofCurrentSession() As String Dim RetVal As LongLong 'Return Value of API Call Dim lpBuffer As LongLong 'Buffer to Hold Info Returned Dim Count As LongLong 'Length of Buffer info Dim MachineName As String 'If the function succeeds, the return value is a nonzero value. 'If the function fails, the return value is zero. 'To get extended error information, call GetLastError API. RetVal = WTSQuerySessionInformationA(WTS_CURRENT_SERVER_HANDLE, _ WTS_CURRENT_SESSION, _ WTSClientName, _ lpBuffer, _ Count) MachineName = GetStringFromLP(lpBuffer) WTSFreeMemory lpBuffer 'Free the memory used by the buffer. GetMachinenameofCurrentSession = MachineName End Function Private Function GetStringFromLP(ByVal StrPtr As LongLong) As String Dim b As Byte Dim tempStr As String Dim bufferStr As String Dim Done As Boolean Done = False Do ' Get the byte/character that StrPtr is pointing to. CopyMemory b, ByVal StrPtr, 1 If b = 0 Then ' If you've found a null character, Done = True Else tempStr = Chr$(b) bufferStr = bufferStr & tempStr 'Add it to the string StrPtr = StrPtr + 1 ' Increment the pointer to next End If Loop Until Done GetStringFromLP = bufferStr End Function
[ad_2]
コメント