決まり文句
この記事で紹介しているのはネットゲームのウルティマオンラインのツール開発に関する内容ですが、ウィンドウメッセージを送ったり受け取ったりしたことの無い方には、VBでアプリケーション間通信の手助けとなるコードが書かれてるかもしれません。
途中からこの記事を見た方は、こちらから全て見ることができます。
アカウント名、キャラ名
前回の続きですが、今度はアカウント名とキャラ名をuo.cfgから取得する処理。
キャラクターがログアウトしたらuo.cfgを読み込んで名称を取得しようという考えです。
微妙にハマったのが、INIファイル読み込みだからと思ってGetProfileString使った所、uo.cfgにはセクション([xxx]ようなもの)が無くて、うまく読めなかった感じ。(結構ネット調べたんですが見つからなかったので、分かる方いたら教えて下さい・・・)
結局は正規表現で無理やり抜き出し(・・;
そもそもINIファイルじゃないっ って話かもしれませんが。
Form(抜粋)
Private AcctName As String = ""
Private PlayerName As String = ""
Private UO_Path As String = ""
<System.Security.Permissions.PermissionSetAttribute(System.Security.Permissions.SecurityAction.Demand, Name:="FullTrust")> _
Protected Overrides Sub WndProc(ByRef WMSG As Message)
Select Case (WMSG.Msg)
Case WM_UOA_LOGOUT
AcctName = UO_GetAcctID(UO_Path)
PlayerName = UO_GetPlayerName(UO_Path)
txtLog.AppendText(String.Format("AcctName:{1} AcctID:{2}{0}", vbCrLf, AcctName, AcctID))
txtLog.AppendText(String.Format("PlayerName:{1} PlayerID:{2}{0}", vbCrLf, PlayerName, CharaID))
End Select
MyBase.WndProc(WMSG)
End Sub
Private Sub txtUOPath_TextChanged(sender As System.Object, e As System.EventArgs) Handles txtUOPath.TextChanged
UO_Path = txtUOPath.Text
End Sub
Module(抜粋)
Public Const UOCFG_ACCTID As String = "AcctID"
Public Const UOCFG_PLAYERNAME As String = "PlayerName"
Public Function UO_GetAcctID(ByVal strFilePath As String) As String
Dim Result As String = ""
If (strFilePath.Trim = "") Then Return Result
If Not (System.IO.File.Exists(strFilePath)) Then Return Result
Dim sr As New System.IO.StreamReader(strFilePath)
Dim buf As String = sr.ReadToEnd()
sr.Close()
Dim reg As New System.Text.RegularExpressions.Regex( _
String.Format("{0}=[A-Z0-9]+", UOCFG_ACCTID), _
System.Text.RegularExpressions.RegexOptions.IgnoreCase)
Dim match As System.Text.RegularExpressions.Match = reg.Match(buf)
If (match.Success) Then
Dim ValueArray() As String = match.Value.Split("=")
If (Not IsNothing(ValueArray(1))) Then
Result = ValueArray(1)
End If
End If
Return Result
End Function
Public Function UO_GetPlayerName(ByVal strFilePath As String) As String
Dim Result As String = ""
If (strFilePath.Trim = "") Then Return Result
If Not (System.IO.File.Exists(strFilePath)) Then Return Result
Dim sr As New System.IO.StreamReader(strFilePath)
Dim buf As String = sr.ReadToEnd()
sr.Close()
Dim reg As New System.Text.RegularExpressions.Regex( _
String.Format("{0}=[A-Z0-9]+", UOCFG_PLAYERNAME), _
System.Text.RegularExpressions.RegexOptions.IgnoreCase)
Dim match As System.Text.RegularExpressions.Match = reg.Match(buf)
If (match.Success) Then
Dim ValueArray() As String = match.Value.Split("=")
If (Not IsNothing(ValueArray(1))) Then
Result = ValueArray(1)
End If
End If
Return Result
End Function
ダウンロード
開いたら File→Download で保存することができます。
0 件のコメント:
コメントを投稿