日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > C# >内容正文

C#

Java web项目中使用C#配合开发,实现双屏显示功能

發布時間:2023/12/16 C# 25 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Java web项目中使用C#配合开发,实现双屏显示功能 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

一、前言

最近系統開發中,新增了一個需求,要求客戶登記以后,需要有一個對外的屏幕顯示客戶登記信息,方便客戶確認個人信息及相關信息是否有誤。在了解相關需求以后,我打算使用C#來配合實現雙屏顯示功能。作為一名java程序員,在使用C#開發過程中,感覺也挺有意思的,特此,簡單記錄一下實現思路。

二、代碼實現

java服務端

  • 創建一個spring boot項目,項目結構如下:
  • 導入maven依賴:
  • <dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-web</artifactId></dependency><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-test</artifactId><scope>test</scope></dependency>
  • 編寫application.yml配置文件:
  • server:port: 8080servlet:context-path: /dsserver
  • 編寫index.html頁面:
  • <!DOCTYPE html> <html lang="en"> <head><meta charset="UTF-8"><title>主頁</title> </head> <body> <div><button onclick="openDSForm()">打開雙屏顯示</button><br/><input id="content" type="text"/><button onclick="sendMessage()">發送消息</button> </div> </body> <script>var spWebsocket;function initSpWebsocket() {if ('WebSocket' in window) {spWebsocket = (spWebsocket && spWebsocket.readyState == spWebsocket.OPEN) ? spWebsocket : new WebSocket("ws://127.0.0.1:59999");// 連接發生錯誤的回調方法spWebsocket.onerror = function (err) {console.log(err);};// 連接成功建立的回調方法spWebsocket.onopen = function () {console.log("spWebsocket打開關閉!");};// 接收到消息的回調方法spWebsocket.onmessage = function (event) {console.log(event.data);}// 連接關閉的回調方法spWebsocket.onclose = function () {console.log("spWebsocket連接關閉!");}} else {alert("當前瀏覽器不支持websocket!");}}function openDSForm() {if(!(spWebsocket && spWebsocket.readyState == spWebsocket.OPEN)) {initSpWebsocket();}else {spWebsocket.send("openDS");}}function sendMessage() {if(!(spWebsocket && spWebsocket.readyState == spWebsocket.OPEN)) {initSpWebsocket();}else {var input = document.getElementById("content");var functionName = "acceptMessage"; // 需要調用雙屏顯示頁面的js中的方法名稱spWebsocket.send(functionName + "^" + input.value);}} </script> </html>
  • 編寫用于雙屏顯示的頁面doubleScreenShow.html:
  • <!DOCTYPE html> <html lang="en"> <head><meta charset="UTF-8"><title>雙屏顯示</title> </head> <body><div><h1 style="color: red">雙屏顯示內容:<label id="content" ></label></h1></div> </body><script>function acceptMessage(msg) {var input = document.getElementById("content");input.innerText = msg;}</script> </html>

    開發中,我為了方便,并沒有完全使用C#的窗口控件來做雙屏顯示客戶端,而是只使用了C#窗口控件嵌套瀏覽器頁面的做法,畢竟我對C#了解程度有限,開發時間也不充裕。

  • 編寫TestController,用于轉發雙屏顯示頁面:
  • @Controller public class TestController {@GetMapping("/dsShow")public String dsShow() {return "doubleScreenShow.html";} }

    以上,整個就是服務端的代碼,只是用于演示,整個代碼結構還是很簡單的。

    C#雙屏代碼

  • 創建一個C#的winform窗口程序:

  • 管理需要依賴的程序包:
    • Fleck:創建websocket服務器需要的引用依賴:
    • CefSharp:winform窗口瀏覽器插件內核默認是IE,使用CefSharp相關引用,可以使用谷歌內核的瀏覽器控件:
  • 主窗口代碼:
  • using CefSharp.WinForms; using System.Windows.Forms;namespace doublescreen_client {public partial class Form1 : Form{private ChromiumWebBrowser chrome = null;public Form1(string url){InitializeComponent();// 初始化一個瀏覽器if (url != null && !"".Equals(url)){chrome = new ChromiumWebBrowser(url){Dock = DockStyle.Fill};this.Controls.Add(chrome);}this.Text = "雙屏顯示客戶端";this.ShowInTaskbar = false;// 不在工具欄顯示圖片this.Hide(); // 隱藏窗口}private delegate void DeletegateShowDSForm();// 顯示窗口public void DoShow(){if (this.InvokeRequired){DeletegateShowDSForm dsf = new DeletegateShowDSForm(ShowDSFrom);Invoke(dsf);}else{ShowDSFrom();}}public void ShowDSFrom(){this.TopMost = true;// 窗口置頂this.ShowInTaskbar = true;this.WindowState = FormWindowState.Maximized;this.Visible = true;this.Activate();this.Show();}public ChromiumWebBrowser GetBrowser(){return this.chrome;}} }
  • Program.cs中的執行邏輯代碼:
  • using CefSharp.WinForms; using Fleck; using System; using System.Diagnostics; using System.Drawing; using System.Windows.Forms;namespace doublescreen_client {static class Program{/// <summary>/// 應用程序的主入口點。/// </summary>[STAThread]static void Main(){Application.EnableVisualStyles();Application.SetCompatibleTextRenderingDefault(false);bool openFlag = CheckSoftWareOpenMore("doublescreen-client"); // 判斷當前軟件是否已經打開了if (openFlag) // 如果已經打開了{DialogResult result = MessageBox.Show("你已經打開一個照相軟件,請勿重復打開!", "提示:", MessageBoxButtons.OK, MessageBoxIcon.Warning);if (result == DialogResult.OK){System.Environment.Exit(0);}}string serverUrl = "http://localhost:8080/dsserver/dsShow";Form1 form = new Form1(serverUrl);ChromiumWebBrowser chrome = form.GetBrowser();// 創建一個websocket服務器,進行兩個屏幕的通信WebSocketServer server = new WebSocketServer("ws://127.0.0.1:59999" );//出錯后進行重啟server.RestartAfterListenError = true;server.Start(socket =>{socket.OnOpen = () =>{};socket.OnClose = () =>{};socket.OnMessage = message =>{if (message == "ping..."){return;}string[] myParams = message.Split('^'); //獲取參數值if ("openDS".Equals(myParams[0])){if (!form.Visible || FormWindowState.Minimized.Equals(form.WindowState)){form.DoShow();}return;}if (form.Visible){string JSFunction = myParams[0] + "('" + myParams[1] + "')"; //拼接js方法chrome.GetBrowser().MainFrame.EvaluateScriptAsync(JSFunction); // 調用網頁中的js方法}};});Screen[] sc = Screen.AllScreens; // 獲取所有屏幕int showOnMonitor = 1; // 默認在附屏幕上顯示if (sc.Length == 1){showOnMonitor = 0; // 如果只有一個屏幕就在主屏幕顯示}form.StartPosition = FormStartPosition.Manual; // 設置手動指定窗口位置form.Location = new Point(sc[showOnMonitor].Bounds.Left, sc[showOnMonitor].Bounds.Top); // 將窗口設置到另一個屏幕上form.WindowState = FormWindowState.Minimized; // 默認開始最小化窗口Application.Run(form);}// 判斷程序是否已經打開static bool CheckSoftWareOpenMore(string softwareName){Process[] processes = Process.GetProcessesByName(softwareName);if (processes.Length > 1){return true;}else{return false;}}} }

    三、測試

  • 啟動服務端,訪問:http://localhost:8080/dsserver/index.html:

  • 由于使用了CefSharp,需要配置visual studio 的debug方式,配置管理器,選擇運行平臺:

  • 啟動C#雙屏顯示軟件,由于最開始隱藏了窗口,所以沒有彈窗,可以通過以下標志判斷是否運行:

  • 點擊網頁的【打開雙屏顯示】按鈕:

    由于websocket連接需要時間,可能需要多點擊兩次,然后,就可以發現在另外一個屏幕上打開了一個窗口了:

  • 在主屏幕的瀏覽器上發生消息,進行測試:

    雙屏頁面:

    可以看到雙屏顯示的頁面成功顯示消息了。

  • 四、最后:

    這只是提供了一種實現雙屏顯示的思路,java部分的代碼很簡單,由于我對C#也不是很了解,代碼風格應該也不好,大家只做參考,具體實現我就不做過多闡述,免得誤人子弟,大家有興趣看看注釋。

    實際業務肯定比這個復雜,原理大概就是這樣,可以通過這個實現原理,把對人員的增刪改查,和一些綁定信息的修改都實時的在對外的屏幕上向用戶顯示。

    總結

    以上是生活随笔為你收集整理的Java web项目中使用C#配合开发,实现双屏显示功能的全部內容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。