领先的免费Web技术教程,涵盖HTML到ASP.NET

网站首页 > 知识剖析 正文

极客风格的实时行情信息显示(二)——windows桌面提示条

nixiaole 2025-02-09 13:40:22 知识剖析 11 ℃

前面畅想了几种极客风格的行情信息显示,还夸口说了都要实操一下,这篇就讲讲第一种实现:不花钱的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股、美股、外汇、虚拟币,行情年报市场信息,啥都有。本人不才,也研究出了它的接口,调用也是贼方便,后面单片机部分,就会有讲到。

最后是这小提示工具的几种呈现:

最近发表
标签列表