掲示板システム
ホーム
アクセス解析
カテゴリ
ログアウト
Vistaでコンピュータ名を取得するには (ID:69143)
名前
ホームページ(ブログ、Twitterなど)のURL (省略可)
本文
まず前提として、GetComputerNameで取得できるのは「NetBIOS名」なのね。 んで、NetBIOS名は15バイトで切り捨てられる。この辺は実際に自分のPCで 16バイト以上のコンピュータ名を設定してみると、その時点でNetBIOS名は 15文字で切り捨てられてるのがわかる(XPでは確認済み、Vistaは未確認)。 ※マイコンピュータのプロパティ→コンピュータ名→変更→詳細 じゃあ16文字以上のコンピュータ名はどーすんだ?ということでMSDN見てみると http://msdn.microsoft.com/ja-jp/library/cc429732.aspx GetComputerNameExならDNSホスト名を取得できるとあるので試してみる。 //test.cpp #include <windows.h> int WINAPI WinMain(HINSTANCE, HINSTANCE, LPSTR, int) { { //GetComputerNameA()・・・NG char name[1000 + 1] = ""; //確認のため大きめにする DWORD length = (sizeof name) / (sizeof name[0]); ::GetComputerNameA(name, &length); ::OutputDebugStringA(name); ::OutputDebugStringA("\r\n"); } { //GetComputerNameExA()・・・NG char name[1000 + 1] = ""; //確認のため大きめにする DWORD length = (sizeof name) / (sizeof name[0]); ::GetComputerNameExA(ComputerNameDnsHostname, name, &length); ::OutputDebugStringA(name); ::OutputDebugStringA("\r\n"); } { //GetComputerNameExW()・・・OK wchar_t name[1000 + 1] = L""; //確認のため大きめにする DWORD length = (sizeof name) / (sizeof name[0]); ::GetComputerNameExW(ComputerNameDnsHostname, name, &length); ::OutputDebugStringW(name); ::OutputDebugStringW(L"\r\n"); } { //GetComputerNameW()・・・NG wchar_t name[1000 + 1] = L""; //確認のため大きめにする DWORD length = (sizeof name) / (sizeof name[0]); ::GetComputerNameW(name, &length); ::OutputDebugStringW(name); ::OutputDebugStringW(L"\r\n"); } return 0; } ---結果--- コンピュータ管 コンピュータ管 コンピュータ管理者アドミン コンピュータ管 まず、GetComputerNameを確認(1つ目)。 次にGetComputerNameExを確認。ANSI版(2つ目)だとなぜか半分で切れる。 なんでだろ。Unicode版だときちんと取れる(3つ目)。 ん?ならGetComputerNameもUnicode版なら取れたり・・・しないね(4つ目)。 ってことで、16文字以上のコンピュータ名が欲しいならGetComputerNameExWで DNSホスト名を取得するのが正解ぽい。
←解決時は質問者本人がここをチェックしてください。
更新する
戻る
掲示板システム
Copyright 2021 Takeshi Okamoto All Rights Reserved.