91网首页-91网页版-91网在线观看-91网站免费观看-91网站永久视频-91网站在线播放

LOGO OA教程 ERP教程 模切知識(shí)交流 PMS教程 CRM教程 開發(fā)文檔 其他文檔  
 
網(wǎng)站管理員

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

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

導(dǎo)語

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

Windows Forms

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

SystemInformation.TerminalServerSession 即可返回當(dāng)前會(huì)話是否在遠(yuǎn)程桌面下。

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

運(yùn)行效果

去你的 WinForms?

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

.NET Core 使用 P/Invoke 的姿勢(shì)和 .NET Framework 幾乎一致。只要一個(gè) [DllImport] 標(biāo)記即可。

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

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

其中的 SM_REMOTESESSION 其實(shí)是個(gè)預(yù)定義的 int 值,在 C# 中可表示為 0x1000。使用 P/Invoke 判斷一個(gè) Console 程序是否運(yùn)行在 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 上會(huì)自動(dòng)去找 dll,在 Linux 上會(huì)去找 so (即使 Linux Bing 沒有 RDP 這個(gè)東西也沒有 user32 這個(gè)庫)

運(yùn)行效果

不過這種技巧大家平時(shí)正常寫代碼的時(shí)候一定要盡量避免,在 .NET 的托管環(huán)境下調(diào)用非托管代碼不僅會(huì)導(dǎo)致程序和平臺(tái)及系統(tǒng)版本耦合,還易爆,爆完還難以抓異常信息。有關(guān) P/Invoke 的詳細(xì)介紹,請(qǐng)參考微軟文檔:

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


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

主站蜘蛛池模板: 国产玩弄醉 | 日本成年网 | 国产伦精| 日产成人高清视频 | 日本亚洲视| 99在线播放 | 国产在线精品一区二 | 国产欧美精品区一区 | 欧美在线视频一区 | 日韩美女网站在线看 | 精品国产手机自 | 日韩视频不卡在线 | 欧美一级毛B片 | 日本阿v视| 69精品人人人 | 国产办公室三 | 伦理秋霞电影网 | 国产精品手机免费 | 欧美中文高清日韩 | 93偷拍五区 | 午夜理论片| 福利精品视频 | 国产后式动态A级片 | 91电影在线观看 | www一区二区三区 | 日韩成人午夜视频 | 国产后入清纯学 | 91午夜看片 | www成人一区 | 国产主播剧情在线 | 国内自拍视频网址 | 国产乱偷国产偷高清 | 精品中文高清欧 | 国产精品极品白 | 日韩一区二线视频 | 精品精品国产国产 | 日本成a | 国产成视频在线观看 | 日韩国产在线播放 | 日韩在线午夜专区 | 欧美性大战 |