VBで、WindowsAPI関数のGetComputerNameを使って、コンピュータ名を取得する
処理で、コンピュータ名の定義が、50バイト固定のString型になっています。
コンピュータ名は問題なく取れるのですが、50バイト固定のため、後半にnull
文字列が入ってしまい、除去する方法がわかりません。
(replace命令等チャレンジしましたが、だめでした)
どなたか、nill値の除去方法をお教え下さい。宜しくお願い致します。

A 回答 (4件)

データ型の宣言で固定長だからじゃないですか?


Dim ComputerName As String * 50 'API用バッファ
Dim strName As String '文字バッファ

strName = Left(ComputerName, InStr(ComputerName, vbNullChar) - 1)
←maruru01さんの方法

以上
    • good
    • 0

再びmaruru01です。


No.2のElvinさん、TrimではNullは削除出来ません。
横から口を出して申し訳ありませんが、質問者の方が勘違いされるといけないので。
不快に思ったらすみません。
では。
    • good
    • 1

文字列からスペースを削除する Trim ではどうでしょうか?



Trim(文字列)
    • good
    • 0

こんにちはmaruru01です。


次のようにします。

NoNullName = Left(ComputerName, InStr(ComputerName, vbNullChar) - 1)

では。
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!

このQ&Aを見た人はこんなQ&Aも見ています

このQ&Aを見た人が検索しているワード

このQ&Aと関連する良く見られている質問

QRegQueryValueExでエントリ名にNullを指定するとエラー

拡張子から、登録されているアプリケーションを探すために、レジストリを見ようとしています。

\HKEY_CLASSES_ROOT\<.拡張子>
の中の、(標準)エントリの値を探し、
\HKEY_CLASSES_ROOT\探した名前\shell\open\command
の中の、(標準)エントリで目的とするアプリケーションを見つけられるところまでは判ったのですが、
この最初のエントリ値を求めるところでつまづいています。
下記のような処理で、RegQueryValueExのところで必ずアプリケーションエラーが出てしまいます。

Dim tmpRet As Long
Dim tmpKey As Long
Dim tmpBuf As String
Dim tmpBufLen As Long

tmpRet = RegOpenKeyEx(HKEY_CLASSES_ROOT, ".txt", 0&, KEY_ALL_ACCESS, tmpKey)

tmpBuf = String$(256, " ")
tmpBufLen = 256
tmpRet = RegQueryValueEx(tmpKey, vbNullString, 0&, 0&, tmpBuf, tmpBufLen)
tmpBuf = Left$(tmpBuf, tmpBufLen - 1)
MsgBox ("データ値:" & tmpBuf)

拡張子から、登録されているアプリケーションを探すために、レジストリを見ようとしています。

\HKEY_CLASSES_ROOT\<.拡張子>
の中の、(標準)エントリの値を探し、
\HKEY_CLASSES_ROOT\探した名前\shell\open\command
の中の、(標準)エントリで目的とするアプリケーションを見つけられるところまでは判ったのですが、
この最初のエントリ値を求めるところでつまづいています。
下記のような処理で、RegQueryValueExのところで必ずアプリケーションエラーが出てしまいます。

Dim tmpRet As Lon...続きを読む

Aベストアンサー

最初のオープンした所と探すキーの場所が違うような気がします。

WScript.Shellオブジェクトを使うともっと手軽にできます。

Dim WshShell, exp, aKey, fkind, soft
Set WshShell = CreateObject("WScript.Shell")

exp=".txt"
aKey= "HKEY_CLASSES_ROOT\" & exp & "\"
fkind = WshShell.RegRead(aKey)
aKey= "HKEY_CLASSES_ROOT\" & fkind & "\shell\open\command\"
soft = WshShell.RegRead(aKey)
MsgBox "データ値:" & soft

Q.NET Stringからバイト数を取得する。

初歩的な質問で申し訳ありません。

Stringから桁数ではなくバイト数を
取得する方法を教えてください。

Dim a As String
a = "00あ"

とあった場合、
aから4という結果がほしいです。

よろしくお願いします。

Aベストアンサー

こんにちは。

文字列の文字数・バイト数を取得する
http://www.bcap.co.jp/hanafusa/dotnet/moji02.htm
どうぞ。

QString.Insertで文字数ではなく、バイト数で指定したい

String.Insertの第1引数でバイト数を指定したいのですが、
何か方法はありますでしょうか?

"ABCDE".Insert(2, ",") → AB,CDE
"あいうえお".Insert(2, ",") → あい,うえお

