ターミナルサービスで現在ログインしているユーザー名を取得するには?

解決


lily  2005-05-16 23:07:32  No: 121682

やりたい事はタイトル通りですが、現時点で調べてわかった事はWTSQuerySessionInformationというAPIを使えばできそうだと言うことと、MSDNで調べたところ

[指定したターミナルサーバー上の、指定したセッションの情報を取得します。]
BOOL WTSQuerySessionInformation(
  HANDLE hServer,
  DWORD SessionId,
  WTS_INFO_CLASS WTSInfoClass,
  LPTSTR *ppBuffer,
  DWORD *pBytesReturned
);

このように載っており、引数のHANDLEは理解できるのですが、その後の引数でポインターなども出てきており私の技量では理解できず検索しても参考になりそうなページやソースコードも少ないようで、手詰まりになってしまいました。過去ログではさらりとやられているようですが(^^;
セッションIDとは具体的にどのようなものなのか、またポインターも、変数に対するメモリ上のアドレスという程度は知っているのですが、VBではどう理解したらいいのでしょうか。私は、APIはFindWindowやPostMessageなど手探りで使った事のある程度のスキルで、かなり高度に感じるのですが、お詳しい方いらっしゃいましたらぜひ教えてください。環境はWinXP VB.NETです。また、難しいのでこのような代替え策もあるよ。とかでも何かヒントでもいいです。よろしくお願いします。


特攻隊長まるるう  2005-05-17 01:09:19  No: 121683

>セッションIDとは具体的にどのようなものなのか
http://asia.microsoft.com/japan/developer/library/jpwinpf/_win32_WTSQuerySessionInformation.htm
を見たんですかねぇ?…見たなら書いてあると思いますが。
>現在のセッションを指定するときは、WTS_CURRENT_SESSION を使います。
ぐぐれば
http://www.google.com/search?hl=ja&q=WTS_CURRENT_SESSION&btnG=Google+%E6%A4%9C%E7%B4%A2&lr=
-1 だと分かります。

>またポインターも、変数に対するメモリ上のアドレスという程度は知っているのですが、VBではどう理解したらいいのでしょうか。
勉強するとしたら…
http://www.google.com/search?hl=ja&q=API+VB6+%E3%83%9D%E3%82%A4%E3%83%B3%E3%82%BF&lr=
なんで[VB6.0]を対象として調べるか?ってゆーと、情報が多いから。ただし[VB6.0]と[VB.NET]では
使い方が多少違います。…例えば色々と重要な情報が書かれてるページで
http://www5b.biglobe.ne.jp/~yone-ken/VBNET/special/sp06_GetPrivateProfileString.html

形として決まっているので知識として覚えるだけですが、それを高度と思ううちは使わない方が
良いかもしれません。
よねKENさんのページにありますが、
>.NET Frameworkのクラスライブラリに同等の機能があります。
という事で、用意されているならそちらを使った方が良いでしょう。
WTSQuerySessionInformation を使うかどうかも考えないといけない事です。

ユーザ名の取得が目的なら
基本は[SystemInformation クラス]
http://www.microsoft.com/japan/msdn/library/default.asp?url=/japan/msdn/library/ja/cpref/html/frlrfsystemwindowsformssysteminformationclasstopic.asp
で、うまく取れない場合は[WindowsPrincipal.Identity プロパティ]
http://www.microsoft.com/japan/msdn/library/default.asp?url=/japan/msdn/library/ja/cpref/html/frlrfsystemsecurityprincipalwindowsprincipalclassidentitytopic.asp
とか。


lily  2005-05-17 21:06:53  No: 121684

.NET Frameworkのクラスライブラリに同等の機能があったんですね・・
さすが.NETしかし探しきれませんでした。ご指摘のとおり.NET Frameworkのクラスライブラリを利用しようと思います。貴重で情報量も多い回答ありがとうございました。


※返信する前に利用規約をご確認ください。




  


  このエントリーをはてなブックマークに追加