##title##

2016年2月28日

Autohotkey:大量BT種子批量下載並改檔名腳本

這個腳本主要是為了用來解決我常有大量種子下載需求。

因為在下載種子的時候,通常我就會把我想要存成的檔名或資料夾名稱直接改為種子名稱。但是當有幾十個種子要下載的時候,我必須重複這樣的動作:
  1. 按F2。
  2. Ctrl+C複製種子檔名。
  3. Enter開啟種子。
  4. 檢視這是單一檔案或是一個資料夾。如果是資料夾的話直接貼上名稱,但如果是單一檔案就只貼上名稱到副檔名前,所以如果是手動的話這時候會比較麻煩。因為只有單一檔案這樣的種子它的路徑可能會是「C:\Download\XXXX123.avi」,就算你的設定是隱藏副檔名,你直接貼上,它下載下來的檔案會變成沒有副檔名「XXXX123」這樣的檔案。
  5. 選擇想要保留的檔案(因為有時候種子裡會有很多垃圾檔)按Enter。
  6. 回到放種子的資料夾選下一個檔案,繼續上述動作。
其他地方的自動化都還蠻好處理的,但其中最麻煩的部分是第4點,這裡用到了判斷字串、計算字串長度以及修改字串的技巧。

另外一個比較麻煩的是第6點,這裡需注意到SetTitleMatchMode的值,因為需要用到包和或用更多條件精準判斷視窗名稱的技巧。另一個是Gosub所在位置,因為很假掰的用了else,結果一開始一直不知道為什麼「Gosub, avmove」沒有辦法被啟用,結果是因為放的位置錯了。(我原本放到avcopy最後的return之前)

所以前前後後可能研究了好幾個小時吧,現在只剩不知道怎麼寫如何選擇想要保留的檔案。(如果大概知道怎麼做得大大也可以分享一下大概可以怎麼做)

但目前的做法已經解決大部分問題,還是蠻有成就感的,來分享一下作法,大家以後如果碰到類似問題可參考。

F8:: ;種子自動貼檔名:啟動
Gosub, avcopy
return

avcopy: ;種子自動貼檔名(查字串中是否有副檔名判斷為單獨檔案或是資料夾)
Send, {F2} ;編輯檔名
sleep, 500
Send, ^{C} ;複製檔名
filename = %clipboard%
Send, {Enter}{Enter} ;開啟種子
sleep, 888
Send, ^{A} ;全選路徑
sleep, 300
Send, ^{C} ;複製路徑
sleep, 300
if clipboard contains .wmv,.mp4,.avi,.mkv,.rmvb,.rm ;如果完整路徑中包含所列副檔名,則判定為只有單一檔案
{
 StringGetPos, pos, clipboard, ., R ;從最右邊開始搜尋點的位置
 StringLen, length, clipboard ;計算字串長度
 npos := length-pos ;長度減掉位置
 StringRight, fileextension, clipboard, npos  ; 把clipboard中名稱去掉檔名丟到變數fileextension
 clipboard = %filename%%fileextension% ;把檔名加上副檔名後丟到剪貼簿
 sleep, 300
 Send, ^{V} ;貼上種子檔名&副檔名內容
 Gosub, avmove
 return
}
else
{
 clipboard = %filename%
 sleep, 300
 Send, ^{V} ;貼上種子名稱
 Gosub, avmove
    return
}
Gosub, avmove
return

avmove: ;種子自動化:確認並移動到下一個種子
SetTitleMatchMode, 2 ;SetTitleMatchMode包含模式
WinWait, 增加新的Torrent ahk_class #32770
sleep, 100
WinWaitClose, 增加新的Torrent ahk_class #32770
sleep, 100
SetTitleMatchMode, 3 ;SetTitleMatchMode準確匹配模式
WinWait, Torrent ahk_class CabinetWClass, 
IfWinNotActive, Torrent ahk_class CabinetWClass, , WinActivate, Torrent ahk_class CabinetWClass, 
WinWaitActive, Torrent ahk_class CabinetWClass, 
Sleep, 100
Send, {Down}
Gosub, avcopy
return

2016年2月17日

Excel:用yahoo api抓股價Excel巨集


