
No.2ベストアンサー
- 回答日時:
>WTSQuerySessionInformation
OKWEBで「WTSQuerySessionInformation」で検索をかけ、引っかかった2件をベースに、DOBON.NETさんのTipsを見ながら、コンバートしてみました。
http://okweb.jp/kotaeru.php3?q=1409616
http://okweb.jp/kotaeru.php3?q=1419369
http://dobon.net/
私は旧式な人間なため、VB6感覚で作成したために、内部で文字コード変換を行っております。
おそらくAPIの宣言次第では、コンバート部は不要だと思うのですが、調べるのが面倒なので、そのまま載せちゃいます。
それと
http://www.microsoft.com/japan/msdn/library/defa …
のWTSInfoClassのデータの形式を見ると、
「関数をターミナルサービスコンソールから呼び出すと、NULL ポインタを受け取ります」
とあります。
私のところでは、ターミナルサービスコンソールから呼び出す実験をしておりません。
だから、結果が正しいかどうかは無視として、とりあえずコンバートはこんな感じかなぁっていうところです。
[モジュール]Module1.vb
[クラス]WTS.vb
の構成です。
-----------------------------------------------
Module Module1
Sub Main()
Dim objWTS As New WTS()
Dim strWk As String
If objWTS.Get_WTSQuerySessionInformation(WTS.WTS_INFO_CLASS.WTSUserName, strWk) Then
MsgBox(strWk, MsgBoxStyle.Information)
Else
MsgBox("失敗", MsgBoxStyle.Critical)
End If
objWTS = Nothing
End Sub
End Module
-----------------------------------------------
Imports System.Text
Imports System.Runtime.InteropServices
Public Class WTS
Public Enum WTS_INFO_CLASS
WTSInitialProgram
WTSApplicationName
WTSWorkingDirectory
WTSOEMId
WTSSessionId
WTSUserName
WTSWinStationName
WTSDomainName
WTSConnectState
WTSClientBuildNumber
WTSClientName
WTSClientDirectory
WTSClientProductId
WTSClientHardwareId
WTSClientAddress
WTSClientDisplay
WTSClientProtocolType
End Enum
<DllImport("kernel32.dll")> _
Private Shared Function lstrlen( _
ByVal Ptr As Integer _
) As Integer
End Function
<DllImport("kernel32.dll")> _
Private Shared Function lstrcpy( _
ByVal lpString1 As Integer _
, ByVal lpString2 As Integer _
) As Integer
End Function
<DllImport("wtsapi32.dll")> _
Private Shared Function WTSOpenServer( _
ByVal pServerName As Integer _
) As Integer
End Function
<DllImport("wtsapi32.dll")> _
Private Shared Sub WTSFreeMemory( _
ByRef pMemory As Integer _
)
End Sub
<DllImport("wtsapi32.dll")> _
Private Shared Function WTSQuerySessionInformation( _
ByVal hServer As Integer _
, ByVal SessionId As Integer _
, ByVal WTSInfoClass As WTS_INFO_CLASS _
, ByRef ppBuffer As Integer _
, ByRef pBytesReturned As Integer _
) As Boolean
End Function
Public Function Get_WTSQuerySessionInformation(ByVal inWTSInfoClass As WTS_INFO_CLASS, ByRef 取得文字列 As String) As Boolean
Dim l_strRet As String = ""
Dim hServer As Integer
Dim blnRet As Boolean
Dim dwBytesReturned As Integer
Dim lpBuffer As Integer
Const WTS_CURRENT_SESSION As Integer = 0
hServer = WTSOpenServer(0)
blnRet = WTSQuerySessionInformation(hServer, WTS_CURRENT_SESSION, inWTSInfoClass, lpBuffer, dwBytesReturned)
If blnRet Then
l_strRet = GetStringFromPointer(lpBuffer)
Call WTSFreeMemory(lpBuffer)
End If
取得文字列 = l_strRet
Return blnRet
End Function
'*********************************************
'** ポインタから文字列取得
'*********************************************
Private Function GetStringFromPointer(ByVal inPointer As Integer) As String
Dim l_strRet As String = ""
'文字長取得
Dim l_intLen As Integer = lstrlen(inPointer)
If (l_intLen > 0) Then
Dim bytAry(l_intLen - 1) As Byte
Dim gch As GCHandle = GCHandle.Alloc(bytAry, GCHandleType.Pinned)
Dim address As Integer = gch.AddrOfPinnedObject().ToInt32()
Call lstrcpy(address, inPointer)
gch.Free()
Call Conv_UTF8_to_SJIS(bytAry, l_strRet)
End If
Return l_strRet
End Function
'*********************************************
'** エンコード変換
'*********************************************
Private Sub Conv_UTF8_to_SJIS(ByVal inByte() As Byte, ByRef otStr As String)
Dim strSJIS As Encoding = Encoding.GetEncoding("Shift-JIS")
Dim strUTF8 As Encoding = Encoding.UTF8
Dim asciiBytes As Byte() = Encoding.Convert(strUTF8, strSJIS, inByte)
Dim chrSJIS(strSJIS.GetCharCount(asciiBytes, 0, asciiBytes.Length - 1)) As Char
strSJIS.GetChars(asciiBytes, 0, asciiBytes.Length, chrSJIS, 0)
otStr = New String(chrSJIS)
End Sub
End Class
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- プリンタ・スキャナー CANONのプリンターを新しいのと入れ替えたら印刷できません 1 2023/08/07 22:53
- プリンタ・スキャナー 印刷ができない 6 2022/04/01 20:47
- プリンタ・スキャナー 【至急】EPSON EP-808AB プリンターUSBメモリーが反応しない 3 2022/06/12 01:13
- その他(Microsoft Office) Excelのマクロについて教えてください。 1 2022/03/25 10:03
- プリンタ・スキャナー キャノンmp490プリンター【エラー番号5400】で【プリンタートラブルが発生しました。電源を入れ直 2 2023/07/24 17:45
- プリンタ・スキャナー 家庭内LANでのプリンター共有の設定について教えてください 3 2022/08/12 14:20
- プリンタ・スキャナー 封筒印刷 差出人印刷ずれる 4 2022/05/01 10:12
- Android(アンドロイド) プリンターが見つかりません 4 2023/05/05 16:54
- プリンタ・スキャナー 2台のプリンターでそれぞれ異なる様式の帳票を印刷したい。 2 2022/09/06 10:07
- Excel(エクセル) Excelであるシートだけ印刷できない 1 2022/04/01 09:04
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
「名前'Evaluate'は宣言されて...
-
ManagementClassが見つからない。
-
VB2013で作成したプログラムの...
-
MAPIとOEのユーザー切替について
-
vbaでPDFファイルが印刷されない
-
VBが動かなくなりました・・・
-
印刷ダイアログを表示させない方法
-
【VB.NET】開いているフォルダ...
-
H8マイコンで、ファームウェア...
-
ウェーブレット変換に関して
-
C#VB、exeに埋め込んだexeの実行
-
エスケープ・シーケンスによる...
-
「読み込み違反」が起きたとき...
-
プロパティーの属性取得
-
単位計算のアルゴリズム
-
Windows PowerShellでC言語を実...
-
OS vistaでVB5アプリケーション...
-
【VB2005】別のプログラムから...
-
VB.NET(2017)で インストーラを...
-
意味不明の実行時エラーで困っ...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
byte型をstring型として扱うには
-
VB.NETで変数の宣言が上手くで...
-
VBのメモリのアドレス取得
-
ターミナルサービスでのクライ...
-
意味不明の実行時エラーで困っ...
-
Designer.vbは直接コードをいじ...
-
Visual Studio 「AnyCpu」について
-
excel vbaから実行するexe実行...
-
ManagementClassが見つからない。
-
vba 時間の引き算 例えば 15:00...
-
VBAでArrayListを使う為の「msc...
-
Windows PowerShellでC言語を実...
-
VBAでOutlookを終了させたい Ex...
-
「読み込み違反」が起きたとき...
-
印刷ダイアログを表示させない方法
-
アウトルックが起動しているか...
-
vbaでPDFファイルが印刷されない
-
Accessのクエリの値を変換(代入...
-
VB6で作成したアプリを配布する...
-
VB.NETでDLLを読み込ませる時に...
おすすめ情報