##title##

2018年12月7日

Autohotkey:日期轉換加上星期,例如將11/23→11/23(五)

因為常常需要key日期然後加上星期,所以寫了這個很懶惰的東西。

感謝PTT的LPH66大大協助優化腳本。



F1:: ;win+shift+w,將所選日期轉換添加星期,以當年計算 ex:11/23→11/23(五)
OldClip = %Clipboard% ;把目前的剪貼簿內容先存起來
sleep, 200
Send, ^c
sleep, 200
Loop, Parse, Clipboard, /,
{
 if A_Index <= 1 ;第1個循環存入v_month
 v_month = %A_LoopField%
 if A_Index <= 2 ;第2個循環存入v_day
 v_day = %A_LoopField%
}
if v_month < 10 ;小於10加0
v_month = 0%v_month%
if v_day < 10 ;小於10加0
v_day = 0%v_day%
if A_MM > 11 ;如果當前月份大於11(也就是12月)
 {
 if v_month < 6 ;如果要輸入的月份小於6(也就是1~5月)
  {
  v_year := A_YYYY+1
  }
 else ;如果要輸入的月份大於等於6(也就是6~12月)
  {
  v_year := A_YYYY
  }
 }
else ;當前月份小於等於11(也就是1~12月)
 {
 v_year := A_YYYY
 }
FormatTime, TimeString,%v_year%%v_month%%v_day%, WDay
TimeString := TimeString-1
V_CWday := SubStr("日一二三四五六", TimeString+1, 1) ;從字串開始向右複製不超過長度1的子字符串至V_CWday
sleep, 200
Clipboard = %Clipboard%(%V_CWday%)
sleep, 200
Send, ^v
Clipboard = %OldClip% ;恢復先前剪貼簿內容
return



其實還可以再優化一下,例如判斷是年底的最後一個月的時候如果輸入的月份小於6月以前,就用明年搜尋星期。有時間再調整吧。


2018/12/26補充:已調整為月底會改為隔年。邏輯是如果當前月份大於11(也就是12月),且要輸入的月份小於6(也就是1~5月),則用隔年來計算。

2018年5月27日

USB 安裝 Windows10 & Setting

Windows 10安裝到usb微軟提供的工具就很簡單易用,就不贅述了:
https://www.microsoft.com/zh-tw/software-download/windows10


Winsows10 Setting

1. Windows 10-進入檔案總管時直接顯示本機頁面並且不顯示快速存取內容
直接顯示本機頁面:
快速存取右鍵→「開啟檔案總管以:」選擇本機

如不顯示最近存取檔案:
快速存取右鍵→隱私權取消勾選

參考自:
http://isvincent.pixnet.net/blog/post/47514048-windows-10-%E9%80%B2%E5%85%A5%E6%AA%94%E6%A1%88%E7%B8%BD%E7%AE%A1%E6%99%82%E7%9B%B4%E6%8E%A5%E9%A1%AF%E7%A4%BA%E6%9C%AC%E6%A9%9F%E9%A0%81%E9%9D%A2%E4%B8%A6


2. 開機時自動啟用數字鍵
修改註冊檔 Win+R輸入regedit開啟登陸編輯器 找到
\HKEY_USERS\.DEFAULT\Control Panel\Keyboard
or
將InitialKeyboardIndicators修改為80000002 重開機即可
重新開機後再登入畫面先開啟NumLock,不登入直接再重開機一次即可


3. 打開「啟動」資料夾(放在這邊的程式開機時會自動啟動)
按下Win+R 輸入 shell:startup(該使用者)或shell:Common Startup(全體),按Enter打開啓動資料夾
如果還不行,可能程式有異常,直接到regedit此處改機碼:\HKEY_CURRENT_USER\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\StartupApproved\Run

ahk腳本無法動執行的話,轉譯為exe,並設定為以windiws7相容性執行即可


4. Autohotkey腳本無效
autohotkey要勾用系統管理員身分執行,部分腳本才能正常執行。(例如偵測某些視窗)
但如果轉譯的exe勾系統管理員身分執行,就無法在開機時自動啟動,所以要:

  • 開機腳本編譯的exe→勾以windiws7相容性執行
  • autohotkey→勾以系統管理員身分執行
如果還是不行,可以新增一個bat檔,內容如下:
@echo off
start "" "C:\ProgramData\Microsoft\Windows\Start Menu\Programs\StartUp\9splay_startup.exe"