之前有用PTT板上大大寫的excel巨集,不過他用的方式是去抓網頁。

缺點是網頁有修改的話版位就走樣。而且如果要讀取的股票數量多的話,速度會很慢。
(那個巨集板上大大也沒有要繼續維護了...可惜)

昨天研究了一下,最後找到了api的這個巨集方法。參考了:
http://kuanming-style.blogspot.tw/2013/02/excelvbayahoo-finance-apis.html
和巨集作者M.Kishinevsky and M. Higgs的檔案:
http://www.pythonclub.org/project/yahoo-data-api


yahoo提供的api應該比較不會有甚麼異動才是,而且抓資料速度快超多。

我改了一個平常在用的Excel範本,提供各位參考:

https://sites.google.com/site/kslman/file/Stock%2Byahoo_sample.xlsm?attredirects=0&d=1

md5:8d17c8b6af281aa7bea464c39ef5acc0


使用說明:

1.打開後記得啟用巨集

2.「即時」分頁中的按鈕「Download Data」點下去,就會把A欄有Symbols的股票更新。

3.「即時」分頁中的「C2」裡的值「l1c1vhgd1rm4n」可以自定義。右邊Yahoo Tag那張圖裡面有說明填入甚麼樣的代碼會回饋甚麼值。不過表頭不會跟著更新,如果有興趣DIY修改的,自己要搞清楚是動到哪一欄。

4.如果要新增要查詢的股票,在「參照」分頁中自行在A、B、C增加編號、名稱和類別,D和E是公式,只要往下拉就可以。然後把得到的Yahoo Symbols貼到「即時」分頁A欄。

5.分頁「關注」和「對帳單sample」就只是兩個範本而已。提供參考如果抓api資訊後,Excel後續可以幫助你做甚麼事情的範本。


如果對巨集有甚麼疑問的話,可以自己打開來看。

內容跟原作者M.Kishinevsky and M. Higgs的內容是一樣的,我只是加上中文註解。

巨集如下。


Sub GetData()

'宣告變數

    Dim QuerySheet As Worksheet

    Dim DataSheet As Worksheet

    Dim qurl As String

    Dim i As Integer

'告訴Excel不要每更新一格就重新計算

    Application.ScreenUpdating = False

    Application.DisplayAlerts = False

    Application.Calculation = xlCalculationManual

'將現在的工作表設為資料表

    Set DataSheet = ActiveSheet

'從第七列開始,只要第一欄(A欄)內容不是空的,就把代碼加到Yahoo Finance API的

網址中

    Range("C7").CurrentRegion.ClearContents

    i = 7

    qurl = "http://download.finance.yahoo.com/d/quotes.csv?s=" + Cells(i, 1)

    i = i + 1

    While Cells(i, 1) <> ""

        qurl = qurl + "+" + Cells(i, 1)

        i = i + 1

    Wend

    qurl = qurl + "&f=" + Range("C2")

'將網址放到C1的欄位中

    Range("c1") = qurl

'抓取資料

QueryQuote:

             With ActiveSheet.QueryTables.Add(Connection:="URL;" & qurl,

Destination:=DataSheet.Range("C7"))

                .BackgroundQuery = True

                .TablesOnlyFromHTML = False

                .Refresh BackgroundQuery:=False

                .SaveData = True

            End With

'將CSV的格式塞到Excel的表格當中

            Range("C7").CurrentRegion.TextToColumns Destination:=Range("C7"),

DataType:=xlDelimited, _

                TextQualifier:=xlDoubleQuote, ConsecutiveDelimiter:=False,

Tab:=True, _

                Semicolon:=False, Comma:=True, Space:=False, other:=False


'讓Excel重新活回來,讓資料能夠顯示

'turn calculation back on

    Application.Calculation = xlCalculationAutomatic

    Application.DisplayAlerts = True

'    Range("C7:H2000").Select

'    Selection.Sort Key1:=Range("C8"), Order1:=xlAscending, Header:=xlGuess, _

'        OrderCustom:=1, MatchCase:=False, Orientation:=xlTopToBottom

    Columns("C:C").ColumnWidth = 12

    Columns("J:J").ColumnWidth = 25.43

    Range("h2").Select


