2026年6月4日

Python Code 打包成 exe

打包成 exe

2026年6月3日

IT6616 Linux V4L2 driver


在 Linux 嵌入式系統中,

2026年6月1日

在 C 語言中如何使用 regular expression 進行搜尋與替代?

在 C 語言中處理正規表達式不像 Perl 或 Python 那樣有豐富的語法糖或內建高階函式。C 語言標準函式庫(POSIX 標準)只內建了搜尋功能(regcomp, regexec),沒有內建替代(Replace)功能

2026年5月31日

我在 perl 工作 30 年,現在學習 python 所以比較一下


三十年的 Perl 資歷是非常深厚的底蘊!Perl 作為文字處理的文字堂級語言,其正規表達式(Regex)已經深入到語言的骨髓裡(語法糖非常甜);而 Python 則是將其收納在內建的 re 模組中。
為了讓您能將三十年的 Perl 功力無縫平移到 Python,我幫您整理了一份 Perl vs Python Regex 核心語法對照表

2026年5月29日

VSCODE 如何只替代所選區域或全部?

 在 VS Code 中,您可以自由選擇將替代範圍限制在特定選取區域或套用到整份檔案(全部)

vscode 如何使用 regular expression 進行搜尋與替代?

 在 Visual Studio Code (VS Code) 中,使用正規表達式(Regular Expression)進行搜尋與替代非常直覺。您可以使用快速鍵 Ctrl + H(Mac 上為 Cmd + Option + F)開啟搜尋替代面板。

vbscript 搜尋替代功能如何使用 regular expression?


在 VBScript 中,若要使用正規表達式(Regular Expression)進行搜尋與取代,必須使用 VBScript.RegExp 物件以及其內建的 Replace 方法。 [1, 2]

2026年5月20日

 windows 10, 如何使用 batch , vbs 將桌面上的視窗移至特定位置?
這些腳本語言缺乏直接控制 Windows GUI 視窗 API(如 MoveWindow)的能力。

powershell 腳本過於複雜,有其它方法嗎?

 windows 10, 如何使用 batch , vbs 將桌面上的視窗移至特定位置?

在 Windows 10 中,單純使用原生 Batch 或 VBScript 是無法直接移動第三方視窗的,因為這些腳本語言缺乏直接控制 Windows GUI 視窗 API(如 MoveWindow)的能力。
要達成這個目的,最有效率的原生做法是使用 PowerShell,或是用 VBScript 呼叫 PowerShell/Excel 內建的 API
以下為您提供三種最實用的解決方案:

方案一:使用 VBScript 呼叫 PowerShell(推薦,免安裝最方便)

這個方法最安全,因為它完全使用 Windows 10 內建的組件。我們利用 VBScript 啟動 PowerShell,並透過 PowerShell 呼叫 Windows API (user32.dll) 來移動視窗。
請建立一個名為 move_window.vbs 的檔案,並寫入以下程式碼:
' 設定目標視窗標題與位置
Dim windowTitle, x, y, width, height
windowTitle = "記事本"  ' 改為您的目標視窗標題(支援部分比對)
x = 100                 ' 畫面 X 座標
y = 100                 ' 畫面 Y 座標
width = 800             ' 視窗寬度
height = 600            ' 視窗高度

