Uwaga
Dostęp do tej strony wymaga autoryzacji. Może spróbować zalogować się lub zmienić katalogi.
Dostęp do tej strony wymaga autoryzacji. Możesz spróbować zmienić katalogi.
You can name your phone to whatever you like, but how can an app display that name? There isn't an obvious API for this, but I accidentally discovered an un-obvious API. The quick version is that you can ask getaddrinfo for the canonical network name. Too quick? OK, here is some C++/CX code to show exactly:
Platform::String ^ DeviceName::PhoneName::get()
{
WSADATA wsadata;
ADDRINFOA *result = nullptr;
int error;
wchar_t wszName[256] = L"Unknown";
ADDRINFOA hints = {};
hints.ai_flags = AI_CANONNAME;
error = WSAStartup(MAKEWORD(2,2), &wsadata);
if (error==0)
{
error = ::getaddrinfo("", "0", &hints, &result);
if (error==0)
{
char *name = result->ai_canonname;
if (name!=nullptr)
{
MultiByteToWideChar(CP_ACP, 0, name, strlen(name), wszName, 256);
}
}
}
::freeaddrinfo(result);
return ref new Platform::String(wszName);
}
If you haven't used C++/CX on the phone you might need a little more info on how to hook this up, so here is the C++/CX Super-QuickStart guide by me:
Load your C# project into VS2012. Right click on the Solution then Add / New Project / Visual C++ / Windows Phone / Windows Phone Runtime Component and call it NetHelper.
In pch.h add:
#include <windows.h>
#include <winsock2.h>
#include <ws2tcpip.h>
Replace NetHelper.h with this simple ref class containing a single static property:
#pragma once
namespace NetHelper
{
public ref class DeviceName sealed
{
public:
static property Platform::String ^ PhoneName
{
Platform::String ^ get();
}
};
}
Replace NetHelper.cpp with the code at the start of the article, prefixed with this:
#include "pch.h"
#include "NetHelper.h"
using namespace NetHelper;
using namespace Platform;
#pragma comment(lib, "ws2_32.lib")
Build the NetHelper project.
Right click on your C# project's References tree / Add Reference / Solution / add a checkmark next to NetHelper / OK
In C# you can now using it with
var name = NetHelper.DeviceName.PhoneName;
That's it!
Comments
- Anonymous
September 21, 2014
Why not simply: using Windows.Networking.Proximity; var name = PeerFinder.DisplayName; Also, how to do it for Windows Phone 7? I get this error: "Unable to add the specified project reference. The reference must be a Windows Phone project that targets the current or earlier version of the Windows Phone OS." See this thread: stackoverflow.com/.../how-to-call-wsastartup-in-c-sharp-on-windows-phone-7