End Sub




PS:
原作者網誌中也有附上完整的api代碼說明
http://www.pythonclub.org/project/yahoo-data-api

不過有些代碼就算抓出來,並對照它的英文敘述我也還是看不懂是甚麼。

如知道代碼意思且有興趣幫忙解釋的大大,可在下面推文,我有空會持續完善這張表。


目前我已知代碼解釋如下。

d1      Last Trade Date          最後交易日期
l1      Last Trade (Price Only)  成交價
c1      Change                   漲跌(值)
c       Change & Percent Change  漲跌值與百分比
v       Volume                   成交量(這裡顯示股數非張數)
h       Day's High               當天最高價
g       Day's Low                當天最低價
r       P/E Ratio                本益比
n       Name                     股票英文名稱


--
上文同步有貼在 PTT Stock 板。

其他參考資訊:
http://lovecoding.logdown.com/posts/257928-use-yahoo-api-to-obtain-historical-stock-price-data

2016年1月25日

Excel:開啟Excel自動開啟額外視窗







Windows 7下的方法

1、打開REGEDIT

2、在HKEY_CLASSES_ROOT\Excel.Sheet.8\shell\Open目錄下,只保留以下內容:
[HKEY_CLASSES_ROOT\Excel.Sheet.8\shell\Open]
@=”打開舊檔(&O)”

[HKEY_CLASSES_ROOT\Excel.Sheet.8\shell\Open\command]
@=”C:\Program Files\Microsoft Office\Office11\EXCEL.EXE” /e

預設值變更為:
"C:\Program Files (x86)\Microsoft Office\OFFICE11\EXCEL.EXE" /e "%1"

3、刪除ddeexec這個目錄和command下的那個command的鍵值。


其中Excel.Sheet.8為xls檔、Excel.Sheet.12為xlsx檔。

而路徑中:
Office11表示是Office2003
Office12表示是Office2007
Office14表示是Office2010

不過我看到的鍵值是:
"C:\Program Files\Microsoft Office\Office14\EXCEL.EXE" /dde

如果是改為:
"C:\Program Files\Microsoft Office\Office14\EXCEL.EXE" /dde "%1"
也可以正常執行,參數應該是都吃的。


參考資料:
http://blog.xuite.net/lidj37/twblog/179517401-%E9%96%8B%E5%95%9F%E5%A4%9A%E5%80%8B%E7%8D%A8%E7%AB%8BExcel++xp%2Fwin7
http://blog.darkthread.net/post-2013-07-15-open-excel-side-by-side.aspx

2015年11月14日

家中電腦紀錄

昨天老媽說電腦開不了機,拔了捍馬測了一下,果然是psu掛了,幫老媽電腦換了psu,順便記錄一下硬體規格。

dad號(主結構為妹妹淘汰的電腦):
cpu:AMD Athlon 64 X2,4000+(2100MHz)
mb:ASUS M2N-MX SE
ram:Apacer 1G DDR2-800*2=2G
主hd: Intel 320 series 120GB(拔自我2012/4/11買的SSD,保固時間到 2016/11/19)
vga:nVIDIA GeForce 6100-430(內顯)
psu:捍馬 Hamer 430w(拔自我2008/12/14買的psu,應該老早就過保了)

mom號(主結構為歐比王淘汰的電腦):
cpu:AMD Athlon 64 X2,4800+(2500MHz)
mb:gigabyte GA-M56S-S3
ram:1G DDR2-800*2=2G
主hd:Plextor PX-128M5S(二手,2015/8/21購買,1060元含運,保固到2017)
vga:nVIDIA GeForce 8500GT
psu:黑武士350w(2015/11/14替換,光華商場購買,950元)

兩台老電腦換了ssd和psu後都還是跑得很順很健康。

2015年8月8日

Plextor M6S 256GB 2.5吋 SSD in SATA2

老爸的電腦越來越慢,最近他身體不舒服,提早回家休息玩暗棋常常抱怨電腦越來越慢。

昨晚雖然颱風,加上父親節快到了,於是趁提早下班,趕進衝到光華商場買了顆Plextor M6S 256GB 2.5吋SSD。刷卡價2855元。