5. 開機自動登入
cmd → netplwiz
or
cmd → control userpasswords2 取消勾選「必須輸入使用者名稱和密碼,才能使用這台電腦」


6. 關閉 Windows Defender 功能
登錄檔修改方法:
位置:HKEY_LOCAL_MACHINE\SOFTWARE\Policies\Microsoft\Windows Defender
項目:DisableAntiSpyware
DWORD 數值改為:十六進位的 1


7. 自動喚醒電腦關閉(電腦會莫名其妙自己開機)
控制台\系統及安全性\安全性與維護\自動維護
將允許自動維護喚醒電腦關閉
or
控制台→電源選項→變更進階電源設定→睡眠→允許喚醒計時器→停用
or
網路連線→以太網路→電源管理
將允許這個裝置喚醒電腦關閉(上次重灌是這個關閉後才不會自動開機)


8. Samba伺服器無法連線(例如iPhone AcePlayer)
控制台→應用程式→應用程式與功能→相關設定 程式和功能打→開啟或關閉Windows功能→SMB 1.0/CIFS檔案共用支援→把三個勾都勾起來


9. 允許特定程式變更系統設定而不需再詢問(使用者帳戶控制UAC例外程式)
Win+R 輸入 regedit
找到  HKEY_CURRENT_USERS\Software\Microsoft\Windows NT\CurrentVersion\AppCompatFlags\Layers

應該會看到右邊有一個和名稱和那個應用完整路徑一致的項,=
雙擊,將其數值 ~ RUNASADMIN 修改為 ~ RunAsInvoker

或者也可以直接右邊點擊新建字符串值(就是 REG_SZ 類型),=
名稱為這個程式完整路徑,數值填入 RunAsInvoker

參考自:https://answers.microsoft.com/zh-hant/windows/forum/all/%E6%98%AF%E5%90%A6%E5%8F%AF%E8%A8%AD%E5%AE%9A/7f3ef729-0fbf-4ba6-bc04-c1b5ab0cd8b8


10. 取消工作列搜尋方塊
工作列→滑鼠右鍵→搜尋→隱藏


11.檔案總管顯示本機
檔案總管→快速存取(左上)→滑鼠右鍵→選項


12.安裝XPS Viewser:
檔案總管→電腦→開啟設定→應用程式→應用程式與功能→選用功能→選擇XPS Viewser

參考自:http://shaurong.blogspot.com/2019/09/xps-viewser-windows-10-version-1903.html


Other Winsows10 Note

1. Windows 10專業版以上版本, 才有鏡像的選項。
2. 事前檢查&重灌Todo List:

事前檢查Todo List

  • [x] 重建win10版本usb(重建可以有最新的更新檔)
  • [x] 確認win10 key:Windows使用數位授權啟用,可以在裝置重新安裝相同的 Windows 10 版本而不需輸入產品金鑰。帳號kslman@gmail.com

重灌Todo List

  • [x] chrome恢復
  • [x] onedrive恢復
  • [x] dropbox恢復
  • [x] AHK恢復:C:\Users\kslma\AppData\Roaming\Microsoft\Windows\Start Menu\Programs\Startup\9splay_startup.exe
  • [x] shell:startup
  • [x] 驅動程式恢復
  • [x] Dropbox恢復
  • [x] QQ訊息恢復(訊息可疊加匯入):https://www.gjfs.com.cn/keji/202006/060839153.html
  • [x] 捷徑恢復:G:\Program Files\Quick Launch
  • [x] office恢復
  • [x] google drive恢復
  • [x] pcman恢復:http://jypchome.blogspot.com/

2018年4月2日

致,十年前的我

Hi,十年前的我。


2008年3月,是你第一次踏進遊戲業。

還記得當時你矇懞懂懂的樣子,什麼也不會,什麼也沒有。


但你給自己的第一個目標,是在喜歡的產業裡工作,能全力以赴。

你給自己的第二個目標,現在想想,都還是挺難的。


所以,你會吃上苦頭。

所以,你會微不足道、會充滿壓力、會痛苦、會跌倒。

所以,會有人笑話你、會有人看輕你、會有人討厭你。


但人生不就是走一趟悲歡離合、喜怒哀樂嗎?

請持續走下去。


你的人生大學從來不乏導師。

你該感謝能親眼見識什麼叫用盡全力;

