في C++/Windows كيف يمكنني الحصول على اسم شبكة الكمبيوتر الذي أستخدمه؟

StackOverflow https://stackoverflow.com/questions/11127

سؤال

في تطبيق 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

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top