rem 運作原理:
rem for /f 將東西切割,tokens將東西分3段,透過delims去區分,從%a開始
rem 運作原理:
rem 若原始值為 8
rem 補零後變成 08
rem 取最後 2 位仍為 08
rem 若原始值為 12
rem 補零後變成 012
rem 取最後 2 位會自動剔除最前面的 0
rem 得到 12
set "MM=%M:~-2%"
set "DD=%D:~-2%"
echo %Y%%MM%%DD%
測試、遊戲、心情、電腦
繼上篇 [cmd]利用保護螢幕裝置關螢幕不關喇叭(關螢幕聽歌)
已知 .scr 是透過 C# 編寫而成
現今已經是 AI 撰寫程式的時代,就算我們不懂 C#,也沒有 VSCode,一樣也可以自己做螢幕保護程式
畢竟有個現成的在那邊可以抄,所以我們只要對AI下達想要的指令
用什麼程式語言撰寫、希望的功能是什麼,最主要的這兩個方向訂下後,步步邁向目標
一開始,我希望他用powershell實現,雖然可以成功,但只成功一半,他會卡死在迴圈之中
透過第一個方式,我們知道保護螢幕裝置,實際上就是開啟一個全螢幕的程式把畫面擋住,並將鼠標消除,透過迴圈偵測滑鼠是否移動,來退出迴圈。
大方向對了,那我們就繼續
卡死迴圈的bug一直無法解決,於是他又推薦我改用edge實現
雖然畫面黑了,卻一直無法正確全螢幕,他用的全螢幕方案太複雜,我就叫他換另一個方案
他認為是針對edge視窗控制比較困難,所以想換成IE來控制
但我說 NO!,IE很多漏洞我可不想
於是乎轉了一圈,還是回歸C#
我才知道不用VSCode,微軟本身就有C#的編譯器(我不知道哪來的)
直接透過powershell編譯一個exe,改個附檔名變成scr就成了
這次BUG就問題不大,慢慢和AI一來一回修改就搞定了
經過多次修改,就成下面的程式碼
Add-Type -AssemblyName System.Windows.Forms # 1. 定義 C# 原始碼(完美雙螢幕、純黑、防震動退出、隱藏游標) $csharpCode = @" using System; using System.Drawing; using System.Windows.Forms; using System.Collections.Generic; namespace PureBlackScreenSaver { public class BlackForm : Form { private Point mouseLocation = Point.Empty; public BlackForm(Screen targetScreen) { this.BackColor = Color.Black; this.FormBorderStyle = FormBorderStyle.None; this.StartPosition = FormStartPosition.Manual; this.TopMost = true; this.Bounds = targetScreen.Bounds; this.DoubleBuffered = true; } protected override void OnLoad(EventArgs e) { base.OnLoad(e); Cursor.Hide(); } private void ExitAction() { Cursor.Show(); Application.Exit(); } protected override void OnKeyDown(KeyEventArgs e) { ExitAction(); } protected override void OnMouseDown(MouseEventArgs e) { ExitAction(); } protected override void OnMouseMove(MouseEventArgs e) { if (mouseLocation.IsEmpty) { mouseLocation = e.Location; return; } if (Math.Abs(e.X - mouseLocation.X) > 15 || Math.Abs(e.Y - mouseLocation.Y) > 15) { ExitAction(); } } } static class Program { [STAThread] static void Main(string[] args) { Application.EnableVisualStyles(); Application.SetCompatibleTextRenderingDefault(false); string rawCommandLine = Environment.CommandLine.ToLower(); // ─── 情況一:完全沒有參數 (args.Length == 0) ─── // 根據你的測試,只有在 Win11 右鍵點擊「設定」時,才會是空參數 if (args.Length == 0) { MessageBox.Show("這個純黑螢幕保護程式不需要任何設定功能喔!", "提示", MessageBoxButtons.OK, MessageBoxIcon.Information); return; // 精準攔截 Win11 右鍵設定,直接結束 } // ─── 情況二:有帶參數 ─── if (args.Length > 0) { // 1. 傳統螢幕保護程式面板點擊「設定」(/c) if (rawCommandLine.Contains("/c")) { MessageBox.Show("這個純黑螢幕保護程式不需要任何設定功能喔!", "提示", MessageBoxButtons.OK, MessageBoxIcon.Information); return; // 精準攔截傳統面板設定,直接結束 } // 2. 傳統螢幕保護程式面板的小螢幕預覽(/p) if (rawCommandLine.Contains("/p")) { return; // 直接結束,防止背景亂跑 } // 3. 剩下的狀況(包含 /s 或 /S):不論是雙擊開啟、右鍵 Test、還是系統閒置,通通放行塗黑! } // ─── 真正執行全螢幕純黑的邏輯 ─── foreach (Screen screen in Screen.AllScreens) { BlackForm form = new BlackForm(screen); form.Show(); } Application.Run(); } } } "@ # 💡【核心修正】將輸出路徑強制設定在當前使用者的「桌面」,避開 System32 權限問題 $desktopPath = [Environment]::GetFolderPath("Desktop") $sourceFile = Join-Path $desktopPath "BlackScreen.cs" $outputFile = Join-Path $desktopPath "PureBlackSaver.exe" $scrFile = Join-Path $desktopPath "PureBlackSaver.scr" Set-Content -Path $sourceFile -Value $csharpCode -Encoding UTF8 # 2. 自動尋找 Windows 內建的 .NET C# 編譯器 (csc.exe) $cscPath = Join-Path $env:windir "Microsoft.NET\Framework64\v4.0.30319\csc.exe" if (-not (Test-Path $cscPath)) { $cscPath = Join-Path $env:windir "Microsoft.NET\Framework\v4.0.30319\csc.exe" } if (Test-Path $cscPath) { Write-Host "正在透過 Windows 內建編譯器打包成 C# 原生程式..." -ForegroundColor Green # 呼叫編譯器 & $cscPath /target:winexe /out:$outputFile $sourceFile if (Test-Path $outputFile) { # 自動複製一份並改名為 .scr 螢幕保護程式格式 Copy-Item $outputFile $scrFile Write-Host "【成功】已在 $scrFile 產生" -ForegroundColor Cyan # 刪除過渡期的臨時 .cs 原始碼檔案 Remove-Item $sourceFile Remove-Item $outputFile } else { Write-Error "編譯失敗,請檢查代碼。" } } else { Write-Error "找不到 Windows 內建的 .NET 編譯器環境!" }
|
|
|
|
| ↑我的西瓜卡(吉依卡哇卡面) 選擇右下角 Suica管理 |
↑選擇 おトクなきっぷ(優惠車票) | |
|
|
|
|
| ↑選擇 新規購入 | ↑選擇你想要的周遊券 | |
|
|
||
| ↑選擇右上角 次へ 繼續 想要了解車票可以點擊下方 商品ページ查看詳情 |
↑確認選擇的車票無誤後 就可以點下方🍎 Pay付款 |
|
一般來說,公司電腦為了防止資安風險,人離開座位就應該要將電腦鎖定避免他人使用,IT常常會做一個防呆措施,就是當電腦未活動超過5分鐘,就會自動進入鎖定狀態。而我們並非離開座位,只是未觸碰電腦使其進入工作狀態,一言不合就將電腦鎖定,一直打密碼登入十分麻煩。
IT避免使用者調整鎖定時間,一般會用安全性原則和限制使用者權限去防止使用者修改。 windows 裡面會偵測影片撥放、投影片播放等功能,來判斷使用者正在使用電腦,進而禁止休眠狀態啟用。
影片播放、放映投影片通常是當前視窗執行,不可能一直掛著影片防止系統鎖定,老闆看到會生氣,整天看YT當個薪水小偷實在是不太恰當!
於是大神們用 C++ 去呼叫 SetThreadExecutionStat,讓更新狀態成"系統正在使用中",進而防止系統在應用程式執行時進入睡眠狀態或關閉顯示器。