還好衝得快,大部分店家都關門了。

......

然後回家之後,把我電腦裡的Intel 320 Series 120G拔到老爸的電腦。

然後M6S換上我的電腦。XD

測試環境:
CPU: Intel E7300
MB: P5KPL-C/160(ICH7)
RAM: 4GB

雖然 M6S支援SATA3,不過我的老電腦不支援,姑且先來個SATA2的測試。

和之前Intel 320 Series 120G做個比較。


整體讀寫都優異了一些,循序讀取比較低了些,不過這應該是受限SATA2了,在SATA3上應該會是另一個風景。

2015年7月24日

Tt eSPORTS Level 10 M電競滑鼠(皎潔白)



Tt與BMW Group DesignworksUSA團隊合作的滑鼠,Tt eSPORTS Level 10 M電競滑鼠,網路上很多開箱文,就不寫太多了。

原價2999,通常賣1990,而且有時候會折價,所以觀望了很久。


但公司最近用的滑鼠左鍵越來越異常,所以看了一下東森購物,有300元折價券。

用了300元折價券,故1690元購得。7/21下訂。


原本想買黑的,但隔天廠商打電話告知說黑色只剩一個盒子有瑕疵,而且已經停產,怕會沒有貨可以換,問我要不要換白色。想說反正放公司用,就隨便吧。7/24取得。結果白色也蠻OK的。

簡易心得:
  1. 左邊的巨集鍵超容易按到,預設是上一頁或下一頁,所以就把它停用。
  2. 光碟內建的設定程式雖然是多國語言,但介面是英文,而且垂直解析度800的時候下面會被工作列擋到,變得還要把工作列移開才能按OK,整個很傻。
  3. 左右鍵和滾輪都蠻省力,對手指應該會比較好一些。
  4. 原本想說白色應該很容易髒,但它白色部分應該是類似亮面烤漆,感覺會比一般的漆或軟橡膠漆耐用得多。不過還是要再用用看了。
  5. 握起來尺寸還蠻大的,比想像中的還大。
  6. 蠻重的,如果有把滑鼠拿起來調位置的習慣會比較辛苦,所以我就把超小的滑鼠墊扔一旁了。反正這隻的雷射定位應該還蠻準的。

 所以整體來說,如果左側巨集鍵沒有這麼容易按到,其實會是很好的滑鼠。XD


PS: 2015/12/14又刷一個1592。

Autohotkey:熱鍵

熱鍵


符號 說明
# Win (Windows 徽標鍵). 在 v1.0.48.01+, 對於 Windows Vista 及以上版本, 包含 Windows 鍵的熱鍵 (例如 #a) 會等待 Windows 鍵被釋放後才發送任何包含 "L" 鍵擊的文本. 這樣避免了這種熱鍵中的 Send 鎖定 PC. 這種行為適用於除 SendPlay (這裡不需要) 和 盲從模式 外的所有發送模式.
! Alt
^ Control
+ Shift
& 和符號可以用來組合任意兩個按鍵或鼠標按鈕, 讓它們成為自定義熱鍵. 請參閱 後面 瞭解詳情. 在 Windows 95/98/Me 中這樣的熱鍵會被忽略 (無法激活).
< 使用成對按鍵中左邊的那個. 例如
> 使用成對按鍵中右邊的那個. 此符號在 Windows 95/98/ME 中會被忽略.
<^>! AltGr (alternate graving). 如果您鍵盤佈局中含 AltGr 鍵而非右 Alt 鍵, 那麼這一系列符號一般可以用來表示 AltGr (需要 Windows NT/2k/XP 或更高版本). 例如:
   
  <^>!m::MsgBox You pressed AltGr+m.
  <^
   
  或者, 讓 AltGr 自己成為熱鍵, 請使用下面的熱鍵 (不像上面出現的任何熱鍵):
   
  LControl & RAlt::MsgBox You pressed AltGr itself.
   
