2024-03-24
解決AnyDesk遠端桌面滑鼠多選無法釋放的問題
2023-04-24
TextCrypt字串加解密工具
撰寫應用程式時,我們常會將設定檔*.config裏的敏感字串(如資料庫連線)加密以防止被人任意窺看,再於Runtime執行時依特定Secret Key作字串解密。然而明文字串隨時可能修改,因此我們需要一個簡易的工具來幫快速產生已加密的字串值。
此工具支援比較常用的對稱式可逆加密法:
2023/04/24 Version History:
- 新增Base64Url加解密功能。
- 升級.NET Framework版本,由4.6升級至最新4.8
2015/08/14 Version History:
- 新增XOR+Salt4的原創加密方式,它的作法簡單卻效能高,且可轉換成各種程式語言(因為原理簡單)。
明文20字,加密後的長度為32值,剛好與一般密碼長度一致(MD5/GUID)。 - 新增XOR+MD5加密法,它是將密碼MD5 Hash後(16-byte),與明文作XOR運算而得到密文。
- 增加文字顯示的字串長度值,以觀測密文與明文之間的長度變化。
- 更換App Icon.
- 新增輸出字串轉成HEX十六進位顯示,這可以驗證RC4加密後的加密陣列。
- 升級方式,exe+config檔全部overwrite舊檔。
- 新增標準的AES-128/256加密法,使用32位長的Salt產生Hash Key/IV bytes,增強安全性。
- 新增GUID/UUID產生器。
- 新增Input/Output文字方式的複製、清除及大小寫的功能。
- 重新排序CryptType的下拉項目順序。
[OneDrive]
2017-06-28
VMware奇怪的網路NAT(VMnet8)不通
在一次升級VMware 12.5.3至15.5.5版本時,升級過程貌似一切正常,但虛擬機原本運作好好的NAT網卡,卻出現「Could not connect 'Ethernet0' to virtual network 'VMnet8'」的奇怪錯誤,無法上網也無法和HOST OS互PING相連。即使把該虛擬機網卡移除再新增,也無法連接網卡。
由於我的NAT網段不是用預設值的,估計裏頭亂掉了,經過查網是必須恢復回預設值。因此開啟VMware主畫面,在功能表「Edit/Virtual Network Editor」畫面的左下角,點擊「Restore Defaults」回復預設值按鈕。
它會整個VMware網卡驅動重新整理,變成預設的網段,再調整回自己慣用的虛擬網段即可。
2017-05-09
移除Win10預設所有Apps軟件
如果你的Win10電腦是專門工作用途,而且用不著WIN10預設安裝APP的話,可以使用下面教學文章去移除所有預設安裝的App程式。若之後想要安裝,再使用其Store商店程式作單一安裝即可。
How To Uninstall Default Apps In Windows 10
http://www.intowindows.com/how-to-uninstall-default-apps-in-windows-10/
簡單步驟:
- 以Admin角色執行「Windows Powershell」程式,輸入以下指令即可一鍵移除所有預設安裝的APP。
Get-AppxPackage -AllUsers | Remove-AppxPackage - 完成預設App移除工作,就是這麼簡單。
我也挺喜歡Win2016的工作介面環境,它使用WIN10的系統核心卻沒有多餘花俏的APP,只可惜SERVER版對一些硬件的驅動程式採事先驗證,無法像WIN10能插上就無痛驅動,因此還是選擇時常出新UPDATE的WIN ISO檔為宜。
2017-04-04
Visual Studio 2017 Update
VS2017在Offline Installation離線安裝未能提供ISO光碟檔被人詬病,不過它的優點是若只開發C++ Native程式,只需要下載安裝3GB空間而己,而不需要一般的20GB。然後,這理由未能說服離線安裝需求的人,畢竟微軟應該把最常用的Layout組合(C# ASP.NET/WinForm),製成一份20GB ISO檔供離線下載才對。
Create an offline installer for Visual Studio 2017 | Microsoft Docs
https://docs.microsoft.com/en-us/visualstudio/install/create-an-offline-installation-of-visual-studio
幸好有熱心網友Myhammad提供離線Layout的RAR壓縮檔供人下載:
Visual Studio 2017 Editions – Google Drive
https://drive.google.com/drive/folders/0B78wbPvH6XGZcFg4bF9LS3QtWk0
然而這種Component模組安裝方式的架構,很適合之後的VS2017 Update更新,加速了Bug修正的周期,以VS2015的更新方式更快速。
Visual Studio 2017 Release Notes
https://www.visualstudio.com/en-us/news/releasenotes/vs2017-relnotes
2016-10-12
掛載USB隱藏分區(Hidden Partition)
要將PE系統製作至一個USB開機碟時,通常它會分成兩個分區(Partition),分別為下圖編號1的資料區(Data)及及編號2開機區(Boot, Hidden),並且把開機區設定隱藏+活動(Active+Hidden),如此插入USB碟時,系統只會出現Data區。
要升級PE工具的新版本,一般做法是直接替換開機區內的*.wim (Windows Image Manager)系統映像檔即可。但是開機分區雖能夠取消隱藏,卻無法掛載盤符至系統裏來操作,因為一般分區工具只允許磁碟第1主分區位置才能掛載盤符。為了解決這問題,我們可以使用BOOTICE工具來掛載任一隱藏分區至系統。
操作步驟為:
2016-05-04
LINQPad Command Script自動化
我使用LINQPad不是用來查LINQ或SQL,而是把它當作程式產生器,增加編程的工作效率。後來發現它有提供Command-Line的執行模式(lqrun.exe),可以讓伺服器主動透過Schedule排程,定期自動執行一些管理工作,例如每日備份資料庫,FTP上傳到異地備援主機,並刪除超過30天前的舊檔案。你不再需要學習語法難用的Batch File或其他Shell Script,單單純純地執行C# Script即可。
LINQPad免費版本在執行階段沒什麼限制,放在伺服器端跑Task Scheduler批次工作,十分完美搭配。
"C:\LINQPad\lprun.exe" "C:\Task\hello.linq"
關於更多LINQPad內建功能,請詳見以下連結:
LINQPad Command-Line and Scripting
http://www.linqpad.net/lprun.aspx
LINQPad Extension Methods - Stack Overflow
http://stackoverflow.com/questions/3555317/linqpad-extension-methods
2016-04-29
System UpTime系統已運行時間
為了簡化流程,因此開發了一個簡單的UI工具來查詢系統已運行時間。顯示介面支援多國語言顯示框架,用戶可以自行擴充其他語言及字詞(在Language子目錄仿作)。
為了能讓UI介面高客製化,相關設定皆定義在Config.json檔中,您可自行修改。例如畫面的長寬、重疊置頂(TopMost)、字體Size皆能調整,並支援畫面上的時間字串格式化顯示、自動刷新間隔秒數。
Version History:
2016/04/29:- 設計此工具的專屬Web網站,提昇軟件品質形象,也方便用戶查看及下載。
- Config中的下載網址異動默認值,相容最小版次值為20160429。
- 將畫面自訂長寬Size調整納入「Save Preferences」的儲存範圍內,它會自動計算表單的Width/Height Offset的值。
- 表單預設寬度,由原本3位數的Days,縮減至2位數的寬度。
Download: (.NET 4.6.1 Required, 綠化免安裝)
前往下載頁面
2016-04-20
完美將TXT轉成電子書epub/mobi檔
以下是轉換步驟:
- 網上搜尋被推薦的書名,並下載該書TXT純文字檔案,很多網上連載小說網站均有提供。
- 利用ConvertZ中文繁簡工具,將TXT檔案BIG5/GB2312轉成UTF8編碼的格式(檔案Size會變大)。
- 開啟下圖EasyPub工具,拉入或指定來源TXT檔案(編號1),輸出副檔名(編號2)預設是.epub檔,若想轉成Kindle格式,改成.mobi檔即可。
- 具有章節索引對於電子書查閱很重要,先打開TXT檔我們發現下圖40行的章節寫法規則,是前面有空白字元,接著「第X章 章節名稱」,因此它的編寫規則都是上圖編號3的方式,點擊編號4按鈕「章節編輯」來預覽判讀結果。
- 程式會依章節規則取出符合的項目名稱,但此TXT檔例子它的每個章節都有重複名,因此可以勾選下圖編號2,凡該章節下的內文不超過1行則刪除,即可呈現不重複的章節項目(下圖編號1)。
- 針對這本書的相關規則設定,你都可以儲存起來(*.epsav),若該TXT檔是連載中的小說,你就可定期依以上步驟快速產生完美的轉換過程。最後回到主畫面,點擊「開始轉換」按鈕,就可以產生epub及mobi檔案。
- 使用Clibre閱讀程式來觀看效果,章節判讀很正確,下圖編號3章節名稱呈現會有區塊底色,但實際在手機電子書軟件「Moon+ Reader」或Kindle實際閱讀時,均不會有這樣礙眼的底色。頁面的配色效果,也可以在EasyPub工具的「定製CSS」中自訂。
2016-03-30
修正LibreOffice Calc加總欄位不會自動更新問題
為了減少對微軟Excel的倚賴,我逐步慢慢把平時常用Excel記帳表轉成免費軟件LibreOffice Calc 5.x軟件,當然我是利用Calc開啟舊Excel檔,經過調整後再另存成Open Document Spreadsheet (*.ods)格式。有一天發現此檔的加總欄位SUM值,竟然不會在區間欄位值異動時自動計算加總,查了一下原因,原來是Calc對於Excel檔案及其他軟件的ODS檔並不會主動重新計算,算是不相容的理由。
在Calc的「Tools/Options/LibreOffice Calc」可以看到這樣的開啟選項。此處不需要調整為「自動重計算」,因為不相容的檔案最好保持原來初值就好,強制重算反而會有計算錯誤問題。
解決之道把目前的ods檔另存(Save a copy)成Excel檔(*.xlsx),然後使用Calc開啟這個另存的xlsx檔,再作一次另存成*.ods檔案(此時就是Calc支援的新ODS版本),就可修正不會自動加總的問題了。
若你不是重度使用微軟Excel的財務/會計,或需和別人檔案交換的需求,使用開源免費的LibreOffice是一個不錯的選擇,雖然它的UI介面沒有商業軟件那麼細緻但也趨近了,而且LibreOffice持續維護新版本也有免安版本(不到200MB),很值得推薦。
2016-02-25
Movie Renamer 電影下載批次命名工具
現在流行的電影下載檔,通常是至少720P以上的內嵌字幕MP4超清版本,以單檔獨立存在,因此不再需要像以往用目錄方式來歸類整理。下載好的電影檔名通常含有片名及畫質尺寸、字幕言語等資訊字串,因此若能以程序自動判斷這些命名的潛規則,就可以快速批次更名為以下的格式。
因此我寫了一個用滑鼠拖拽操作的電影更名工具,以「檔案號日期命名工具」該篇介紹為技術核心基礎,新檔名除了能自訂輸出格式字串外,還能定義特定關鍵字來推導形成電影的語言地區。例如下圖編號1,它定義輸出檔名的格式Pattern,而每種Pattern在下面更有詳細的推導關鍵字及設定,例如NamePattern可以中文簡轉繁,DatePattern可以使用下載日期或目前時間。
自訂的命名設定可寫入Config.json檔,支援多個電影檔案直接滑鼠拖拽即可完成更名。Config裏的設定意義,請以默認值作效果推理,拿些空文字檔測試即可了解。
檔案下載: (綠化免安裝,但需要支援.NET Framework 4.6.1)
百度雲盤下載 (MovieRenamer_20160225.rar, 285KB)
Release History (2016.02.25):
- 多檔案批次拉拽命名,使用Date,Name,Nation三種命名Pattern自訂化格式化輸出。
- NamePattern可以依格式自行新增推導國家語言的關鍵字,數量不限。
- NET執行版本提升至4.6.1。
2016-02-15
ESET NOD32 9.x排除掃毒路徑
要排除某程式不被ESET防毒軟件自動掃描誤判,可以手動加入掃毒排除裏,在「Setup/Advanced setup/ANTIVIRUS/EXCLUSIONS」裏設定排除目錄:
排除的語法為:
ESET Smart Security - Online Help
http://help.eset.com/ess/9/en-US/?idh_exclude.htm
2016-01-16
VS2015的Build熱鍵更改
進入ASP.NET MVC的時代,只能使用Web Application專案,它的任何CS源碼異動,必須重新Compile編譯才能生效。雖然它比ASP.NET 4.0的即改即譯Web Site專案來得麻煩,但在Release時階段不需要透過Publish Build來打包,能夠快速替代其主要的專案DLL檔,是其最大的優點。
為了能快速編譯方案,我們可以在VS2015下設定以下常用功能的熱鍵HotKey。
在菜單「Tools/Options…」下,其對應的Keyword項目分別如下面 (請對應編號項目)。Build Solution預設值是Ctrl+Shift+B,改成F6,而Build Project預設無設定,則改成F7,因為預設的Compile Project熱鍵是Ctrl + F7。
2015-12-08
檔案版號日期命名工具
一般下載的應用程式安裝檔案,我偏好在其檔名後面加上版號+日期,以利分類收藏。例如下圖編號1的檔案,它的右鍵內容含有檔案版號(編號2)、產品版號(編號3)及修改日期(編號4),最後產生為編號5的新檔名。
寫了一個更名工具,只要把多選的檔案或目錄拉入這視窗,就能批次完成上述的更名動作。
由於每個人命名習慣及風格不同,因此我把命名規則邏輯寫在Config.json設定檔中,以方便每個人客製化。
設定檔的參數設定,意義解釋如下(Ln=行號):
Ln:2 設定檔版號,若太舊版本需要刪除Config.json檔,再讓程式自動產生。
Ln:3 檔案名稱的命名格式化字串 {變數名}
Ln:4 目錄名稱的命名格式化字串
Ln:6 替換變數名稱,你也可以自己命名。
Ln:7 檔名是否轉成UTF8繁體中文? (方便中文簡體檔名轉換)
Ln:11 版號會自動抓檔案屬性的FileVersion,若要使用產品版號則設為true。
Ln:12 目錄名稱缺乏版號版號,但也可以用日期變數來當版號。
Ln:16 日期變數預設是以目前時間產生,可設定.NET日期格式化字串。
Ln:17 若是想以檔案修改日期,則UseModifiedDate設為true即可。
檔案下載: (綠化免安裝,但需要支援.NET Framework 4.6)
百度雲盤下載 (VersionRenamer_20151208.zip, 310KB)
貼心功能:
- 檔案版號若為空時,程序會判斷格式化字串中的{version}變數前面字元若為空白,若刪除該空白字元。
- 不僅檔案能命名,目錄也可以更名,支援多檔或多目錄的拉曳方式。
- 更名失敗時,彈出錯誤訊息視窗。
2015-09-05
LINQPad強制不升級
LINQPad軟件本身強迫自動升級至最新版本,沒有任何設定選項能取消AutoUpdate。依官方文件問答,若不想升級的話,必須設定啟動程式參數-noupdate,以下是建立「LINQPad NoUpdate Loader.bat」的內容:
@echo off
start /b LINQPad.exe -noupdate
若不幸已自動升級了,就算把舊版本檔案蓋回來,啟動時仍會被蓋新檔。原來LINQPad自動升級的新版本下載會放在「C:\ProgramData\LINQPad\」目錄裏,它一比對到舊版本,就會蓋檔,因此刪除此目錄就可避免強迫升級。
2015-08-19
NuGet Source Unreachable問題
當在VS裏使用NuGet Package Manager Console安裝套件時,有時候會出現以下錯誤:
The source at nuget.org [https://www.nuget.org/api/v2/] is unreachable. Falling back to NuGet Local Cache at XXX.
建立新的方案,則NuGet運作正常,估計某個地方出錯了。重開VS程式或可修正,但急於當下,可直接加下-Source選項指令:
PM> Install-Package bootstrap -Source nuget.org
網上討論連結:
c# - Source unreachable when using the NuGet Package Manager Console - Stack Overflow http://stackoverflow.com/questions/24025409/source-unreachable-when-using-the-nuget-package-manager-console
2015-07-29
軟件授權序號發行
以前覺得軟件授權用序號方式很容易被破解,因此就實作硬體ID+網路啟動的方式,但站在User的角度其實輸入註冊序號是比較簡單的,至少不需要連網。一般簡單註冊序號的實作方式,就是將用戶資訊+到期時間加密寫成二進位檔。
加密內容方式應該能隨DateTime變化而內容不同,以防止被推算竄改,加密方式可以加上隨機byte陣列Salt(鹽)混淆即可。
關於License授權物件的寫作,多數人大概會優先使用.NET二進化序列化技術,不過我不喜歡這類帶有強型別的序列化行為(因為序列化的前面Bytes都是描述類別不會變化,很好推算加密私鑰),最主要也因為別的程式語言不容易針對檔案作反序列化。
因此我使用「Packet封包結構與解析」文件的格式來包裝License物件,因為它有很好的擴充性,也是C/C++很好理解處理的模式。
當然,.NET軟件上的檢查註冊機制,很容易被反組譯給註解掉IL執行指令,這部分可以在程式裏加上很多空的函式來混淆別人的分析,授權檢查不要只回傳Boolean值就了事,而是在多處關鍵處去授權物件內的值作簡易計算比對,即使發現授權檢查被竄改也不要立即彈視窗警告,使用一個%機率出現怪現象即可。
最後,防守到一個程度被破解就算了,千萬不要為了授權檢查而混淆程式執行效能,做出本末倒置的事才好。畢竟,軟體上的授權檢查,都是防君子不防小人的。
2015-06-23
讓TeamViewer Portable變成開機自動執行
TeamViewer是套挺好用的遠端控制工具,尤其它能穿越防火牆、傳輸檔案,更棒是我能利用它的上線狀態監控遠端主機的運作正常與否。通常我會自官網下載Portable免安裝版本:
但如何讓Portable也能隨系統自動執行呢? 編輯官方下載包目錄下「TeamViewer.ini」,將nosave由1改為0即可。
重新啟動程式,在選單「Extra> Options> General」,就會多出一個自動啟動的選項,勾選它並設定連線密碼。預設的Portable版壓縮ZIP包裏少了「TeamViewer_Service.exe」這個檔案,它能在完整版裏找到,得把它放入目錄才行。
它會自動建立背景服務如下圖項目,如此一來,就不用安裝TeamViewer Host版本於遠端主機內了。
服務項目是呼叫TeamViewer目錄下的「TeamViewer_Service.exe」,與「TeamViewer.exe」桌面互動程式不一樣,在MultiUser多用戶模式下,兩者的TeamViewer ID也不同,後者會隨著系統登入就消失了,而使用隱藏的ID即可在登出時仍能連線。
若想要移除服務,也使用以下的Batch Script來快速移除。@echo off
rem ---------------------------------------------------------------
rem Remove TeamViewer Windows Service.
rem ---------------------------------------------------------------
set SvcName=TeamViewer
sc stop "%SvcName%"
sc delete "%SvcName%"
pause
2015-06-11
VS2013開啟多行的Tab顯示
VS2013開發環境裏,想要讓開啟的文件檔上方Tab作多行呈現是沒辦法的,雖然太多排Tab會顯亂,但一般2-3並排顯示有它的切換便利性。VS有Pinned Tabs釘住頁籤的功能,它們不會被卷縮入左側消失,而有依視窗Size自動多行多排的效果。但是不太可能每開一個文件就花費動作去釘住所有Tab(沒預設值能改),而且默認Pinned Tabs會和一般Tab混排在一起,造成切檔的混檔。
在VS2013功能選單「/Tools/Options/Environment/Tabs and Windows」中可設定Pinned Tabs與其他Tab分離獨立顯示。
如此,常常參照的文件就可設成Pinned Tabs顯示在上面,而下面一般Tabs就放臨時性開啟的文件。
2015-06-03
LINQPad程式產生器
LINQPad是一套測試LINQ與SQL的免費工具(未開源),小巧又綠化免安裝,是測試.NET片段程式碼(Code Snippet)挺好的利器。我看重的是它的語法高亮提示及MyExtension延伸函式章的架構,可以用來寫程式產生器,例如一個資料庫的Table CRUD後端的程式碼,配合UI命名規格及欄位名稱、型別,就可以產出自己架構的程式碼。
產生用完隨拋的POCO類別也沒問題:
甚至平時下載的美劇,也能用滑鼠拖拉批次命名: (此WinForm由LINQPad產生,也能隨時調整取名規則Script Code)
以往用T4 Template及CodeSmith Generator產生的功能,不是依賴性重就是要付費購買,LINQPad提供另一項不錯的選擇。