' 組合 PowerShell 指令
Dim psCmd
psCmd = "powershell -NoProfile -Command """ & _
"[[void]][System.Reflection.Assembly]::LoadWithPartialName('System.Windows.Forms'); " & _
"$code = @' " & vbCrLf & _
"[DllImport(\""user32.dll\"")] " & vbCrLf & _
"public static extern bool MoveWindow(IntPtr hWnd, int X, int Y, int nWidth, int nHeight, bool bRepaint); " & vbCrLf & _
"[DllImport(\""user32.dll\"")] " & vbCrLf & _
"public static extern IntPtr FindWindow(string lpClassName, string lpWindowName); " & vbCrLf & _
"'@; " & _
"$type = Add-Type -MemberDefinition $code -Name Win32 -PassThru; " & _
"$ws = New-Object -ComObject Shell.Application; " & _
"$win = $ws.Windows() | Where-Object { $_.LocationName -like '*" & windowTitle & "*' -or $_.Name -like '*" & windowTitle & "*' }; " & _
"if (!$win) { $processes = Get-Process | Where-Object { $_.MainWindowTitle -like '*" & windowTitle & "*' }; " & _
"foreach ($p in $processes) { $type::MoveWindow($p.MainWindowHandle, " & x & ", " & y & ", " & width & ", " & height & ", $true) } }" & _
""""

' 執行指令(隱藏視窗背景執行)
CreateObject("Wscript.Shell").Run psCmd, 0, True

方案二:使用純 PowerShell 腳本(程式碼最乾淨)

如果您不一定要用 .vbs.bat 副檔名,直接寫成 .ps1 檔案是 Windows 10 系統下最標準的做法。
請建立一個 MoveWindow.ps1 檔案:
# 定義 Windows API
$API = @'
[DllImport("user32.dll")]
public static extern bool MoveWindow(IntPtr hWnd, int X, int Y, int nWidth, int nHeight, bool bRepaint);
'@
Add-Type -MemberDefinition $API -Name WindowModifier -Namespace Win32

# 設定目標與參數
$ProcessName = "notepad" # 執行緒名稱(例如記事本為 notepad)
$X = 200
$Y = 200
$Width = 1024
$Height = 768

# 取得視窗控制代碼並移動
$Target = Get-Process -Name $ProcessName -ErrorAction SilentlyContinue
if ($Target) {
    [Win32.WindowModifier]::MoveWindow($Target.MainWindowHandle, $X, $Y, $Width, $Height, $true)
}
  • 如何執行:您可以寫一個簡易的 .bat 檔案來啟動它:
    powershell -ExecutionPolicy Bypass -File "C:\路徑\MoveWindow.ps1"
    

方案三:使用 VBScript 模擬鍵盤快速鍵(僅能靠邊或最大化)

如果您的目的只是想把視窗「靠左」、「靠右」或「最大化」,不需要精準的座標(如 X=123),可以用 VBScript 模擬 Windows 10 的快捷鍵(Win + 方向鍵)。
請建立 snap_window.vbs
Set WshShell = CreateObject("WScript.Shell")

' 1. 先將目標視窗帶到最前端(以記事本為例)
WshShell.AppActivate "記事本"
WScript.Sleep 500 ' 等待視窗反應

' 2. 模擬按下 Win + 左方向鍵 (將視窗靠左側拼貼)
' 註:VBScript 無法直接模擬 Win 鍵,但可以透過組合鍵或複製特定行為。
' 這裡改用通用組合鍵:Alt + Space,再按 M (移動),再用方向鍵移動
WshShell.SendKeys "% "
WScript.Sleep 100
WshShell.SendKeys "M"
WScript.Sleep 100
WshShell.SendKeys "{LEFT 50}" ' 往左移動 50 次
WshShell.SendKeys "{ENTER}"   ' 確認位置
(注意:此方法容易受到當前使用者滑鼠點擊干擾,精準度較低。)

如果您想讓腳本更符合您的需求,請告訴我:
  • 您想要移動的目標程式是什麼?(例如:Chrome 瀏覽器、LINE、或是特定的資料夾?)
  • 您的具體移動規則是什麼?(例如:固定移到右下角、或者是偵測雙螢幕移動?)

 cmd for commad, for /r "dir" %i (*) 中,若 dir 要使用另外一個 loop 變數 "%~j" 或者 "!F!" 為何不能使用?

在 Windows 批次檔(Batch)中,FOR /R 的設計有一個核心限制:它的搜尋路徑必須在指令「解析(Parse)階段」就確定,而不能在「執行(Execute)階段」動態改變。
以下是無法使用的具體原因與解決方法:

為什麼不能用?

  • %~j(巢狀迴圈變數)失敗原因FOR /R 語法規定,路徑參數必須是一個靜態字串或環境變數。當它嵌套在另一個迴圈內時,FOR /R 會在外部迴圈開始執行「前」就先被解析,此時 %~j 還沒有被賦值,導致語法錯誤。
  • !F!(延遲環境變數)失敗原因FOR /R 不支援延遲變數擴展(Delayed Expansion)作為其路徑。即使開啟了 setlocal enabledelayedexpansionFOR /R 仍會在處理 !F! 之前就完成路徑解析,導致它把 !F! 當成一個名為 !F! 的字面字串路徑。

解決方法

如果你需要動態改變 FOR /R 的搜尋路徑,請使用以下兩種標準替代方案:

方案一:使用 PUSHD 切換目錄(最推薦)

不要把變數傳給 /R,而是先用 PUSHD 切換到該動態路徑,然後直接執行 FOR /R(不指定路徑,預設為當前目錄)。
@echo off
setlocal enabledelayedexpansion

:: 假設 %~j 或 !F! 的路徑存在變數 dirPath 中
set "dirPath=C:\Your\Dynamic\Path"

pushd "!dirPath!"
for /r %%i in (*) do (
    echo %%i
)
popd

方案二:利用 CALL 呼叫子程序

FOR /R 移到一個獨立的子程序(Label)中,並透過參數將動態路徑傳遞過去。此時參數會變成靜態的 %1FOR /R 就能正常解析。
@echo off

:: 外部迴圈範例,假設從某處取得了變數 %%j
for /d %%j in (C:\Test\*) do (
    call :SubLoop "%%~j"
)
goto :eof

:SubLoop
:: 此時 %1 是從外部傳進來的靜態路徑
for /r "%~1" %%i in (*) do (
    echo %%i
)
goto :eof

如果想進一步調整你的腳本,可以告訴我:
  • 你的外部迴圈 %~j如何取得路徑的?(例如:讀取文字檔、遍歷資料夾?)
  • 這個腳本的最終目的是什麼?(例如:複製檔案、修改副檔名?)
我可以幫你寫出最精簡且能直接執行的完整程式碼。

2026年4月22日

[WIN] DOS Drive Map

 Windows Registry Editor Version 5.00


[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Session Manager\DOS Devices]

"R:"="\\??\\d:\\ramdisk"

"H:"="\\??\\E:\\H"

"Z:"="\\??\\d:\\home"


在 Windows 10 中,「預設位置」通常指的是開啟檔案總管時自動進入的資料夾



在 Windows 10 中,「預設位置」通常指的是開啟檔案總管時自動進入的資料夾。


1. 更改預設開啟的資料夾(此電腦或快速存取)

2026年4月21日

若要透過登錄檔(Registry)強制讓所有資料夾預設使用「詳細資料」(Details)檢視模式

 若要透過登錄檔(Registry)強制讓所有資料夾預設使用「詳細資料」(Details)檢視模式,這涉及修改資料夾的 「檢視狀態」(View States) 邏輯。

2026年4月14日

windows cmd 如何使用 dir 顯示一個目錄是否為 junction 與其來源? 而不是用 dir 其所在目錄之後再 parsing 的方式?

 windows cmd 如何使用 dir 顯示一個目錄是否為 junction 與其來源? 而不是用 dir 其所在目錄之後再 parsing 的方式?

2026年3月5日

[VBA] Regular Expression

 在 VBScript 中,內建的 Trim 函數只能移除空白字元 (Space, ASCII 32)。若要移除字串前後的換行符號(如 vbLF、vbCr 或 vbCrLf),你需要使用正規表達式 (RegExp) 或手動循環檢查。 

2026年3月3日

word VBA加速

 

操作文件前先做:

 

    Application.ScreenUpdating = False

    Application.DisplayStatusBar = True

    Application.Options.Pagination = False

 

           …

   

    Set doc = Documents.Add

2026年2月28日

以遠端連線 Windows 10 主機輸入反應過慢,如何解決,但同目標網域之 Windows 7 與 Windows 11 主機無此狀況

 

以遠端連線 Windows 10 主機輸入反應過慢,如何解決,但同目標網域之 Windows 7 Windows 11 主機無此狀況

當同一網域內的 Windows 7 Windows 11 主機皆正常,唯獨 Windows 10 主機出現遠端輸入延遲時,問題通常出在 Windows 10 特有的網路優化機制、顯示驅動程式或特定的通訊協定設定。

您可以嘗試以下解決方案:

2026年1月29日

在 Windows 下,如何關閉遠端桌面的硬體繪圖支援?

在 Windows 中,關閉遠端桌面 (RDP) 的硬體繪圖支援主要可以透過 群組原則 (GPO) 或 登錄編輯器 來達成。這通常用於解決遠端連線時出現的畫面閃爍、格線或效能異常問題。






方法一:透過群組原則編輯器 (推薦)
這是最常見且系統化的方式,適用於 Windows 專業版以上版本:按下 Win + R,輸入 gpedit.msc 並按確認。
導航至:電腦設定 > 系統管理範本 > Windows 元件 > 遠端桌面服務 > 遠端桌面工作階段主機 > 遠端工作階段環境。
尋找 「為遠端桌面連線使用 WDDM 圖形顯示驅動程式」 (Use WDDM graphics display driver for Remote Desktop Connections)。
將其設定為 「已停用」 (Disabled)。
重新啟動電腦或在命令提示字元執行 gpupdate /force 以套用變更。
Microsoft Learn +1

方法二:透過登錄編輯器 (Registry)
如果您使用的是家用版 Windows,或偏好直接修改登錄檔:按下 Win + R,輸入 regedit。
移至路徑:HKEY_LOCAL_MACHINE\SOFTWARE\Policies\Microsoft\Windows NT\Terminal Services。
若沒有對應項目,請右鍵新建一個 DWORD (32 位元) 值,命名為 fEnableWddmDriver。
將數值資料設為 0 以停用 WDDM 驅動程式支援。
針對部分應用程式渲染問題,也可嘗試在 HKEY_CURRENT_USER\Software\Microsoft\Avalon.Graphics 下建立 DisableHWAcceleration (DWORD) 並設為 1。
Microsoft Learn +1

方法三:調整遠端桌面用戶端設定
如果是「用戶端」端造成的卡頓,可在連線前調整:開啟 遠端桌面連線 (mstsc) > 顯示選項 > 體驗。
取消勾選 「永續性點陣圖快取」。
在連線軟體設定中尋找並關閉 「若可用則使用硬體加速」 選項。

您目前的遠端連線是否遇到了特定的顯示異常(如畫面格線或閃爍),需要我針對該現象提供進一步的優化建議嗎?

2026年1月23日

遠端 RDP Windows 10 更新畫面刷新率與延遲改善


要在 2026 年的環境下優化 Windows 10 的遠端桌面 (RDP) 畫面刷新率並降低延遲,核心目標是從「軟體渲染」轉向「硬體加速」,並優化傳輸協議。以下是具體實作步驟:


1. 強制啟用硬體 GPU 加速 (最有效)

預設情況下,RDP 使用 CPU 來處理圖像。透過群組原則強制遠端主機使用顯卡進行編碼,可顯著提升刷新率:

在 Windows 10 遠端主機上,按下 Win + R 輸入 gpedit.msc。

導航至:電腦設定 > 系統管理範本 > Windows 元件 > 遠端桌面服務 > 遠端桌面連線工作階段主機 > 遠端工作階段環境。

設定以下項目:

「針對遠端桌面連線使用硬體圖形配接器」:設為 已啟用。

「針對遠端桌面連線啟用 H.264/AVC 硬體編碼」:設為 已啟用。

「優先使用 H.264/AVC 繪圖模式進行遠端桌面連線」:設為 已啟用。

2. 解鎖 RDP 刷新率限制 (FPS)

Windows 10 預設將 RDP 限制在 30 FPS。若要達到 60 FPS 或更高:

在遠端主機開啟「登錄編輯程式 (regedit)」。

前往:HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Terminal Server\WinStations\RDP-Tcp

按右鍵新增一個 DWORD (32 位元) 值。

命名為 DWMFRAMEINTERVAL。

修改數值(基底選 十進位):

15 (對應 60 FPS)

10 (對應 100 FPS)

重啟電腦。

3. 確保 UDP 傳輸已啟用 (減少延遲)

TCP 雖然穩定但延遲高,UDP 則是降低輸入滯後感的關鍵:

在 本地端電腦 的 RDP 連線視窗,點擊「顯示選項」>「體驗」。

確認已選取 「自動偵測連線品質」。

檢查方法:連線成功後,點擊畫面上方藍色列的「連線品質圖示(收訊符號)」,若顯示「已啟用 UDP」,表示反應速度已優化。

注意:若透過 VPN 連線,請確保防火牆已開啟 UDP 3389 埠。

4. 停用 WDDM 繪圖驅動程式 (針對舊款或虛擬機)

在某些 Windows 10 版本中,新的 WDDM 驅動會導致 RDP 畫面卡頓:

在 gpedit.msc 導航至同上的「遠端工作階段環境」。

找到 「針對遠端桌面連線使用 WDDM 繪圖顯示驅動程式」。

將其設為 已停用(這會強制系統退回到 XDDM 模式,有時能解決莫名的延遲問題)。

5. 調整本機端遠端桌面設定 (MSTSC)

色彩深度:在「顯示」分頁,將色彩改為 「增強色 (16 位元)」。這能極大減少網路頻寬負擔,提升畫面更新反應。

停用快取:如果網路極快但有殘影,嘗試在「體驗」取消勾選「持續性點陣圖快取」;若網路慢,則務必勾選。

總結最佳配置

硬體編碼 (H.264) = 減少 CPU 負擔。

DWMFRAMEINTERVAL (15) = 解鎖 60 FPS。

UDP 協議 = 解決輸入跟不上畫面的問題。

如果完成上述設定後仍感慢速,請檢查遠端主機的 Windows 更新,確保顯示卡驅動程式已更新至 2026 年最新版本。










提出問題

2026年1月22日

要在 Windows 11 中將鍵盤重複速度提升至超過系統設定上限




要在 Windows 11 中將鍵盤重複速度提升至超過系統設定上限(每秒約 30 次),必須透過 登錄編輯程式 (Registry Editor) 或第三方工具進行強制修改。

方法一:修改登錄表 (Registry)
這是最直接的內建方法,可突破控制台的極限值。按下 Win + R,輸入 regedit 並按 Enter。
導航至以下路徑:
HKEY_CURRENT_USER\Control Panel\Accessibility\Keyboard Response
尋找並修改以下數值(建議將「基底」選為 十進位):

AutoRepeatRate:重複間隔(毫秒)。若要超過每秒 30 次,請設為 10 到 20 之間(值越小越快)。


AutoRepeatDelay:觸發重複前的延遲時間。建議設為 200 到 300。
Flags:將此值改為 59 以啟用設定。

2026年1月21日

利用 Windows 的輔助使用功能「篩選鍵」來覆蓋標準的鍵盤速度設定

 核心步驟:修改註冊表以超越限制

這項技巧是利用 Windows 的輔助使用功能「篩選鍵」來覆蓋標準的鍵盤速度設定。 

按下 Win + R 鍵,輸入 regedit 並按下 Enter 開啟登錄編輯器。

導航至以下路徑:

HKEY_CURRENT_USER\Control Panel\Accessibility\Keyboard Response

在右側視窗中修改(或建立)以下字串值(REG_SZ):

AutoRepeatRate:設定為更小的值。此數值代表重複的時間間隔(單位為毫秒)。例如:

設定為 10:每秒重複約 100 次。

設定為 6:每秒重複約 160 次。

AutoRepeatDelay:設定重複前的延遲時間。建議設定為 200 或 300 毫秒。

DelayBeforeAcceptance:設定為 0。

BounceTime:設定為 0。

Flags:設定為 59(十進制)。這個數值會強制啟動篩選鍵並套用自定義速率。

重新登入或重啟電腦以使設定生效。