【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 が空文字列だったらローカル環境になります。
おそらく、タスクマネージャの[ユーザ]タブ内の[クライアント名]には、ここで取ってこられる情報が反映されていると思われます。
chromeとかのフレームも、remote接続時は簡略化とかできればなぁ・・・