ラベル Windows の投稿を表示しています。 すべての投稿を表示
ラベル Windows の投稿を表示しています。 すべての投稿を表示

2022/09/05

Hyper-Vの統合サービスでつまづいたメモ。

パソコン関係から離れていたのでひさびさの投稿(・・;

Windows11 Hyper-VにWindows7 32bit/64bitを作成

初めにゲストOSにWindows7 32bit版をインストールしてみたら問題なく作れたので、同じようにWindows7 64bit版もやっていったんですが、インストールされたドライバが全然異なり、32bit版の方は「Hyper-V xxx ドライバ」なんて専用のものが入っていたのですが、64bit版の方は汎用ドライバしか入ってなくて調べだした感じです。


統合サービス?

以前のHyper-Vでは管理メニューから「統合サービスのインストール」ってものがあったようで、これで各種ドライバが入ってくれた用なのですが、現在使用しているHyper-VではWindowsUpdateで自動的に入るっぽいです。

ですが64bit版の方ではインストールされなかった?未対応?そこまではわからなかったです。


ダウンロード

↓コレ入れるらしい、microsoft support

Hyper-V integration components update for Windows

ただcabファイルで普通には入れられないっぽい。WindowsServer触ってる人だったら余裕なのかも知れない(・・;


インストール

ここ参照

How to install integration services when the virtual machine is not running

インストールというよりはパッチを当てるって感じです。

1.チェックポイントを無効にしてゲストOS停止、しばらくすると差分ファイルがvhdxファイルに反映されて1つにまとまる

 以後PowerShellの作業

2.vhdxファイルをドライブに割り当てる

3.書き込み可能設定にする

4.ドライブに対してcabファイルを書き込む。


32bit版の物とは、若干動作が違うけどグラフィックドライバとマウスリリースキーを押さなくてよくなったのでストレスなく使えるようになりました。




2012/04/10

[ ルーター再起動スクリプト - Windows PHP ]

ルーター再起動

最近回線の調子が悪くて、いちいちルーター管理画面開くのが面倒だったので、なんとなく作ってみた。

ルーターはNTT-ME系のなにか。。。


やっている事は単純で、Basic認証でルーター管理開いたら、切断・接続のフォームをPOSTしてあげるだけ。。。

書いている途中に気づいたが。。。再起動ではなかった(・ω・;、回線の切断と接続でした。

このPHPをbatで実行する感じに。

ルーターの管理画面のHTMLソースを見て何をPOSTで送っているか調べてみると自分用のができるかと思う。

PHPスクリプト

<?php
    include_once("HTTP/Request.php");
    $request_option=array(
        "timeout"=>"3600",
        "allowRedirects"=>true,
        "maxRedirects"=>5
    );
 
    $host="http://192.168.x.x/";
    $url="{$host}/cgi-bin/main.cgi?mbg_webname=pppconnect";
 
    $http = new HTTP_Request($url,$request_option);
    $http->setBasicAuth("username","password");
 
    $http->setMethod(HTTP_REQUEST_METHOD_POST);
    $http->addPostData("mbg_webname", "pppconnect");
    $http->addPostData("ppp_session", "1");
    $http->addPostData("mbg_disconnect", "切断");
 
    $response=$http->sendRequest();
    if(!PEAR::isError($response)){
        $ret_code=$http->getResponseCode();
        $ret_body=$http->getResponseBody();
    }
 
    sleep(3);
 
    $http->clearPostData();
    $http->setMethod(HTTP_REQUEST_METHOD_POST);
    $http->addPostData("mbg_webname", "pppconnect");
    $http->addPostData("ppp_session", "1");
    $http->addPostData("mbg_connect", "接続");
 
    $response=$http->sendRequest();
    if(!PEAR::isError($response)){
        $ret_code=$http->getResponseCode();
        $ret_body=$http->getResponseBody();
    }
    sleep(3);
 
?>

2012/04/03

UOA ツール 開発 #008 - UO UOA TOOL for Visual Basic , 自動化、便利、マクロ、自分で管理などなど(ソース付き)

決まり文句

この記事で紹介しているのはネットゲームのウルティマオンラインのツール開発に関する内容ですが、ウィンドウメッセージを送ったり受け取ったりしたことの無い方には、VBでアプリケーション間通信の手助けとなるコードが書かれてるかもしれません。

途中からこの記事を見た方は、こちらから全て見ることができます。

これまでの内容で取得できたもの

・アカウント名/アカウントID

・サーバー名

・キャラ名/キャラID

・スキル(スキルID/日本語名称/英語名称/表示値/ベース/ロック状態)

スキル管理ツールに必要なデータを取得できたかと思います。

後はVBのスキル次第で好きなものが作れるかなと。


私はというと・・・保存形式をXMLにしようかと調べていたらLINQという機能があることに気づいたのですが、データ量もそれほどないしINIにしてしまおうか。。。と悩み中。まったく進みません(・ω・;

MSDNの Visual Basic における XML

スキル定義

    Public UOA_SKILL_NAME(,) As String = { _
        {"Alchemy", "錬金術"}, _
        {"Anatomy", "解剖学"}, _
        {"Animal Lore", "動物学"}, _
        {"Item ID", "アイテム鑑定"}, _
        {"Armslore", "武器学"}, _
        {"Parrying", "シールド"}, _
        {"Begging", "物乞い"}, _
        {"Blacksmithy", "鍛冶"}, _
        {"Bowcraft", "弓矢製作"}, _
        {"Peacemaking", "沈静化"}, _
        {"Camping", "キャンピング"}, _
        {"Carpentry", "大工"}, _
        {"Cartography", "地図作成"}, _
        {"Cooking", "料理"}, _
        {"Detect Hidden", "探知"}, _
        {"Discordance", "不調和"}, _
        {"Evaluate Intelligence", "知性評価"}, _
        {"Healing", "治療"}, _
        {"Fishing", "釣り"}, _
        {"Forensic Evaluation", "検死"}, _
        {"Herding", "牧羊"}, _
        {"Hiding", "潜伏"}, _
        {"Provocation", "扇動"}, _
        {"Inscription", "書写"}, _
        {"Lockpicking", "鍵開け"}, _
        {"Magery", "魔法"}, _
        {"Magic Resistance", "魔法抵抗"}, _
        {"Tactics", "戦術"}, _
        {"Snooping", "覗き"}, _
        {"Musicianship", "楽器"}, _
        {"Poisoning", "毒"}, _
        {"Archery", "アーチェリー"}, _
        {"Spirit Speak", "霊話"}, _
        {"Stealing", "窃盗"}, _
        {"Tailoring", "裁縫"}, _
        {"Animal Taming", "調教"}, _
        {"Taste ID", "味見"}, _
        {"Tinkering", "細工"}, _
        {"Tracking", "追跡"}, _
        {"Veterinary", "獣医学"}, _
        {"Swordsmanship", "ソード"}, _
        {"Mace Fighting", "メイス"}, _
        {"Fencing", "フェンシング"}, _
        {"Wrestling", "レスリング"}, _
        {"Lumberjacking", "伐採"}, _
        {"Mining", "採掘"}, _
        {"Meditation", "瞑想"}, _
        {"Stealth", "ステルス"}, _
        {"Remove Trap", "罠解除"}, _
        {"Necromancy", "ネクロマンシー"}, _
        {"Focus", "フォーカス"}, _
        {"Chivalry", "騎士道"}, _
        {"Bushido", "武士道"}, _
        {"Ninjitsu", "忍術"}, _
        {"Spellweaving", "織成呪文"}, _
        {"Mysticism", "神秘呪文"}, _
        {"Imbuing", "練成"}, _
        {"Throwing", "スローイング"} _
    }

2012/03/23

UOA ツール 開発 #007 - UO UOA TOOL for Visual Basic , 自動化、便利、マクロ、自分で管理などなど(ソース付き)

決まり文句

この記事で紹介しているのはネットゲームのウルティマオンラインのツール開発に関する内容ですが、ウィンドウメッセージを送ったり受け取ったりしたことの無い方には、VBでアプリケーション間通信の手助けとなるコードが書かれてるかもしれません。

途中からこの記事を見た方は、こちらから全て見ることができます。

スキル情報取得

取得するにあたって、スキル番号が必要だったのですが、初めは分からなかったので0~100の間を取得してみた所、練成・神秘・スローイングまで含めた0~57のIDでした。

スキル関係で取得できたのは、表示値、ベース値、ロック状態、スキル名の4種類。


尚、スキル名はUOAの設定で英語表記を使用していれば英語の名称、日本語表記を設定していれば日本語の名称が帰って来るようです。

スキルキャップも欲しかったのですが、色々試した所見当たりませんでした・・・

Form(抜粋)

    <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_SKILL_LEVEL
                txtLog.AppendText(String.Format("スキル値変動 No:{1} Value:{2}{0}", vbCrLf, WMSG.WParam, WMSG.LParam))
        End Select
        MyBase.WndProc(WMSG)
    End Sub
 
    Private Sub btnGetSkillDisplay_Click(sender As System.Object, e As System.EventArgs) Handles btnGetSkillDisplay.Click
        Dim Result As Integer
        For i As Integer = 0 To 100
            Result = UOALink_GetSkillDisplay(i)
            If (Result = -1) Then Exit For
            txtLog.AppendText(String.Format("SkillDisplay No:{1} Value:{2}{0}", vbCrLf, i, Result))
        Next
    End Sub
 
    Private Sub btnGetSkillBased_Click(sender As System.Object, e As System.EventArgs) Handles btnGetSkillBased.Click
        Dim Result As Integer
        For i As Integer = 0 To 100
            Result = UOALink_GetSkillBased(i)
            If (Result = -1) Then Exit For
            txtLog.AppendText(String.Format("SkillBased No:{1} Value:{2}{0}", vbCrLf, i, Result))
        Next
    End Sub
 
    Private Sub btnGetSkillLock_Click(sender As System.Object, e As System.EventArgs) Handles btnGetSkillLock.Click
        Dim Result As Integer
        For i As Integer = 0 To 100
            Result = UOALink_GetSkillLock(i)
            If (Result = -1) Then Exit For
            txtLog.AppendText(String.Format("SkillLock No:{1} Value:{2}{0}", vbCrLf, i, Result))
        Next
    End Sub
 
    Private Sub btnGetSkillName_Click(sender As System.Object, e As System.EventArgs) Handles btnGetSkillName.Click
        Dim Result As Integer
        Dim Buf As String
        For i As Integer = 0 To 100
            Result = UOALink_GetSkillName(i)
            If (Result = -1) Then Exit For
            Buf = fncGetAtomString(Result)
            txtLog.AppendText(String.Format("SkillName No:{1} Value:{2}{0}", vbCrLf, i, Buf))
        Next
    End Sub
 
    Private Sub btnMessageCheck_Click(sender As System.Object, e As System.EventArgs) Handles btnMessageCheck.Click
        Dim Result As Integer
        Dim WM As Integer = CInt(Me.txtWM.Text)
        Dim WPARAM As Integer = CInt(Me.txtWPARAM.Text)
        Dim LPARAM As Integer = CInt(Me.txtLPARAM.Text)
        Result = UOALink_SendMessage(WM_USER + WM, WPARAM, LPARAM)
        txtLog.AppendText(String.Format("WM Check WM:{1} WPARAM:{2} LPARAM:{3} RESULT:{4}{0}", vbCrLf, WM, WPARAM, LPARAM, Result))
    End Sub

Module(抜粋)

    Public Const WM_UOA_GET_SKILL As Integer = WM_USER + 203
    Public Const WM_UOA_SKILL_LEVEL As Integer = WM_USER + 306
 
    Public Const UOA_GET_SKILL_DISPLAY As Integer = 0
    Public Const UOA_GET_SKILL_BASED As Integer = 1
    Public Const UOA_GET_SKILL_LOCK As Integer = 2
    Public Const UOA_GET_SKILL_NAME As Integer = 3
 
    Public Const UOA_SKILL_STATUS_UP As Integer = 0
    Public Const UOA_SKILL_STATUS_DOWN As Integer = 1
    Public Const UOA_SKILL_STATUS_LOCK As Integer = 2
 
 
    Public Function UOALink_GetSkillDisplay(ByVal SkillNo As Integer) As Integer
        Dim Result As Integer
        Result = UOALink_SendMessage(WM_UOA_GET_SKILL, SkillNo, UOA_GET_SKILL_DISPLAY)
        Return Result
    End Function
 
    Public Function UOALink_GetSkillBased(ByVal SkillNo As Integer) As Integer
        Dim Result As Integer
        Result = UOALink_SendMessage(WM_UOA_GET_SKILL, SkillNo, UOA_GET_SKILL_BASED)
        Return Result
    End Function
 
    Public Function UOALink_GetSkillLock(ByVal SkillNo As Integer) As Integer
        Dim Result As Integer
        Result = UOALink_SendMessage(WM_UOA_GET_SKILL, SkillNo, UOA_GET_SKILL_LOCK)
        Return Result
    End Function
 
    Public Function UOALink_GetSkillName(ByVal SkillNo As Integer) As Integer
        Dim Result As Integer
        Result = UOALink_SendMessage(WM_UOA_GET_SKILL, SkillNo, UOA_GET_SKILL_NAME)
        Return Result
    End Function

ダウンロード

開いたら File→Download で保存することができます。

UOA_Tool.#007.zip

2012/03/22

UOA ツール 開発 #006 - UO UOA TOOL for Visual Basic , 自動化、便利、マクロ、自分で管理などなど(ソース付き)

決まり文句

この記事で紹介しているのはネットゲームのウルティマオンラインのツール開発に関する内容ですが、ウィンドウメッセージを送ったり受け取ったりしたことの無い方には、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 で保存することができます。

UOA_Tool.#006.zip

2012/03/16

UOA ツール 開発 #005 - UO UOA TOOL for Visual Basic , 自動化、便利、マクロ、自分で管理などなど(ソース付き)

決まり文句

この記事で紹介しているのはネットゲームのウルティマオンラインのツール開発に関する内容ですが、ウィンドウメッセージを送ったり受け取ったりしたことの無い方には、VBでアプリケーション間通信の手助けとなるコードが書かれてるかもしれません。

途中からこの記事を見た方は、こちらから全て見ることができます。

シャード名、アカウント情報、キャラ情報

シャード名は普通に取得することができましたが、キャラ名やアカウント名は取得できなくて、UOAの管理しているIDとして取得できました。

UO.cfgにアカウント名、キャラ名が *ログアウト時* に保存されますが、クライアントが異常終了したときは保存されないと思うので若干問題が出そうです(・・;

ユーザーIDとやらも取得できましたがこちらは、パーティ関連で使うらしいので今回は必要なかったかもでした。

Form(抜粋)

    Private ShadeName As String = ""
    Private AcctID As Integer = 0
    Private UserID As Integer = 0
    Private CharaID As Integer = 0
 
    <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_LOGON
                CharaID = WMSG.WParam
                UserID = UOALink_GetUserID()
                AcctID = UOALink_GetAcctID()
                ShadeName = UOALink_GetShadeName()
                txtLog.AppendText(String.Format("ログインしました{0}", vbCrLf))
                txtLog.AppendText(String.Format(" ShadeName:{1} AcctID:{2} CharaID:{3} UserID:{4}{0}", vbCrLf, AcctID, CharaID, UserID))
                txtLog.AppendText(String.Format("{0}", vbCrLf))
 
            Case WM_UOA_LOGOUT
                CharaID = 0
                UserID = 0
                AcctID = 0
                ShadeName = ""
                txtLog.AppendText(String.Format("ログアウトしました{0}", vbCrLf))
                txtLog.AppendText(String.Format("{0}", vbCrLf))
 
        End Select
        MyBase.WndProc(WMSG)
    End Sub

Module(抜粋)

    Public Const WM_UOA_GET_USER_ID As Integer = WM_USER + 210
    Public Const WM_UOA_GET_SHARD_NAME As Integer = WM_USER + 211
    Public Const WM_UOA_GET_ACCOUNT_IDENTIFIER As Integer = WM_USER + 216
    Public Const WM_UOA_LOGON As Integer = WM_USER + 303
    Public Const WM_UOA_LOGOUT As Integer = WM_USER + 308
 
    Public Function UOALink_GetShadeName() As String
        Dim Result As Integer
        Dim Buf As String = ""
        Result = UOALink_SendMessage(WM_UOA_GET_SHARD_NAME, 0, 0)
        If (Result <> 0) Then
            Buf = fncGetAtomString(Result)
        End If
        Return Buf
    End Function
 
    Public Function UOALink_GetAcctID() As Integer
        Dim Result As Integer
        Result = UOALink_SendMessage(WM_UOA_GET_ACCOUNT_IDENTIFIER, 0, 0)
        Return Result
    End Function
 
    Public Function UOALink_GetUserID() As Integer
        Dim Result As Integer
        Result = UOALink_SendMessage(WM_UOA_GET_USER_ID, 0, 0)
        Return Result
    End Function

ダウンロード

開いたら File→Download で保存することができます。

UOA_Tool.#005.zip

2012/03/13

[iTunesのデータを移動]

以前SSDのベンチマークを取ったときに、ふと気がついたのが、

特にソフト沢山インストールしているわけじゃないのにCドライブ使用容量56G・・・

おかしいと思ってフォルダの容量を見ていくと・・・



iTune関連のバックアップがすごいことになってました・・・



ググってみるとジャンクションと言って、シンボリックリンクみたいにショートカットを貼って対応するというものでした。

普通のショートカットとは違うもの見たいですが、これはまた今度調べるとしてとりあえず対処。


Windows Server 2003 Resource Kit Toolsに含まれているlinkd.exeを使用するらしい。

まず"C:\users\[username]\AppData\Local\Apple Computer"と"C:\users\[username]\AppData\Roming\Apple Computer"を別のディスクの変更場所へ移動

そしてリンク作成

linkd.exe "C:\users\[username]\AppData\Local\Apple Computer" "E:\iTune\AppData\Local\Apple Computer"

linkd.exe "C:\users\[username]\AppData\Roming\Apple Computer" "E:\iTune\AppData\Roming\Apple Computer"

移動したファイルは35G・・・SSDにとってはは大きすぎるので気づいてよかったという感じでした(・ω・;

※上記パスはWindows7の場合です。




2012/03/11

UOA ツール 開発 #004 - UO UOA TOOL for Visual Basic , 自動化、便利、マクロ、自分で管理などなど(ソース付き)

決まり文句

この記事で紹介しているのはネットゲームのウルティマオンラインのツール開発に関する内容ですが、ウィンドウメッセージを送ったり受け取ったりしたことの無い方には、VBでアプリケーション間通信の手助けとなるコードが書かれてるかもしれません。

途中からこの記事を見た方は、こちらから全て見ることができます。

冴えない頭で考える

坦々と機能紹介していってもつまらないので・・・既に3日坊主になりかけ(・ω・;

何かを作る方向性にしようかと思って考えたのが、スキル管理!?っぽいのを。

私はソウルストーンで入れ替えしてるとどのキャラにスキル入ってるか忘れがちで、わざわざINして確認が面倒だと思うから

サーバー別、アカウント別、キャラ別に保存しておけるのが作れたらいいなと思う。

以前スキル管理ソフトあった気がしたのだけれど探しても見当たらず、ちょうどいいので作ってみようかなと。

2012/03/07

UOA ツール 開発 #003 - UO UOA TOOL for Visual Basic , 自動化、便利、マクロ、自分で管理などなど(ソース付き)

決まり文句

この記事で紹介しているのはネットゲームのウルティマオンラインのツール開発に関する内容ですが、ウィンドウメッセージを送ったり受け取ったりしたことの無い方には、VBでアプリケーション間通信の手助けとなるコードが書かれてるかもしれません。

途中からこの記事を見た方は、こちらから全て見ることができます。

ログイン/ログアウト

1.UOAのハンドルを取得する

 FindWindowで“UOASSIST-TP-MSG-WND”を探すとハンドルを取得できる

2.UOAに自分のウィンドウハンドルを通知

 SendMessageでUOAハンドルめがけてWM_USER+200と自分のハンドルを送る

・ログアウト

1.上記2を再度行うとログアウトできる

Form(抜粋)

    Private Sub btnLogin_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnLogin.Click
        Dim Result As Integer
        Result = UOALink_Login(Me.Handle)
        Select Case Result
            Case -1
                txtLog.AppendText(String.Format("UOALink_Login = {1}: UOAが見つからない{0}", vbCrLf, Result))
            Case 0
                txtLog.AppendText(String.Format("UOALink_Login = {1}: スロットが一杯{0}", vbCrLf, Result))
            Case 1
                txtLog.AppendText(String.Format("UOALink_Login = {1}: ログイン成功{0}", vbCrLf, Result))
            Case 2
                txtLog.AppendText(String.Format("UOALink_Login = {1}: ログアウト成功{0}", vbCrLf, Result))
            Case Else
                txtLog.AppendText(String.Format("UOALink_Login = {1}: 不明な戻り値{0}", vbCrLf, Result))
        End Select
    End Sub

Module(抜粋)

    Public Const UOA_CLASSNAME As String = "UOASSIST-TP-MSG-WND"
    Public UOA_hWnd As Integer
    Public Const WM_USER As Integer = &H400S
    Public Const WM_UOA_REQUEST_DATA As Integer = WM_USER + 200
 
    Public Function fncGetWindowHandle( _
    ByVal pClassName As String) As Integer
        Return FindWindow(pClassName, vbNullString)
    End Function
 
    Public Function UOALink_SendMessage( _
        ByVal WM_UOA As Integer, _
        ByVal wParam As Integer, _
        ByVal lParam As Integer) As Integer
        Dim Result As Integer
        UOA_hWnd = fncGetWindowHandle(UOA_CLASSNAME)
        If UOA_hWnd = 0 Then
            Return -1
        End If
        Result = SendMessage(UOA_hWnd, WM_UOA, wParam, lParam)
        Return Result
    End Function
 
    Public Function UOALink_Login(ByVal hWnd As Integer, Optional ByVal GetHouse As Integer = 0) As Integer
        '' hwnd   = メッセージを受け取るウィンドウハンドル
        '' Result = -1 : UOALink_SendMessageでUOAのウィンドウが見つからないと-1を設定
        '' Result =  0 : スロットが一杯
        '' Result =  1 : ログイン
        '' Result =  2 : ログアウト
        Dim Result As Integer
        Result = UOALink_SendMessage(WM_UOA_REQUEST_DATA, hWnd, GetHouse)
        Return Result
    End Function

ダウンロード

開いたら File→Download で保存することができます。

UOA_Tool.#003.zip

2012/02/25

UOA ツール 開発 #002 - UO UOA TOOL for Visual Basic , 自動化、便利、マクロ、自分で管理などなど(ソース付き)

決まり文句

この記事で紹介しているのはネットゲームのウルティマオンラインのツール開発に関する内容ですが、ウィンドウメッセージを送ったり受け取ったりしたことの無い方には、VBでアプリケーション間通信の手助けとなるコードが書かれてるかもしれません。

途中からこの記事を見た方は、こちらから全て見ることができます。

基本な流れ

1.UOAに情報ちょうだいとお願いする(UOAにログイン)

 ↓

2.UOAにxxxを教えてとお願いする

 その場で値が戻ってくるのもあるし、

 非同期でウィンドウに通知してくるものもある。

 ↓

3.UOAに情報はもう要らないですとお願いする(UOAからログアウト)


※UOAのログイン数に制限があるので必ずログアウトはした方がいいです。

 デバック時にログインできなくなってしまったらUOA再起動という感じになります。


最低限必要なもの

FindWindow - ログインするときにUOAを見つけるのに必要

SendMessage - UOAにメッセージを送るのに必要

GlobalGetAtomName,GlobalDeleteAtom - UOAから文字列を受け取るときに必要

ウィンドウプロシージャー - 非同期で戻ってくるメッセージを受け取るのに必要



モジュールの定義がまだまだ足りないですが、

取説(UOA Infomation)と雛形(下記コード)があれば

VBが少ししか分からないという人でもある程度作れるのではないかと思う。

Form

Imports System.Runtime.InteropServices
Public Class form_name
    <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_RESOURCE_COUNT_FINISHED
            Case WM_UOA_SPELL_WAS_ATTEMPTED
            Case WM_UOA_LOGON
            Case WM_UOA_MAGERY_SKILL_LEVEL
            Case WM_UOA_CURRENT_INT_AND_MANA
            Case WM_UOA_SKILL_LEVEL
            Case WM_UOA_MACRO_FINISHED
            Case WM_UOA_LOGOUT
            Case WM_UOA_CURRENT_MAX_HP_AND_HP
            Case WM_UOA_CURRENT_DEX_AND_STAM
            Case WM_UOA_ADD_HOUSE_BOAT
            Case WM_UOA_FACET_LAND_INFO
            Case WM_UOA_POWER_HOUR_ENTERED
        End Select
        MyBase.WndProc(WMSG)
    End Sub
End Class

Module

Imports System.Runtime.InteropServices
Module module_name
 
    <DllImport("user32.dll", CharSet:=CharSet.Auto, _
    CallingConvention:=CallingConvention.StdCall)> _
    Public Function FindWindow( _
        ByVal lpClassName As String, _
        ByVal lpWindowName As String) As Integer
    End Function
 
    <DllImport("user32.dll", CharSet:=CharSet.Auto, _
    CallingConvention:=CallingConvention.StdCall)> _
    Public Function SendMessage( _
        ByVal hWnd As Integer, _
        ByVal wMsg As Integer, _
        ByVal wParam As Integer, _
        ByVal lParam As Integer) As Integer
    End Function
 
    <DllImport("kernel32.dll", CharSet:=CharSet.Unicode, _
    CallingConvention:=CallingConvention.StdCall)> _
    Public Function GlobalGetAtomName( _
        ByVal nAtom As Integer, _
        ByVal lpBuffer As System.Text.StringBuilder, _
        ByVal nSize As Integer) As Integer
    End Function
 
    <DllImport("kernel32.dll", CharSet:=CharSet.Unicode, _
    CallingConvention:=CallingConvention.StdCall)> _
    Public Function GlobalDeleteAtom( _
        ByVal nAtom As Integer) As Integer
    End Function
 
    Public Const UOA_CLASSNAME As String = "UOASSIST-TP-MSG-WND"
    Public UOA_hWnd As Integer
    Public Const WM_USER As Short = &H400S
    Public Const WM_UOA_REQUEST_DATA As Integer = WM_USER + 200
    Public Const WM_UOA_UCOUNT_RESOURCES As Integer = WM_USER + 201
    Public Const WM_UOA_GET_COORDS As Integer = WM_USER + 202
    Public Const WM_UOA_GET_SKILL As Integer = WM_USER + 203
    Public Const WM_UOA_GET_STAT As Integer = WM_USER + 204
    Public Const WM_UOA_SET_ACTIVE_MACRO As Integer = WM_USER + 205
    Public Const WM_UOA_PLAY_MACRO As Integer = WM_USER + 206
    Public Const WM_UOA_DISPLAY_TEXT As Integer = WM_USER + 207
    Public Const WM_UOA_REQUEST_HOUSE_BOAT_INFO As Integer = WM_USER + 208
    Public Const WM_UOA_ADD_COMMAND_LINE As Integer = WM_USER + 209
    Public Const WM_UOA_GET_USER_ID As Integer = WM_USER + 210
    Public Const WM_UOA_GET_SHARD_NAME As Integer = WM_USER + 211
    Public Const WM_UOA_ADD_USER_TO_PARTY As Integer = WM_USER + 212
    Public Const WM_UOA_GET_UO_WINDOW_HANDLE As Integer = WM_USER + 213
    Public Const WM_UOA_GET_POISON_STATUS As Integer = WM_USER + 214
    Public Const WM_UOA_SET_SKILL_LOCK As Integer = WM_USER + 215
    Public Const WM_UOA_GET_ACCOUNT_IDENTIFIER As Integer = WM_USER + 216
    Public Const WM_UOA_RESOURCE_COUNT_FINISHED As Integer = WM_USER + 301
    Public Const WM_UOA_SPELL_WAS_ATTEMPTED As Integer = WM_USER + 302
    Public Const WM_UOA_LOGON As Integer = WM_USER + 303
    Public Const WM_UOA_MAGERY_SKILL_LEVEL As Integer = WM_USER + 304
    Public Const WM_UOA_CURRENT_INT_AND_MANA As Integer = WM_USER + 305
    Public Const WM_UOA_SKILL_LEVEL As Integer = WM_USER + 306
    Public Const WM_UOA_MACRO_FINISHED As Integer = WM_USER + 307
    Public Const WM_UOA_LOGOUT As Integer = WM_USER + 308
    Public Const WM_UOA_CURRENT_MAX_HP_AND_HP As Integer = WM_USER + 309
    Public Const WM_UOA_CURRENT_DEX_AND_STAM As Integer = WM_USER + 310
    Public Const WM_UOA_ADD_HOUSE_BOAT As Integer = WM_USER + 311
    Public Const WM_UOA_DELETE_HOUSE_BOAT As Integer = WM_USER + 312
    Public Const WM_UOA_FACET_LAND_INFO As Integer = WM_USER + 313
    Public Const WM_UOA_POWER_HOUR_ENTERED As Integer = WM_USER + 314
 
    Public Function fncGetHIWORD( _
        ByVal i As Integer) As Integer
        Dim HIWORD As Integer = ((i And &HFFFF0000) \ 65536) And 65535
        Return HIWORD
    End Function
 
    Public Function fncGetLOWORD( _
        ByVal i As Integer) As Integer
        Dim LOWORD As Integer = i And 65535
        Return LOWORD
    End Function
 
    Public Function fncGetHILO( _
        ByVal HI As Integer, _
        ByVal LO As Integer) As Integer
        Dim i As Integer
        i = HI * 65536
        i = i Or (LO And 65535)
        Return i
    End Function
 
    Public Function fncGetWindowHandle( _
        ByVal pClassName As String) As Integer
        Return FindWindow(pClassName, vbNullString)
    End Function
 
    Public Function UOALink_SendMessage( _
        ByVal WM_UOA As Integer, _
        ByVal wParam As Integer, _
        ByVal lParam As Integer) As Integer
        Dim Result As Integer
        mUOAWnd = fncGetWindowHandle(UOA_CLASSNAME)
        If mUOAWnd = 0 Then
            Return -1
        End If
        Result = SendMessage(mUOAWnd, WM_UOA, wParam, lParam)
        Return Result
    End Function
 
    Public Function fncGetAtomString( _
        ByVal nAtom As Integer) As String
        Dim tmpLength As Integer = 256
        Dim tmpString = New System.Text.StringBuilder(tmpLength)
        Dim Result As Integer
        Result = GlobalGetAtomName(nAtom, tmpString, tmpLength)
        Result = GlobalDeleteAtom(nAtom)
        Return tmpString.ToString
    End Function
End Module

ダウンロード

開いたら File→Download で保存することができます。

UOA_Tool.#002.zip

2012/02/22

UOA ツール 開発 #001 - UO UOA TOOL for Visual Basic , 自動化、便利、マクロ、自分で管理などなど(ソース付き)

決まり文句

この記事で紹介しているのはネットゲームのウルティマオンラインのツール開発に関する内容ですが、ウィンドウメッセージを送ったり受け取ったりしたことの無い方には、VBでアプリケーション間通信の手助けとなるコードが書かれてるかもしれません。

途中からこの記事を見た方は、こちらから全て見ることができます。

情報元

元となる情報は、たまたま見つけたUOAホームページの隠しページでした、ウィンドウメッセージをやり取りして情報を提供するようなことが書かれてます。

あとはスキル関連の値を調べるのが面倒で調べてたら、delphiのプロジェクトを見つけたという感じです。

できることは、

「簡単なステータス管理」

「ただのMAPツール」

「リソース管理」

「UOAマクロ実行」

「スキル管理」

「詠唱ツール」

「画面に文字表示」

「ユーザーコマンドライン追加」


リソース管理、ステータス管理、詠唱ツール、スキル管理はUO内だけでも十分だし、マクロ、MAPツールは他の高性能ツール使ったほうがよさげ・・・

画面に文字表示は・・・

 ゲームを開始してから1時間がたちました.

 ゲームを開始してから2時間がたちました..

 ゲームを開始してから3時間がたちました...

 (うざっ)

もっと実用的な管理のためだったら使えそうですね。


大してできることはないじゃないですかって感じですが、自分好みの分かりやすいツールは作れそうです。

UOAssist information(こちらはもう見れなくなってるので貼り付け。)

UOAssist Interface for Delphi

 

SourceForgeにあるので見つかると思います。

2012/02/19

UOA ツール 開発 #000 - UO UOA TOOL for Visual Basic , 自動化、便利、マクロ、自分で管理などなど(ソース付き)

決まり文句

この記事で紹介しているのはネットゲームのウルティマオンラインのツール開発に関する内容ですが、ウィンドウメッセージを送ったり受け取ったりしたことの無い方には、VBでアプリケーション間通信の手助けとなるコードが書かれてるかもしれません。

途中からこの記事を見た方は、こちらから全て見ることができます。

初めに。

ふと気づいたら、昔のツール資料がなくなっているのに気づいて、やはり忘れないようにめもめも・・・

めもめもしていくのは、MMOのウルティマオンラインのツールについてですが・・・

ちょっと古いゲームですね。。。

UOの公式ツールである「UOA」に関してのツール作成の情報となります。パケット弄ったりはしないのでチートツールにはならない!?かと思います。

簡単にいうと、UOのクライアントとのやり取りはUOAが行っているので、ちょこっと情報をもらって、外部からUOAを操作しちゃおうかなってツール。

言語はVisual Basic 2010 Expressでめもめもです。

過去に作ったツール

UO Mining Master(掘り 支援 ツール)

※火ゴキと散歩してるだけで掘ってくれるツール。。。

※狙った鉱石をちょこっと操作で集めるようなツール。。。

2011/02/20

【高速なブラウザ?】

PCスペック依存で快適な環境

1.RAMディスクを作成
 http://www10.atwiki.jp/gavotterd/
 http://www.iodata.jp/promo/soft/ram/ramphantom.htm
 などを使用してRAMドライブを作成する

 設定例)RAMドライブ:R:\\

2.Google Chrome PortableをRAMディスクにインストール
 http://portableapps.com/apps/internet/google_chrome_portable

 設定例)インストール先 R:\GoogleChromePortable\

3.Chromeの設定
 ショートカットを作成してプロパティを開き、キャッシュオプションを付け加える

 設定例)
  リンク先:R:\GoogleChromePortable\GoogleChromePortable.exe --disk-cache-dir="R:\ChromePortableCache"
  作業フォルダ:R:\GoogleChromePortable

4.最後に
・再起動するたびにRAMドライブに入っているものは消えてしまうのでフォルダを別のドライブにバックアップ
・フォルダをR:\GoogleChromePortable2、R:\GoogleChromePortable3などとコピーしてリンク先などを変更でブラウザゲームなど多重起動可能に。