となるところを
"あいうえお".Insert(2, ",") → あ,いうえお
としたいのですが、代替のメソッドが無いように思えます。

環境はVB2005です、よろしくお願いします。

Aベストアンサー

Shift-JISのByte列に変換して挿入を行うといった処理が必要なのかも
# S-JISで表現できないUnicode文字がある場合別途対処が必要でしょう

Function MyInsert(ByVal ss as String, ByVal nLen as Integer, _
  ByVal sInsert ) as String
  dim sb as new System.Text.StrngBuilder
  dim enc as System.Text.Encoding
  dim buf as Byte()
  enc = System.Text.Encoding.Default
  buf = enc.GetBytes( ss )
  sb.Append( enc.GetString( buf, 0, nLen ) )
  sb.Append( sInsert )
  sb.Append( enc.GetString( buf, nLen, buf.Length - nLen ) )
  return sb.ToString()
End Function
# エラー処理など必要な処理を追加してください

Shift-JISのByte列に変換して挿入を行うといった処理が必要なのかも
# S-JISで表現できないUnicode文字がある場合別途対処が必要でしょう

Function MyInsert(ByVal ss as String, ByVal nLen as Integer, _
  ByVal sInsert ) as String
  dim sb as new System.Text.StrngBuilder
  dim enc as System.Text.Encoding
  dim buf as Byte()
  enc = System.Text.Encoding.Default
  buf = enc.GetBytes( ss )
  sb.Append( enc.GetString( buf, 0, nLen ) )
  sb.Append( sInsert )
...続きを読む

QVB6.0でコンピュータ名の取得

Visual Basic6.0で現在使用しているパソコンの名称を取得したいのですが可能なのでしょうか?

方法を教えてください。宜しくお願いいたします。

Aベストアンサー

参考URLにその方法が書いてあります。

参考URL:http://www.kit.co.jp/vbit/QAndA04.htm#コンピュータ名を取得するには

QVBでネットワーク上のコンピュータ名をチェック

ある コンピュータ名を持つコンピュータがネットワークに繋がっているかどうかを調べて
返すということをしたいのですが…

例えば テキストボックスtext1 に"CP1"と入力して
コマンドボタンを押すと、ネットワーク上でCP1 が認識できたら
OKとメッセージ表示、できなかったらNOとメッセージ表示と。

NET VIEW などのコマンドを使えばよいのでしょうか。

Aベストアンサー

APIを使ってネットワークに接続されているコンピュータ名を取得します。
Dim nr As NETRESOURCE
Dim lpnr As LPNETRESOURCE
Dim bnr(1000) As Byte
Dim strRemoteName As String
Dim strComNeme As String
Dim hEnum As Long
Dim BufSize As Long
Dim ret As Long

strRemoteName = String$(512, 0)

nr.dwScope = RESOURCE_GLOBALNET
nr.dwType = RESOURCETYPE_ANY
nr.dwDisplayType = RESOURCEDISPLAYTYPE_DOMAIN
nr.dwUsage = RESOURCEUSAGE_CONTAINER
nr.lpRemoteName = "ドメイン名"
nr.lpProvider = "Microsoft Windows Network"

ret = WNetOpenEnum(RESOURCE_GLOBALNET, RESOURCETYPE_ANY, 0, nr, hEnum)
BufSize = 1000

Do While WNetEnumResource(hEnum, 1, bnr(0), BufSize) = NO_ERROR
MoveMemory lpnr, bnr(0), Len(lpnr)
lstrcpy strRemoteName, lpnr.lpRemoteName
Debug.Print Left$(strRemoteName, InStr(strRemoteName, vbNullChar) - 1)
Loop

WNetCloseEnum hEnum
でネットワーク上のコンピュータ名を取得できるのでその中に指定したコンピュータ名があればOKなければNoのメッセージを出す。

APIを使ってネットワークに接続されているコンピュータ名を取得します。
Dim nr As NETRESOURCE
Dim lpnr As LPNETRESOURCE
Dim bnr(1000) As Byte
Dim strRemoteName As String
Dim strComNeme As String
Dim hEnum As Long
Dim BufSize As Long
Dim ret As Long

strRemoteName = String$(512, 0)

nr.dwScope = RESOURCE_GLOBALNET
nr.dwType = RESOURCETYPE_ANY
nr.dwDisplayType = RESOURCEDISPLAYTYPE_DOMAIN
nr.dwUsage = RESOURCEUSAGE_CONTAINER
nr.lpRemoteName = "ドメイン名"
nr.lpP...続きを読む


このQ&Aを見た人がよく見るQ&A

人気Q&Aランキング

おすすめ情報