感謝能體悟什麼叫智慧;

感謝有人願意教訓你;

感謝一路走來所有長官、夥伴、前輩、朋友、兄弟,甚至和你沒有關係的人。

他們都是你的導師。


期許你在這條路上,持續前進。

2018年3月22日

Autohotkey:有UI介面的自動化外掛

寫了一個公司系統的自動化外掛,突破了幾個功能。


  1. 實現用Chrome讀取條顏色判斷時間
  2. 用Chrome搜尋文字功能來定位座標
  3. UI介面,文字顯示進度與花費時間
  4. 計算預期完成時間
  5. 圖像化進度條顯示進度
  6. 自動輸出可節省的動作和時間純文字日誌


雖然有些功能是該工具介面限定,但有些概念還是共通,在此紀錄一下。
F12::
V_PluginName = 權限管理外掛
V_Version = v6.3
V_Game = AAA, BBB ;遊戲
V_Name = Aaron, Claire, Jacky ; 名字
V_Function = 功能1, 功能2 ; 功能名稱
V_StartTime = %A_Now% ;紀錄開始時間
CoordMode ,Pixel, Screen ;設置座標模式相對於桌面 (整個屏幕)
CoordMode ,Mouse, Screen ;設置滑鼠座標模式相對於桌面 (整個屏幕)
BlockInput ,Mouse
WinWait, 9sPlay - Google Chrome, 
IfWinNotActive, 9sPlay - Google Chrome, , WinActivate, 9sPlay - Google Chrome, 
WinWaitActive, 9sPlay - Google Chrome, 
Loop, Parse, V_Game, `, ;用 "," 解析 V_Game 字串並計算切割後的字串數量
 {
 V_GameNum =%A_Index%
 }
Loop, Parse, V_Name, `, ;用 "," 解析 V_Name 字串並計算切割後的字串數量
 {
 V_NameNum =%A_Index%
 }
