目錄
- 前言
- 一、監聽txt文檔增加數據
- 二、其他功能
- 1. 設置開機自啟動
- 2. 禁止控制臺窗口關閉按鈕
- 3. 阻止Ctrl + C中斷
- 4. 防止程序退出(無限循環)
- 總結
前言
之前有個需求就是監聽文件夾中最新的txt文檔獲取最新數據,還有其他功能,比如:開機自啟動、只在任務管理器關閉、阻止Ctrl+C中斷等,對此作個記錄,整理代碼。
一、監聽txt文檔增加數據
代碼如下:
static void RunMainLogic()
{//1. 獲取程序基目錄string baseDir = AppDomain.CurrentDomain.BaseDirectory;//2.拼接相對路徑(目標路徑 - 文件夾)并轉換為絕對路徑string relativePath = @"..\..\..\..\TotalTest\Debug";string targetDir = Path.GetFullPath(Path.Combine(baseDir, relativePath));//3.檢查目標目錄是否存在if (!Directory.Exists(targetDir)){Console.WriteLine("目標目錄不存在:{" + targetDir + "}");return;}//4.獲取所有名稱包含“Test”的子文件夾,并按時間排序var latsetTestDir = Directory.GetDirectories(targetDir, "*Test*", SearchOption.TopDirectoryOnly).Select(dir => new DirectoryInfo(dir)).OrderByDescending(dir => dir.LastWriteTime).FirstOrDefault();if (latsetTestDir == null){Console.WriteLine("Test文件夾路徑不存在!");return;}string folderPath = latsetTestDir.FullName;string str = "開始監控文件夾: {" + folderPath + "}";Console.WriteLine(str);//txt文檔監聽TextFileWatcher watcher = new TextFileWatcher(folderPath); //先被執行watcher.DataReceived += OnDataReceived; //訂閱事件watcher.SetNewestFileAsTarget();}//訂閱事件
static void OnDataReceived(object sender, string data)
{string StrLine = data; //需要的數據
}
二、其他功能
1. 設置開機自啟動
代碼如下:
static void SetAutoStart(string appName, string appPath)
{RegistryKey key = Registry.CurrentUser.OpenSubKey("SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\Run", true);key.SetValue(appName, appPath);key.Close();
}
作用:將程序添加到注冊表啟動項,實現開機自動運行。
調用方式:
SetAutoStart("MyConsoleApp", System.Reflection.Assembly.GetExecutingAssembly().Location);
2. 禁止控制臺窗口關閉按鈕
代碼如下:
[DllImport("user32.dll")]
private static extern IntPtr GetSystemMenu(IntPtr hWnd, bool bRevert);[DllImport("user32.dll")]
private static extern bool EnableMenuItem(IntPtr hMenu, uint uIDEnableItem, uint uEnable);private const uint SC_CLOSE = 0xF060;
private const uint MF_GRAYED = 0x00000001;static void DisableCloseButton()
{IntPtr hWnd = System.Diagnostics.Process.GetCurrentProcess().MainWindowHandle;IntPtr hMenu = GetSystemMenu(hWnd, false);EnableMenuItem(hMenu, SC_CLOSE, MF_GRAYED);
}
作用:禁用窗口的x關閉按鈕,用戶無法直接關閉程序。
3. 阻止Ctrl + C中斷
代碼如下:
Console.CancelKeyPress += (sender, e) => e.Cancel = true;
作用:防止用戶按 Ctrl + C 終止程序。
4. 防止程序退出(無限循環)
代碼如下:
while(true)
{Thread.Sleep(1000); //防止CPU占用過高
}
作用:讓程序無限運行,除非任務管理器終止或程序報錯。
總結
如將開機自啟動和只能在任務管理器關閉放到監聽txt文檔功能。在主函數中,代碼如下:
//1. 設置開機自啟動
SetAutoStart("ConsoleApplication1", System.Reflection.Assembly.GetExecutingAssembly().Location);//2. 禁用關閉按鈕
DisableCloseButton();//3. 阻止Ctrl+C 關閉
Console.CancelKeyPress += (sender, e) =>
{e.Cancel = true; // 阻止默認行為Console.WriteLine("Ctrl+C 被禁用,無法關閉程序。");
};//4. 主要業務邏輯
RunMainLogic();//5. 防止程序退出(無限循環)
while (true)
{Thread.Sleep(1000); // 每秒鐘檢查一次(防止 CPU 占用過高)
}