狠狠色丁香婷婷综合尤物/久久精品综合一区二区三区/中国有色金属学报/国产日韩欧美在线观看 - 国产一区二区三区四区五区tv

LOGO OA教程 ERP教程 模切知識交流 PMS教程 CRM教程 開發文檔 其他文檔  
 
網站管理員

【C#】.NET Core 如何判斷程序是否在遠程桌面(RDP)下運行

admin
2021年3月16日 0:20 本文熱度 3653

導語

由于疫情的關系,很久沒發文章了。今天終于穩定下來在家辦公,抽空分享一個剛學會的技巧。最近在家辦公的程序員可能避免不了要用遠程桌面,那么問題來了,你的 .NET Core 程序有沒有辦法知道自己是否在 Windows 遠程桌面環境下運行呢?

Windows Forms

如果你用的是 .NET Core 3.x 版本,并開發的是 Windows Forms 應用,那么恭喜你,.NET 自帶了一個簡單粗暴的方法。

SystemInformation.TerminalServerSession 即可返回當前會話是否在遠程桌面下。

public partial class Form1 : Form
{
    public Form1()
    {
        InitializeComponent();
        if (IsRemoteSession)
        {
            MessageBox.Show("Under RDP");
        }
    }
    public static Boolean IsRemoteSession => SystemInformation.TerminalServerSession;
}

運行效果

去你的 WinForms?

Bing 不是人人都喜歡 WinForms,畢竟它代表落后、不思進取的拖控件程序員(即使他們下班時候天還亮著)。那么其他類型的 .NET Core 程序如何判斷自己是否在 RDP 下運行呢?我們需要 P/Invoke 騷操作。

.NET Core 使用 P/Invoke 的姿勢和 .NET Framework 幾乎一致。只要一個 [DllImport] 標記即可。

根據田牌文檔描述,Windows 本身就帶有一個 Win32 API可以返回當前會話是否為遠程桌面。即 User32.dll 上的 GetSystemMetrics( SM_REMOTESESSION ); 方法

文檔傳送門:https://docs.microsoft.com/en-us/windows/win32/termserv/detecting-the-terminal-services-environment

其中的 SM_REMOTESESSION 其實是個預定義的 int 值,在 C# 中可表示為 0x1000。使用 P/Invoke 判斷一個 Console 程序是否運行在 RDP 下的代碼如下:

static void Main(string[] args)
{
    bool isRDP = GetSystemMetrics(SM_REMOTESESSION);
    Console.WriteLine($"Running under RDP: {isRDP}");
    Console.ReadKey();
}
const int SM_REMOTESESSION = 0x1000;
[DllImport("user32")]
static extern bool GetSystemMetrics(int index);

其中 user32 后面的 .dll 可以省略。.NET Core 在 Windows 上會自動去找 dll,在 Linux 上會去找 so (即使 Linux Bing 沒有 RDP 這個東西也沒有 user32 這個庫)

運行效果

不過這種技巧大家平時正常寫代碼的時候一定要盡量避免,在 .NET 的托管環境下調用非托管代碼不僅會導致程序和平臺及系統版本耦合,還易爆,爆完還難以抓異常信息。有關 P/Invoke 的詳細介紹,請參考微軟文檔:

https://docs.microsoft.com/en-us/dotnet/standard/native-interop/pinvoke


該文章在 2021/3/16 0:20:42 編輯過
關鍵字查詢
相關文章
正在查詢...
點晴ERP是一款針對中小制造業的專業生產管理軟件系統,系統成熟度和易用性得到了國內大量中小企業的青睞。
點晴PMS碼頭管理系統主要針對港口碼頭集裝箱與散貨日常運作、調度、堆場、車隊、財務費用、相關報表等業務管理,結合碼頭的業務特點,圍繞調度、堆場作業而開發的。集技術的先進性、管理的有效性于一體,是物流碼頭及其他港口類企業的高效ERP管理信息系統。
點晴WMS倉儲管理系統提供了貨物產品管理,銷售管理,采購管理,倉儲管理,倉庫管理,保質期管理,貨位管理,庫位管理,生產管理,WMS管理系統,標簽打印,條形碼,二維碼管理,批號管理軟件。
點晴免費OA是一款軟件和通用服務都免費,不限功能、不限時間、不限用戶的免費OA協同辦公管理系統。
Copyright 2010-2025 ClickSun All Rights Reserved