Loop, Parse, V_Function, `, ;用 "," 解析 V_Function 字串並計算切割後的字串數量
 {
 V_FunctionNum =%A_Index%
 }
V_ActionNum := V_GameNum*(V_NameNum+V_FunctionNum) ;計算動作數量
Gui, Color, White ;GUI顏色設定為白色
Gui, Add, Text, W600, 新增項目:%V_Game%`r`n`r`n人員:%V_Name%`r`n`r`n功能:%V_Function%`r`n ;新增本次工作內容文字
Gui, Add, Progress, vV_MyProgress w600 ;新增進度條至變量 V_MyProgress (在字母 V 後指定一個變量名, 此變量將為全局變量)
Gui, Add, Text, vV_MyText W600 Right  ;新增文字至變量 V_MyText (在字母 V 後指定一個變量名, 此變量將為全局變量)
Gui +Resize +MaxSize640x480 +AlwaysOnTop -SysMenu ;GUI設定尺寸、保持最上層、去掉系統選單
Gui, Show, X-900 Y300 NoActivate, %V_PluginName% %V_Version% ;NoActivate 讓當前活動窗口繼續保持活動狀態
Loop, Parse, V_Game, `, ;用 "," 解析 V_Game 字串並執行本次工作內容
 {
 V_CurrentTime = %A_Now% ;紀錄當前時間
 EnvSub, V_CurrentTime, %V_StartTime%, S ;以秒計算總共花了多少時間,並更新至 V_CurrentTime
 V_EstimateTime := (V_CurrentTime//(A_Index)-1)*V_GameNum ;預測時間公式:(當前時間 V_CurrentTime//第 A_Index 個項目-1)*V_GameNum. (//)表示為向下捨除
 V_ProgressPercentage := (A_Index/V_GameNum)*100 ;進度百分比公式:(A_Index 當前進度數/V_GameNum 總遊戲數)*100
 GuiControl,, V_MyProgress, %V_ProgressPercentage% ;更新進度條
  if A_Index <= 1
  {
  GuiControl,, V_MyText, 目前執行到第%A_Index%/%V_GameNum%個項目"%A_LoopField%",已使用時間計算中,預期時間計算中 ;更新進度文字至變量 V_MyText
  Gosub, L_AutoAction ;開權限主要動作
  }
 else
  {
  GuiControl,, V_MyText, 目前執行到第%A_Index%/%V_GameNum%個項目"%A_LoopField%",已使用%V_CurrentTime%秒,預期使用%V_EstimateTime%秒 ;更新進度文字
  Gosub, L_AutoAction ;開權限主要動作
  }
 }
V_CurrentTime = %A_Now% ;紀錄結束時間
EnvSub, V_CurrentTime, %V_StartTime%, S ;計算總共花了多少時間
MsgBox, 262144, %V_PluginName% %V_Version%, 新增項目:%V_Game%`r`n`r`n人員:%V_Name%`r`n`r`n功能:%V_Function%`r`n`r`n太棒了!你又節省了%V_CurrentTime%秒!
Gui,Destroy
FileAppend, %A_YYYY%/%A_MM%/%A_DD% %A_Hour%:%A_Min%:%A_Sec%`, %V_Version% save action`,%V_ActionNum% `, and time(second)`, %V_CurrentTime%`n, %A_ScriptDir%\9SplayBackgroundPluginLog.txt ;輸出日誌
Run, %A_ScriptDir%\9SplayBackgroundPluginLog.txt ;開啟日誌
Return

L_SaveFind1: ;搜尋字串後尋找搜尋色塊
OldClip = %Clipboard% ;把目前的剪貼簿內容先存起來
Clipboard = %A_LoopField% ;將字串替換至剪貼簿
Sleep, 300
send, ^f ;搜尋字串
Sleep, 300
send, ^v ;貼上複製內容
Sleep, 700
PixelSearch, V_ColorCoordinateX, V_ColorCoordinateY, -746, -897, -36, 300, 0x3296FF, 3, Fast ;尋找搜尋色塊
Return

L_SaveFind2: ;點擊座標修正後的勾選框
Sleep, 300
mousemove,  %V_NewColorCoordinateX%, %V_NewColorCoordinateY%
Mouseclick, Left, %V_NewColorCoordinateX%, %V_NewColorCoordinateY% ;點擊座標修正後的勾選框
Sleep, 300
Clipboard = %OldClip% ;恢復先前剪貼簿內容
Return

L_AutoAction: ;開權限主要動作
Mouseclick, Left,  -924,  -871, , 1 ;點項目選單
Sleep, 300
Send, %A_LoopField%{ENTER}
Sleep, 700
Loop ;判斷讀取條是否還在
 {
 PixelSearch, V_ColorCoordinateX, V_ColorCoordinateY, -999, 710, -989, 715, 0xFFFFFF, 3, Fast ;搜尋白色底色
 if ErrorLevel ;如果讀取條還在
  {
  Sleep, 300
  }
 else
  {
  Loop, Parse, V_Name, `, ;用 "," 解析 V_Name 字串後搜尋,並點擊座標修正後的勾選框
   {
   Gosub L_SaveFind1
   V_NewColorCoordinateX := V_ColorCoordinateX-62 ;名字座標修正
   V_NewColorCoordinateY := V_ColorCoordinateY+5 ;名字座標修正
   Gosub L_SaveFind2
   }
  Loop, Parse, V_Function, `, ;用 "," 解析 V_Function 字字串後搜尋,並點擊座標修正後的勾選框
   {
   Gosub L_SaveFind1
   V_NewColorCoordinateX := V_ColorCoordinateX-42 ;功能座標修正
   V_NewColorCoordinateY := V_ColorCoordinateY+5 ;功能座標修正
   Gosub L_SaveFind2
   }
  PixelSearch, V_ColorCoordinateX, V_ColorCoordinateY, -746, -897, -36, 300, 0xDEC05B, 3, Fast ;搜尋確定更改
  V_NewColorCoordinateX := V_ColorCoordinateX+25 ;確定更改座標修正
  V_NewColorCoordinateY := V_ColorCoordinateY+10 ;確定更改座標修正
  Sleep, 300
  Mouseclick, Left, %V_NewColorCoordinateX%,%V_NewColorCoordinateY% ;點確定更改
  Break
  }
 }
Loop ;判斷修正完成蓋台還沒出現
 {
 PixelSearch, V_ColorCoordinateX, V_ColorCoordinateY, -999, 710, -989, 715, 0x7F7F7F, 3, Fast ;搜尋灰色蓋台色
 if ErrorLevel ;如果修正完成蓋台還沒出現
  {
  Sleep, 300
  }
 else
  {
  Mouseclick, Left, -924,  -855, , 3 ;把蓋台按掉
  Sleep, 1000
  Break
  }
 }
Return