في C++/Windows كيف يمكنني الحصول على اسم شبكة الكمبيوتر الذي أستخدمه؟
-
08-06-2019 - |
سؤال
في تطبيق C++ Windows (XP وNT، إذا كان ذلك يحدث فرقًا) الذي أعمل عليه، أحتاج إلى الحصول على اسم الشبكة المرتبط بالكمبيوتر الذي يتم تنفيذ التعليمات البرمجية عليه، حتى أتمكن من تحويل أسماء الملفات المحلية من C:\ filename.ext إلى \ etwork_name\C$\filename.ext.كيف يمكنني ان افعل هذا؟
وبدلاً من ذلك، إذا كانت هناك وظيفة تقوم فقط بالتحويل الذي وصفته، فسيكون ذلك أفضل.لقد بحثت في WNetGetUniversalName، ولكن يبدو أن هذا لا يعمل مع الملفات المحلية (محرك الأقراص C).
المحلول
ستحتاج إلى GetComputerName الخاص بـ Win32:
http://msdn.microsoft.com/en-us/library/ms724295(VS.85).aspx
نصائح أخرى
هناك أكثر من بديل:
أ.استخدم GetComputerName() الخاص بـ Win32 كما اقترحه Stu.
مثال: http://www.techbytes.ca/techbyte97.html
أو
ب.استخدم الدالة gethostname() ضمن Winsock.هذه الوظيفة مشتركة بين الأنظمة الأساسية وقد تساعدك إذا كان تطبيقك سيتم تشغيله على منصات أخرى إلى جانب Windows.
مرجع MSDN: http://msdn.microsoft.com/en-us/library/ms738527(VS.85).aspx
أو
ج.استخدم الدالة getaddrinfo().
مرجع MSDN: http://msdn.microsoft.com/en-us/library/ms738520(VS.85).aspx
أتفق مع Pascal في استخدام وظيفة gethostname() الخاصة بـ Winsock.ها أنت ذا:
#include <winsock2.h> //of course this is the way to go on windows only
#pragma comment(lib, "Ws2_32.lib")
void GetHostName(std::string& host_name)
{
WSAData wsa_data;
int ret_code;
char buf[MAX_PATH];
WSAStartup(MAKEWORD(1, 1), &wsa_data);
ret_code = gethostname(buf, MAX_PATH);
if (ret_code == SOCKET_ERROR)
host_name = "unknown";
else
host_name = buf;
WSACleanup();
}
إذا كنت تريد فقط استخدام اسم الكمبيوتر المحلي (NetBIOS). GetComputerName
وظيفة.يقوم باسترداد اسم الكمبيوتر المحلي فقط الذي تم إنشاؤه عند بدء تشغيل النظام، عندما يقرأه النظام من السجل.
BOOL WINAPI GetComputerName(
_Out_ LPTSTR lpBuffer,
_Inout_ LPDWORD lpnSize
);
المزيد عن احصل على اسم الكمبيوتر
إذا كنت ترغب في الحصول على اسم مضيف DNS أو اسم مجال DNS أو اسم DNS المؤهل بالكامل، فاتصل بـ GetComputerNameEx
وظيفة.
BOOL WINAPI GetComputerNameEx(
_In_ COMPUTER_NAME_FORMAT NameType,
_Out_ LPTSTR lpBuffer,
_Inout_ LPDWORD lpnSize
);
المزيد عن GetComputerNameEx