のらぬこの日常を描く

ノージャンルのお役立ち情報やアニメとゲームの話、ソフトウェア開発に関する話などを中心としたブログです。

【Windows】現在のセッションがリモートデスクトップなのか実画面なのかをプログラムから判定

最近個人的に面白いネタが無いのでとりあえずのつなぎで・・・

こんかいはLinuxではなくWindows ネタです。 <=ブログの名前とかキニシナイ


あるアプリケーションで、

現在のセッションがリモートデスクトップ経由でのログインの場合、

ビットマップ表示とか重たい画面描画を極力省略して、

画面描画とかネットワーク帯域を極力軽くする、

っていうのをアプリケーション側で自動でやりたい。

最初、GetDC( GetDesktopWindow( ) ) で返さえる HDC からなにか取ってこられないかと思ったけど失敗。

いろいろ調べてたら、WTS_xxxxx 系のAPIを使えばうまく行きそうなことがわかった。

以下サンプルソース

使うときは、wtsapi32.lib をリンクしてください。

#include <windows.h>
#include <wtsapi32.h>

int main()
{
	WTS_INFO_CLASS WTSInfoClass;
	LPTSTR hostname;
	DWORD dwBytesReturned;
	
	BOOL bResult = 
		WTSQuerySessionInformation(WTS_CURRENT_SERVER, WTS_CURRENT_SESSION, WTSClientName, &hostname, &dwBytesReturned);
	if (bResult)
	{
		printf("remote host:%s\n", hostname);
		WTSFreeMemory(hostname);
	}
	return 0;
}

hostname に 何らかのホスト名が入っていたらRemoteから接続されている。

hostname が空文字列だったらローカル環境になります。

おそらく、タスクマネージャの[ユーザ]タブ内の[クライアント名]には、ここで取ってこられる情報が反映されていると思われます。

f:id:mikenekoDX:20100329133412j:image

chromeとかのフレームも、remote接続時は簡略化とかできればなぁ・・・