当前位置: 首页 > news >正文

Photino:通过.NET Core构建跨平台桌面应用程序,.net国产系统

一、Photino.NET简介:

最近发现了一个不错的框架 Photino.Net 一份代码运行,三个平台 windows max linux ,其中windows10,windows11,ubuntu 18.04,ubuntu 20.04 已测试均可以。mac 因为没有相关电脑没有测试。

github:https://github.com/tryphotino/photino.NET

二、示例代码

首先创建一个控制台程序:

添加如下代码:

using Photino.NET;
using System.Runtime.CompilerServices;
using System.Runtime.InteropServices;
using System.Text.Encodings.Web;
using System.Text.Json;
using System.Text.Unicode;namespace PhotinoNetDemo
{internal class Program{private static PhotinoWindow? _window;private static Timer? _timer;[STAThread]static void Main(string[] args){Console.WriteLine("Hello, World!");// 隐藏控制台窗口HideConsoleWindow();_window =new PhotinoWindow().RegisterWebMessageReceivedHandler(WebMessageHandler).SetIconFile("wwwroot/app.ico").Load("wwwroot/index.html");//.Load("wwwroot/menu.html");_timer = new Timer(UpdateMessage);_window.WaitForClose();  }private static void UpdateMessage(object? state){try{SendWebMessage("updateTime",$"{DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss")}");}catch (Exception e){Console.WriteLine(e);}}private static void WebMessageHandler(object? sender, string e){switch (e){case "start":_timer.Change(0, 1);break;default:break;}SendWebMessage("updateWebMessage",$"{DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss")}后台收到:{e}");}public static void SendWebMessage(string methodName, object message){// 创建 JsonSerializerOptions 实例var options = new JsonSerializerOptions{// 设置 Encoder 属性,允许所有Unicode范围,不进行转义Encoder = JavaScriptEncoder.Create(UnicodeRanges.All)};string str = $"{methodName},{System.Text.Json.JsonSerializer.Serialize(message, options)}";_window!.SendWebMessage(str);}[MyCustomAttribute(methodName:"addMessage")]public static void AddMessage() { }// 导入Windows API函数[DllImport("kernel32.dll")]static extern IntPtr GetConsoleWindow();[DllImport("user32.dll")]static extern bool ShowWindow(IntPtr hWnd, int nCmdShow);private const int SW_HIDE = 0;// 调用Windows API隐藏控制台窗口private static void HideConsoleWindow(){IntPtr consoleHandle = GetConsoleWindow();if (consoleHandle != IntPtr.Zero){ShowWindow(consoleHandle, SW_HIDE);}}}
}

添加文件wwwroot

创建index.html

<!DOCTYPE html><html lang="en" xmlns="http://www.w3.org/1999/xhtml">
<head><meta charset="utf-8" /><title></title>
</head>
<body><h1>当前时间:<span style="color:red;" id="currentTime"></span></h1><button onclick="start()">开始时间</button><button onclick="fun1()">发送到后台</button><button onclick="fun2()">跳转</button><div id="div1"></div>
</body>
<script type="text/javascript">function start() {window.external.sendMessage("start");}function fun1() {window.external.sendMessage("111");}function fun2() {window.location = "menu.html";}window.external.receiveMessage(message => { console.log(message);let methodName = message.split(',')[0];let params = message.split(',')[1];switch (methodName) {case "updateTime":debugger;document.getElementById("currentTime").innerHTML = params; break;case "updateWebMessage":document.getElementById("div1").innerHTML += message + "</br>";break;default: break;}});
</script>
</html>

发布测试,全量包x64

 

 三、跨平台测试

 全量包才60m ,太牛了。关键还跨平台。

 四、信创支持 国产系统

国产系统目前测试了麒麟V10 ,安装过程虽然麻烦点,但已经成功运行,图片如下:

 五、展望

 不错的技术,持续关注中。本篇文章也会陆续补充测试过程,过程中遇到的问题!!!

相关文章:

Photino:通过.NET Core构建跨平台桌面应用程序,.net国产系统

一、Photino.NET简介&#xff1a; 最近发现了一个不错的框架 Photino.Net 一份代码运行&#xff0c;三个平台 windows max linux &#xff0c;其中windows10,windows11,ubuntu 18.04,ubuntu 20.04 已测试均可以。mac 因为没有相关电脑没有测试。 github:https://github.com/t…...

个人全栈开发微信小程序上线了(记日记)

个人开发的全栈项目&#xff0c;《每日记鸭》微信小程序上线了&#xff01; 主要是技术栈&#xff1a;uniapp,koa2,mongodb,langchian&#xff1b; 感兴趣的小伙伴可以来捧捧场&#xff01;...

Linux移植IMX6ULL记录 一:编译源码并支持能顺利进入linux

目录 前言 一、不修改文件进行编译 二、修改设备树文件进行编译 前言 我用的开发板是100_ask_imx6ull_pro&#xff0c;其自带的linux内核版本linux-4.9.88&#xff0c;然后从linux官网下载过来的linux-4.9.88版本的arch/arm/configs/defconfig和dts设备树文件并没有对imx6ull…...

idea正则表达式-正则替换示例-2024.11笔记

注意idea中反向引用的格式是【$1】换行符是【\n】 需要在如下的代码中往接口的方法中添加一行注解&#xff0c;注解需要用到以后注解的中文备注 原文 Autowired private WomanService womanService; /** * 自定义分页 */ PostMapping("/page/{current}/{…...

Github 2024-11-20C开源项目日报 Top9

根据Github Trendings的统计,今日(2024-11-20统计)共有9个项目上榜。根据开发语言中项目的数量,汇总情况如下: 开发语言项目数量C项目9Assembly项目1raylib: 用于视频游戏编程的简单易用图形库 创建周期:3821 天开发语言:C协议类型:zlib LicenseStar数量:18556 个Fork数…...

安卓CameraX的使用

如果要在安卓应用中操作相机&#xff0c;有三个库可以选&#xff1a; Camera&#xff08;已废弃&#xff09;&#xff1a;Camera是安卓最早的包&#xff0c;目前已废弃&#xff0c;在Android 5.0&#xff08;API 级别 21&#xff09;的设备上操作相机可以选择该包&#xff0c;…...

unity3d——基础篇小项目(开始界面)

示例代码&#xff1a; using System.Collections; using System.Collections.Generic; using UnityEngine;public class BeginPanel : BasePanel<BeginPanel> {public UIButton btnBegin;public UIButton btnRank;public UIButton btnSetting;public UIButton btnQuit; …...

【YOLOv8】安卓端部署-1-项目介绍

【YOLOv8】安卓端部署-1-项目介绍 1 什么是YOLOv81.1 YOLOv8 的主要特性1.2 YOLOv8分割模型1.2.1 YOLACT实例分割算法之计算掩码1.2.1.1 YOLACT 的掩码原型与最终的掩码的关系1.2.1.2 插值时的目标检测中提取的物体特征1.2.1.3 coefficients&#xff08;系数&#xff09;作用1.…...

安卓手机root+magisk安装证书+抓取https请求

先讲一下有这篇文章的背景吧&#xff0c;在使用安卓手机fiddler抓包时&#xff0c;即使信任了证书&#xff0c;并且手机也安装了证书&#xff0c;但是还是无法捕获https请求的问题&#xff0c;最开始不知道原因&#xff0c;后来慢慢了解到现在有的app为了防止抓包&#xff0c;把…...

11.20 深度学习-pytorch包和属性的基础语法

import torch import numpy as np def sci_close(): # 关闭pytorch 数据打印出来时科学计数法 torch.set_printoptions(sci_modeFalse) pass return 0 def create_tensor(): # 创建张量 t1torch.tensor(5) # 一阶张量 阶数看你传入的矩阵是多少阶的 这个是标量 不是一阶 一阶…...

SpringMVC域对象共享数据

目录 一.向 request 域对象共享数据 1.1使用ServletAPI向request域对象共享数据 1.2使用ModelAndView向request域对象共享数据 1.3使用Model向request域对象共享数据 1.4使用map向request域对象共享数据 1.5使用ModelMap向request域对象共享数据 二.Model、ModelMap、Ma…...

每日论文23-24ESSERC 6.4-16.1Ghz混合并联-串联谐振器

《A 6.4-to-16.1GHz Hybrid Parallel-Series Resonator Mode-Switching Oscillator with 206.6dBc/Hz FoMT at 1MHz Offset in 40nm CMOS》 24ESSERC 首先这篇文章有个地方我其实没太明白&#xff0c;它在title和行文的时候都写的是“ hybrid parallel-series resonator mode-…...

【软考】系统架构设计师-信息安全技术基础

信息安全核心知识点 信息安全5要素&#xff1a;机密性、完整性、可用性、可控性、审查性 信息安全范围&#xff1a;设备安全、数据安全、内容安全、行为安全 网络安全 网络安全的隐患体现在&#xff1a;物理安全性、软件安全漏洞、不兼容使用安全漏洞、选择合适的安全哲理 …...

kali搭建pikachu靶场

前言&#xff1a; 总所周知搭个网站需要有apachemysqlphp&#xff0c;Apache是一个开源的Web服务器软件&#xff0c; MySQL是一种关系型数据库管理系统&#xff08;数据库&#xff09;&#xff0c;PHP是一种在服务器上执行的脚本语言 文章内容来自&#xff1a;【黑帽编程与攻…...

注解用于从 HTTP 请求中提取数据

在 Spring 框架中&#xff0c;PathVariable、RequestParam 和 RequestBody 等注解用于从 HTTP 请求中提取数据。具体来说&#xff1a; PathVariable&#xff1a;用于从 URL 路径中提取变量值。例如&#xff0c;在路径 /users/{id} 中&#xff0c;{id} 是一个路径变量。Request…...

(Linux)搭建静态网站——基于http/https协议的静态网站

简单了解nginx配置文件 1.下载并开启nginx服务 下载 [rootlocalhost ~]# dnf install nginx -y开启 [rootlocalhost ~]# systemctl restart nginx 1.(1)搭建静态网站——基于http协议的静态网站 实验1&#xff1a;搭建一个web服务器&#xff0c;访问该服务器时显示“hello w…...

【机器学习chp3】判别式分类器:线性判别函数、线性分类器、广义线性分类器、分段线性分类器

前言&#xff1a; 本文遗留问题&#xff1a;&#xff08;1&#xff09;对最小平方误差分类器的理解不清晰.&#xff08;2&#xff09;分段线性判别函数的局部训练法理解不清晰。 推荐文章1&#xff0c;其中有关于感知机的分析 【王木头从感知机到神经网络】-CSDN博客 推荐文…...

【学习】【HTML】HTML、XML、XHTML

HTML 什么是 HTML&#xff1f; HTML (HyperText Markup Language) 是一种用于创建和展示网页的标准标记语言。它由一系列的元素组成&#xff0c;这些元素通过标签的形式来告诉浏览器如何显示内容。 HTML 的基本结构是什么&#xff1f; <!DOCTYPE html> <html> …...

ARM中ZI-data段和RW-data段

ARM中ZI-data段和RW-data段 1、只定义全局变量&#xff0c;不使用&#xff0c;不占用内存空间2、 定义并初始化全局变量为0 占用ZI-Data区域3、定义并初始化全局变量非0 占用RW-Data区域4、增加的是一个int8的数据为什么&#xff0c;size增加不是15、定义的全局变量为0&#xf…...

关联度分析、灰色预测GM(1,1)、GM(1,1)残差模型——基于Python实现

关联度分析 import numpy as np import pandas as pd #关联度分析 #参考序列 Y_0[170,174,197,216.4,235.8] #被比较序列 Y_1[195.4,189.9,187.2,205,222.7] Y_2[308,310,295,346,367]#初始化序列 X_0np.array(Y_0)/Y_0[0] X_1np.array(Y_1)/Y_1[0] X_2np.array(Y_2)/Y_2[0]#计…...

Neoscroll.nvim与Telescope集成:实现搜索结果的流畅滚动

Neoscroll.nvim与Telescope集成&#xff1a;实现搜索结果的流畅滚动 【免费下载链接】neoscroll.nvim Smooth scrolling neovim plugin written in lua 项目地址: https://gitcode.com/gh_mirrors/ne/neoscroll.nvim Neoscroll.nvim是一款用Lua编写的Neovim平滑滚动插件…...

face-recognition.js 模型训练与保存:构建可复用的人脸识别系统

face-recognition.js 模型训练与保存&#xff1a;构建可复用的人脸识别系统 【免费下载链接】face-recognition.js Simple Node.js package for robust face detection and face recognition. JavaScript and TypeScript API. 项目地址: https://gitcode.com/gh_mirrors/fa/f…...

基于Vue 3与JSON数据构建MBTI运势生成器:前端实战开发指南

1. 项目概述&#xff1a;当MBTI遇上运势&#xff0c;一个技术驱动的趣味应用最近在GitHub上看到一个挺有意思的项目&#xff0c;叫“mbti-fortune”&#xff0c;作者是leilei926524-tech。光看名字&#xff0c;你可能会觉得这又是一个简单的星座运势或者性格测试的变种。但作为…...

离线式SMPS输入整流器设计与优化指南

1. 离线式SMPS输入整流器设计基础开关电源(SMPS)的输入整流环节如同电力系统的"第一道闸门"&#xff0c;其设计质量直接影响后续DC-DC转换环节的稳定性。在离线式设计中&#xff0c;整流器需要将85-265VAC的宽范围交流输入转换为高压直流&#xff0c;这个看似简单的过…...

Java数据结构6(队列和二叉树初步)

目录1&#xff0c;队列的性质2&#xff0c;循环队列3&#xff0c;队列链式存储4&#xff0c;树的性质5&#xff0c;二叉树的遍历6&#xff0c;代码实现一&#xff0c;队列的性质同样是线性表&#xff0c;队列有线性表的相关操作&#xff0c;不过不同的是队列的性质为先进先出&a…...

上午题_结构化开发

耦合基础知识...

GPU并行计算:SIMT架构与性能优化实践

1. SIMT架构的本质与硬件挑战 在GPU计算领域&#xff0c;单指令多线程&#xff08;SIMT&#xff09;执行模型是实现大规模并行的核心机制。与传统的SIMD&#xff08;单指令多数据&#xff09;不同&#xff0c;SIMT允许同一warp&#xff08;通常包含32个线程&#xff09;中的每个…...

手把手教你搞定产品EMC静电放电测试:从PCB布局到TVS选型的完整避坑指南

手把手教你搞定产品EMC静电放电测试&#xff1a;从PCB布局到TVS选型的完整避坑指南 静电放电&#xff08;ESD&#xff09;是电子设备最常见的电磁兼容问题之一。去年某智能家居厂商因ESD测试失败导致产品召回&#xff0c;直接损失超过2000万。这并非孤例——行业数据显示&…...

Go语言网络监控利器wiremonitor:轻量级命令行抓包与流量分析实战

1. 项目概述&#xff1a;一个网络流量监控的瑞士军刀如果你和我一样&#xff0c;经常需要和网络协议、数据包打交道&#xff0c;无论是排查一个诡异的API超时&#xff0c;还是想搞清楚某个应用到底在后台和哪些服务器“窃窃私语”&#xff0c;你肯定知道抓包工具的重要性。Wire…...

[hadoop] 初识Spark

初识Spark采用的方法是&#xff1a;由新手不断地追问老手问题&#xff0c;老手给出一定的回答。 在这个过程中&#xff0c;新手会慢慢理解Spark 参考资料&#xff1a; 《Hadoop 3.x大数据开发实战》 文章目录参考资料&#xff1a;11.11.2233.14555.166.16.21 Spark集群的启动…...