WPF-股票監看
說明
由於上班如果要看股票就只能透過網頁或很明顯的應用程式切來切去又怕被老闆看到,或著是一直盯看手機又不好意思開提醒的音效,所以就想說寫一個隱藏在畫面右下角可以即時更新股價的程式,可以不用一直切換畫面且半透明不易被發現又不會打擾到工作,當然以上需求都是我朋友提出來的,我只負責開發。
開發
定位於畫面右下角
先在MainWindow.xaml
中
- 設定 Window 屬性讓視窗可以低調一點
- 加入一個 Grid 用來放置股票編號跟成交價
- 再於右上角加入一個 Image 用以關閉程式
1 | <Window x:Class="Stock.MainWindow" |
接著在MainWindow.xaml.cs
的 Window_Loaded 設定視窗的初始位置
1 | private void Window_Loaded(object sender, RoutedEventArgs e) |
設定好後執行程式應該在畫面右下角像下圖的結果
即時於Yahoo Stock抓成交值
利用 Html Agility Pack 透過 XPath 去 parse 網站內容,配合 HAP Explorer 找到網站中各節點 XPath 的寫法。
先從管理 NuGet 中找到 「HtmlAgilityPack」 並安裝
建立一個StockHelper.cs
並撰寫以下的 GetHtmlContent 取得 HtmlDocument 本體,先引用以下 namespace
1 | using HtmlAgilityPack; |
1 | public static HtmlDocument GetHtmlContent(string url) |
透過 GetQuotedMarketPrice 取得成交價
1 | public static double GetQuotedMarketPrice(string stockCode) |
接著在MainWindow.xaml.cs
中直接呼叫 StockHalper.GetQuotedMarketPrice(“0050”) 就可以取得成交價
1 | double quotedMarketPrice = StockHelper.GetQuotedMarketPrice("0050"); |
並設定「txtPrice0050」的值就可以在畫面右下角看到該股及成交價
設定多組
利過 ini 檔達到多組設定的方式
1 | [Stock1] |
建立一個IniHelper.cs
並撰寫以下的 Code 來協助 ini 檔的讀寫
1 | public class IniHelper |
建立一個StockItem.cs
來專門承接 ini 的各 section 項目
1 | internal class StockItem |
並在MainWindow.xaml.cs
中撰寫以下方法來取得所有 ini 的內容並回傳一個 StockItem 的 List
1 | private List<StockItem> GetAllSections() |
接著就可以將MainWindow.xaml.cs
的 Window_Loaded 改成可以長成多個的版面(stockItems為一個 List
1 | private void Window_Loaded(object sender, RoutedEventArgs e) |
接著 MainWindow structure 中讓程式一執行就可以開始即時的一直取得最新成交值
1 | public MainWindow() |
1 | /// <summary> |
最後程式執行的結果如下
Source Code
代碼包含基本功能外,額外包含
- 警報功能
- 成交價上色
參考
Html Agility Pack
使用HtmlAgilityPack(1) 擷取網頁上的股票
SystemParameters.WorkArea 屬性
WPF 获取屏幕分辨率(获取最大宽高)