前面畅想了几种极客风格的行情信息显示,还夸口说了都要实操一下,这篇就讲讲第一种实现:不花钱的windows桌面提示条:
其实就是这样,一行背景透明的文字,自动置于顶部,可以随意拖动。我自已是双屏,工具启动时自动放置第二屏的右下角,这样应用,网页什么都不会挡住。就连放视频,它也一样在上面,放在启动组里面,打开windows,就自动有了,对我这种只要偶尔眼睛余光关注一下某一股或(其实俺就只关注ETH),还真的够用了。
至于怎么实现的,当然windows上面用的小工具,最方便的就是wpf了,几十行代码就够了,最麻烦的倒是找到一个不花钱,不FQ又能用的API来查行情。找到一个min-api.cryptocompare.com的,好像可以自由使用10万次,我是一分钟刷一次,先用几个月再说。wpf的 MainWindow.xaml中window属性添加这几项就可以实现窗口无边框,透明,且置顶:
AllowsTransparency="True"
Background="Transparent"
ShowInTaskbar="False"
Topmost="True"
显示文字用的两行TextBlock,其中一行放下面用做阴影,背景也得透明,主窗口代码如下:
using System;
using System.Net.Http;
using System.Windows;
using System.Runtime.InteropServices;
using System.Windows.Input;
using System.Windows.Threading;
using System.Windows.Interop;
using System.Windows.Forms;
namespace coin
{
public partial class MainWindow : Window
{
private DispatcherTimer timer;
private static readonly HttpClient client = new HttpClient();
public MainWindow()
{
InitializeComponent();
StartPriceUpdateTimer();
}
private void MoveWindowToSecondaryMonitor()
{
if (Screen.AllScreens.Length > 1)
{
// 假设第二显示器是扩展显示器
var secondaryScreen = Screen.AllScreens[1];
// 获取第二显示器的工作区域大小
var workingArea = secondaryScreen.WorkingArea;
// 计算窗口在第二显示器上的新位置
Left = workingArea.Right - Width ;
Top = workingArea.Bottom - Height + secondaryScreen.Bounds.Top;
}else
{
var secondaryScreen = Screen.AllScreens[0];
// 获取第二显示器的工作区域大小
var workingArea = secondaryScreen.WorkingArea;
Left = workingArea.Right - Width;
Top = workingArea.Bottom - Height;
}
}
private void StartPriceUpdateTimer()
{
timer = new DispatcherTimer
{
Interval = TimeSpan.FromSeconds(60)
};
timer.Tick += Timer_Tick;
timer.Start();
}
private async void Timer_Tick(object sender, EventArgs e)
{
try
{
var url = "https://min-api.cryptocompare.com/data/price";
var response = await client.GetAsync($"{url}?fsym=ETH&tsyms=USD");
if (response.IsSuccessStatusCode)
{
var content = await response.Content.ReadAsStringAsync();
dynamic data = Newtonsoft.Json.JsonConvert.DeserializeObject(content);
PriceTextBlock.Text = $"ETH: {data.USD}";
PriceTextBlock2.Text = PriceTextBlock.Text;
}
}
catch (Exception ex)
{
PriceTextBlock.Text = "Error fetching price";
PriceTextBlock2.Text = PriceTextBlock.Text;
Console.WriteLine(ex.Message);
}
}
private void Grid_MouseDown(object sender, MouseButtonEventArgs e)
{
if (e.LeftButton == MouseButtonState.Pressed)
{
DragMove();
}
}
private void Window_Loaded(object sender, RoutedEventArgs e)
{
MoveWindowToSecondaryMonitor();
}
}
}
其实最完美的应该是放任务栏空白地方,像天气小部件一样,不过windows没开放任务栏小部件接口,硬放上面的话,只有定时不停的置顶才行。这样又会有闪烁,接受不了。
可能有别的办法也不一定,欢迎指教。
其实行情接口问题,以前网易的股票接口不错,免费好用。不过后来就太监了。如果只是电脑用,解析网页硬上,办法也很多,不过后面不还得单片机也得上么,还得有接口,某大平台(对,就是某度)叫什么股市通,和N家金融媒体合作,A股、H股、美股、外汇、虚拟币,行情年报市场信息,啥都有。本人不才,也研究出了它的接口,调用也是贼方便,后面单片机部分,就会有讲到。
最后是这小提示工具的几种呈现: