专栏首页林德熙的博客dotnet 使用 Qpush 快速从电脑到手机推送文字

dotnet 使用 Qpush 快速从电脑到手机推送文字

在手机打字总不是方便,于是就有了 Qpush 这个工具,通过这个工具可以快速从电脑到手机推送文字。 但是这个工具没有找到客户端,于是我就给他写了一个库,通过这个库可以快速进行开发

先介绍QPush 快推这个从电脑到手机最方便的文字推送工具,可以在网页进行输入,在手机自动复制到剪贴板,相当于在手机使用电脑的输入法

在使用之前需要手机安装客户端

IOS : https://itunes.apple.com/cn/app/qpush-kuai-tui-cong-dian-nao/id776837597

安卓: 各个应用商店下载

然后打开网页网页推送输入推名和推码然后输入内容就可以发送到手机

但是这个工具有一个缺点就是没有 Windows 客户端,于是我就先做了一个轮子

通过抓包知道了浏览器是如何发送,然后创建了一个 nuget 库,只需要通过下面的使用方法就可以使用这个工具

创建一个空白项目,通过 Nuget 安装 lindexi.src.Qpush 注意项目需要使用 dotnet framework 4.5 以上和 dotnet core 2.1 以上

安装之后就可以通过下面代码从电脑输入内容

using lindexi.src;

            var qpush = new Qpush("lindexi", 221675.ToString());

            try
            {
                await qpush.PushMessageAsync("欢迎访问我博客 http://lindexi.gitee.io 里面有大量 UWP WPF 博客");
            }
            catch (HttpRequestException e)
            {
                // 请自己处理网络异常
            }

现在调用这个代码,尝试在前台放一个按钮,在按钮点击的时候调用上面代码

注意 请将上面的推名和推码修改为你自己的推名和推码

此时就可以看到手机收到信息

这个工具做起来难度很低,但是我做出了一个 dll 库,虽然这个库里面就只有一个类

于是根据这个库做出了一个 UWP 的应用,可以在应用商店搜 Qpush 下载,或者点击下载

如果想要看 UWP 的源代码,请到 github 如果发现代码有哪里不清真,欢迎联系

如果觉得直接引用这个库会输出一个 dll 希望放在自己的程序里面,不需要手动去复制下面的源代码,只需要修改 Nuget 包为 lindexi.src.Qpush.Source 就可以。

这里的 lindexi.src.Qpush.Source 是一个源代码包,使用 SourceYard 做的源代码,安装这个库和复制下面的源代码到自己的项目里面差不多。但是要安装 lindexi.src.Qpush.Source 需要使用 VS2017 新项目格式才可以

using System;
using System.Net.Http;
using System.Text;
using System.Threading.Tasks;

namespace lindexi.src
{
    /// <summary>
    /// QPush 快推 从电脑到手机最方便的文字推送工具
    /// </summary>
    public class Qpush
    {
        public Qpush(string name, string code)
        {
            if (name == null) throw new ArgumentNullException(nameof(name));
            if (code == null) throw new ArgumentNullException(nameof(code));

            if (string.IsNullOrEmpty(name))
            {
                throw new ArgumentNullException("name 不能为空");
            }

            if (string.IsNullOrEmpty(code))
            {
                throw new ArgumentNullException("code 不能为空");
            }

            Name = name;
            Code = code;
        }

        /// <summary>
        /// 推名
        /// </summary>
        public string Name { get; }

        /// <summary>
        /// 推码
        /// </summary>
        public string Code { get; }

        /// <summary>
        /// 推送信息
        /// </summary>
        public async Task<string> PushMessageAsync(string str)
        {
            const string url = "https://qpush.me/pusher/push_site/";

            var httpClient = new HttpClient();

            httpClient.DefaultRequestHeaders.UserAgent.ParseAdd(
                "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/71.0.3578.98 Safari/537.36");

            HttpContent content =
                new StringContent(
                    $"name={Uri.EscapeUriString(Name)}&code={Uri.EscapeUriString(Code)}&sig=&cache=false&msg%5Btext%5D={Uri.EscapeUriString(str)}",
                    Encoding.UTF8, "application/x-www-form-urlencoded");
            var code = await (await httpClient.PostAsync(url, content)).Content.ReadAsStringAsync();

            return code;
        }
    }
}

本文会经常更新,请阅读原文: https://lindexi.gitee.io/post/dotnet-%E4%BD%BF%E7%94%A8-Qpush-%E5%BF%AB%E9%80%9F%E4%BB%8E%E7%94%B5%E8%84%91%E5%88%B0%E6%89%8B%E6%9C%BA%E6%8E%A8%E9%80%81%E6%96%87%E5%AD%97.html ,以避免陈旧错误知识的误导,同时有更好的阅读体验。

本作品采用 知识共享署名-非商业性使用-相同方式共享 4.0 国际许可协议 进行许可。欢迎转载、使用、重新发布,但务必保留文章署名林德熙(包含链接: https://lindexi.gitee.io ),不得用于商业目的,基于本文修改后的作品务必以相同的许可发布。如有任何疑问,请 与我联系

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • C# 里面很少人知道但很好用的 Tuple 转换

    小伙伴们都知道有 Tuple 但是很少有小伙伴只有原来从一个类转换为一个 Tuple 的方式如此简洁,在 C# 最新版本里面提供了一组语法糖,可以便捷给任意的类...

    林德熙
  • Roslyn NameSyntax 的 ToString 和 ToFullString 的区别

    本文告诉大家经常使用的 NameSyntax 拿到值的 ToString 和 ToFullString 方法的区别

    林德熙
  • C# AddRange 添加位置

    有没人想知道, AddRange 添加位置 是哪? 是添加到数组的开始,还是数组的末尾?

    林德熙
  • C/C++创建多级目录

    C运行时库提供的创建目录的函数_mkdir(),在上级目录不存在时会创建失败。所以自己实现了一下创建多级目录,无论上级目录是否存在。

    charlee44
  • Spring解密 - 自定义标签与解析

    在 上一节 Spring解密 - 默认标签的解析 中,重点分析了 Spring 对 默认标签是如何解析的,那么本章继续讲解标签解析,着重讲述如何对 自定义标签进...

    battcn
  • [原创]Func〈T, TResult〉 泛型委托 以及演变历程(整理自MSDN)

    以下内容为菩提树下的杨过根据微软MSDN整理,转贴请注明出处 MSDN对于Func<T, TResult>)的官方解释: 封装一个具有一个参数并返回 ...

    菩提树下的杨过
  • Java工具类 通过ResultSet对象返回对应的实体List集合

    房上的猫
  • C# 获得设备usb信息

    本文告诉大家如何获得设备的usb来进行判断是否有哪些usb和找不到usb可能是什么。

    林德熙
  • 程序员进阶之算法练习(六)

    前言 这次只有四个题目,E题是个奇奇怪怪的数学题,就不去啃这个硬骨头了,我们来分析下A/B/C/D: A题是简单的找规律题; B题是博弈的入门题; C题是简单的...

    落影
  • 分享一种不太完美的接入网关设计

    ? 作者:朱江,腾讯工程师。 写在前面: ? 如上图所示,客户端通过HTTP+JSON协议请求ProxyServer,由其派发到后端不同服务的不同接口处理,从...

    腾讯大讲堂

扫码关注云+社区

领取腾讯云代金券