* 通配符: 即使附加的修飾鍵被按住也能激發熱鍵. 這常與 重映射 按鍵或按鈕組合使用. 例如:
   
  *#c::Run Calc.exe  ; Win+C, Shift+Win+C, Ctrl+Win+C 等都會觸發此熱鍵.
  *ScrollLock::Run Notepad  ; 即使在按住其他鍵時按下 ScrollLock 也會觸發此熱鍵.
   
  此符號在 Windows 95/98/ME 中會被忽略.
~ 激發熱鍵時,不會屏蔽(被操作系統隱藏)熱鍵中按鍵原有的功能。在下面的兩個例子中, 用戶的鼠標按鈕點擊會被發送到活動窗口:
   
  ~RButton::MsgBox You clicked the right mouse button.
  ~RButton & C::MsgBox You pressed C while holding down the right mouse button.
   
  注意: 1) 與其他前綴符號不同, 可以在某些熱鍵的 變體 中使用顎化符前綴但其他的不使用; 2) 代替 alt-tab 的特殊熱鍵總是忽略顎化符前綴; 3) 顎化符前綴在 Windows 95/98/ME 上被忽略
$ 通常只在腳本使用 Send 命令發送包含了熱鍵自身的按鍵時才需要使用此符號, 此時可以避免觸發它自己. $ 前綴強制使用 鍵盤鉤子 來實現此熱鍵, 作為一個副作用這樣避免了 Send 命令觸發它自己. $ 前綴相當於在此熱鍵定義之前的某個位置指定了 #UseHook.
   
  [v1.1.06+]: #InputLevel 和 SendLevel 對 Send 命令是否觸發熱鍵和熱字串提供了額外的控制功能.
UP 單詞 UP 可以跟在熱鍵名後面使得在釋放按鍵時觸發熱鍵, 而不是按下時. 下面的例子把 LWin 重映射 為 LControl:
   
  *LWin::Send {LControl Down}
  *LWin Up::Send {LControl Up}
   
  "Up" 也可以用於普通熱鍵中, 例如: ^!r Up::MsgBox You pressed and released Ctrl+Alt+R. 它還可以用在 組合鍵 (例如 F1 & e Up::)
   
  限制: 1) "Up" 不能和 有些桿按鈕 一起使用; 2) "Up" 需要 Windows NT4/2000/XP 或更高版本; 且 3) 沒有普通/按下熱鍵副本的 "Up" 熱鍵會完全接管那個熱鍵以防止它的按鍵卡住. 避免這種情況的一種方法是添加 顎化符前綴 (例如 ~LControl up::)
   
  相關提示, 類似於上面的一種技術是讓熱鍵成為前綴鍵. 好處是儘管熱鍵會在按鍵鬆開時激發, 但僅在您之前按住此前綴鍵時沒有按其他任何鍵的情況下才會如此. 例如:
   
  LControl & F1::return  ; 通過把左 control 鍵放在 "&" 前面至少一次來讓它成為前綴鍵.
  LControl::MsgBox You released LControl without having used it to modify any other key.
   

2015年7月12日

Diesel DZ1028 寶島鐘錶清理

應該是買了11年左右的 Diesel DZ1028,前幾天停下來。

原本以為是又沒電了,跑去士林夜市寶島鐘錶原本要換電池。

師傅檢查一下,說這不是沒電,是髒了。

清理要價700,換電池還要另外100元。


我原本想說唬爛吧,石英錶有在洗錶的?之前都馬隨便找個錶店換電池就好了。

所以多跑了幾間店,但店家換了電池都不會動,才覺得應該真的不是沒電。


碰巧原本要去士林夜市那邊的寶島鐘錶,經過時又發現文林路有另一間寶島鐘錶。

於是進去又問了一下,裡面的師傅也是說這不是沒電,是錶髒了。

不過這家說只要650,便宜了一點,而且說如果需要換電池不用另外加錢,

所以就直接給這間清理了。沒想到同樣是寶島鐘錶,價格還有不一樣的。


昨天送錶,今天下午拿錶,還附了一張保證書。

錶果然又能動了,希望他可以頭好壯壯,再陪伴我下一個十年。


不過還沒真想到石英錶有需要洗錶,跟大家分享一下這個冷知識。

而且現在智慧型手機發達,錶店越來越少,超難找的...

像我這樣還習慣戴錶的人應該是異類了吧。