[ad_1]
مرحبًا، أنا أعمل في شركة حيث يقوم الكثير من الأشخاص بتوصيل نفس الكمبيوتر مع نفس المستخدم عن بعد.
أريد الحصول على اسم الكمبيوتر الذي قام المستخدم بتشغيل جهاز التحكم عن بعد منه.
أريد إنشاء برنامج صغير للتحقق من جهاز الكمبيوتر الذي قام المستخدم الذي قام بتسجيل الدخول بإبعاده عن الكمبيوتر ولا يهم إذا كان c# أو java script أو vbscript.
أيضًا، إن أمكن، للتحقق من اسم الكمبيوتر الخاص بالمستخدم الذي قام بتسجيل بعض البرامج وتثبيتها.
أعني أنه إذا قمت بالتحقق من البرنامج المثبت B، فسوف أحصل على اسم الكمبيوتر الخاص بالمستخدم الذي قام بتسجيل الدخول والذي قام بتثبيته.
شكرا، إمبارو.
الحل 1
بدون الحصول على أي معلومات عن التطبيق الخاص بك، لا أستطيع إلا أن أفترض أنك تريد تشغيل برنامج خارجي والعثور على أسماء DNS لأي أجهزة كمبيوتر متصلة. سأقوم بالخطوات التي سأتخذها:
أولاً، سأبدأ عملية “netstat” باستخدام وسيطات سطر الأوامر “-a”. أعد توجيه الإخراج حتى تتمكن من قراءته:
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();
الآن لديك البيانات الخاصة بكل شيء متصل بالكمبيوتر (داخل وخارج). يمكنك تشغيل الأمر netstat في نافذة وحدة التحكم لرؤية الإخراج. يمكنك بعد ذلك تقسيم هذا على أسطر للحصول على كل إدخال، ثم تقسيمه مرة أخرى حسب علامات التبويب للحصول على كل عمود. أنت مهتم بالعمود الثالث، الذي يحتوي على اسم الكمبيوتر: منفذ أو عنوان ipad: منفذ إذا تعذر تحديد الاسم.
الحل 3
أهلاً 🙂
ليس الكود الخاص بي، لقد تم تكييفه للتو لإصدارات x64 (ربما يساعد شخصًا ما بعد سنوات عديدة). مخصص فقط للحصول على اسم مضيف عميل RDP (سطح المكتب البعيد) الحالي.
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]
コメント