公用的cefsharp窗口
书接上回,.net实现一个nw,一个字,简单。
结构,无废话,上图。

要说这部分上回展示过的,大致结构如此,其实要说清楚结构,还是得从工作流程开始说起
流程
1.通过桌面的快捷方式启动WebOnDesk, 携带参数,目标客户文件夹的名字,这个文件夹因为是在本机xampp服务器上,所以也可以拼接出类似localhost/xxx的形式,用作界面
2.启动搜索参数指向的文件目录
1)xxxx.dll,与文件名同名的客户端逻辑dll,动态挂载,所有的业务逻辑,后端支持都可以由它来完成,nw里的package.json完成的那点事,都是分分钟完成的。强大的一批,因为他的扩展是无穷的。当然也可以没有这个dll,因为js本身也可以写很多逻辑在里面。所以,这个很重要的东西,也是可选的,因为,可能不操作本地,直接操作网络上的东西。
2)图标,这都是小菜一碟,顺手的事儿。
3.cefsharp加载拼接好的localhost/xxx或者dll内部指向的其他外网网页(不过,这就相当于浏览器了,无趣)。
4.鬼哟,完事儿了,想干啥干啥吧。
短小精炼,无废话,连错误处理都可以省略
稍微展示一下代码,别学我,我这随便写写的。
主窗口代码
Imports CefSharp
Imports CefSharp.WinForms Public Class Form1 Public WorkPath As IO.DirectoryInfo
Private WithEvents Cef As ChromiumWebBrowser
Private WithEvents Methods As CustomerMethods.Class1 Public Const WM_DRAWCLIPBOARD = &H308 Private Declare Sub SwitchToThisWindow Lib "User32.dll" Alias "SwitchToThisWindow" (ByVal hWnd As Integer, ByVal bRestore As Integer) Private Sub Form1_FormClosing(sender As Object, e As FormClosingEventArgs) Handles Me.FormClosing
Try
Methods.ending()
Catch ex As Exception End Try
End Sub Private Sub Form1_Load(sender As Object, e As EventArgs) Handles MyBase.Load
'启动参数分析
WorkPath = New IO.DirectoryInfo(Microsoft.VisualBasic.Command)
If WorkPath.Exists = False Then
MsgBox("启动目录不存在,请检查快捷方式参数")
Close()
End If '加载用户方法Dll
Dim fi As New IO.FileInfo(WorkPath.FullName + "\" + WorkPath.Name + ".dll")
If fi.Exists Then
Try
Dim asm As System.Reflection.Assembly = System.Reflection.Assembly.LoadFile(WorkPath.FullName + "\" + WorkPath.Name + ".dll")
Dim classtemp As Type = asm.GetType(WorkPath.Name + ".Class1")
Methods = asm.CreateInstance(classtemp.FullName)
Methods.MainForm = Me
Catch ex As Exception
MsgBox("加载用户Dll错误")
End Try
Else
Methods = New DefMethod
End If '创建桌面快捷方式
CreateLnk(WorkPath) '图标设置
Try
Me.Icon = New Icon(WorkPath.FullName + "\favicon.ico")
Catch ex As Exception
End Try '标题
Me.Text = WorkPath.Name '启动引导前项
Try
Methods.init()
Catch ex As Exception
MsgBox("Method 初始化错误:" + ex.Message)
End Try
'启动
If Methods.StartPath.Length = Then
Methods.StartPath = "localhost/" + WorkPath.Name
End If CefSharp.Cef.Initialize(New CefSharp.CefSettings)
CefSharp.CefSharpSettings.LegacyJavascriptBindingEnabled = True Cef = New ChromiumWebBrowser(Methods.StartPath) '注册js对象
Try
Dim sett As New BrowserSettings
sett.WebSecurity = CefState.Disabled
Cef.BrowserSettings = sett
Cef.RegisterAsyncJsObject("wnd", Methods)
Catch ex As Exception
MsgBox(ex.Message)
End Try Controls.Add(Cef)
Cef.Dock = DockStyle.Fill
End Sub Public Sub CreateLnk(path As IO.DirectoryInfo) Dim wsh As Object = CreateObject("WScript.Shell") Dim Lnk As Object = wsh.CreateShortcut("C:\Users\Administrator\Desktop\" & path.Name & ".lnk")
With Lnk
.arguments = path.FullName
.iconlocation = path.FullName + "\favicon.ico"
.targetpath = Application.StartupPath + "\WebOnDisk.exe "
.workingdirectory = Application.StartupPath
.save()
End With End Sub Private Sub Methods_CallJsEvent(methodname As String, args() As String) Handles Methods.CallJsEvent
Try
Cef.EvaluateScriptAsync(methodname, args) Catch ex As Exception
MsgBox(ex.Message)
End Try
End Sub Private Sub Methods_LoadEvent(url As String) Handles Methods.LoadEvent
Cef.Load(url)
End Sub Private Sub Methods_SetDevToolsEvent(isShow As Boolean) Handles Methods.SetDevToolsEvent
If isShow Then
Cef.ShowDevTools()
Else
Cef.CloseDevTools()
End If
End Sub Private Sub Cef_FrameLoadEnd(sender As Object, e As FrameLoadEndEventArgs) Handles Cef.FrameLoadEnd
'Cef.ShowDevTools()
End Sub Private Sub Methods_SingleInstanceCheck() Handles Methods.SingleInstanceCheck
'单进程检测
If Methods.IsSingleInstance Then
Dim ps() As Process = Process.GetProcessesByName(Me.ProductName)
For Each p As Process In ps
If p.MainWindowTitle = WorkPath.Name Then SwitchToThisWindow(p.MainWindowHandle, )
Process.GetCurrentProcess.Kill()
Close()
End If
Next
End If
End Sub
End Class
如果不提供dll,给一个默认的类
Public Class DefMethod
Inherits CustomerMethods.Class1 Public Overrides Sub ending() End Sub Public Overrides Sub init() End Sub
End Class
如果要写dll,继承一下这个
Imports System.Web.Script.Serialization
Imports System.Windows.Forms Public MustInherit Class Class1
Public StartPath As String = ""
Public MainForm As System.Windows.Forms.Form
Public mIsSingleInstance As Boolean = False
Public Event SingleInstanceCheck()
Public Property IsSingleInstance
Get
Return mIsSingleInstance
End Get
Set(value)
mIsSingleInstance = value
RaiseEvent SingleInstanceCheck()
End Set
End Property Public MustOverride Sub init()
Public MustOverride Sub ending() Public Event CallJsEvent(methodname As String, args() As String)
Public Sub calljs(methodname As String, ParamArray args() As String) RaiseEvent CallJsEvent(methodname, args)
End Sub Public Event SetDevToolsEvent(isShow As Boolean) Public Sub showDevTools()
RaiseEvent SetDevToolsEvent(True)
End Sub Public Sub closeDevTools()
RaiseEvent SetDevToolsEvent(False)
End Sub Public Event LoadEvent(url As String)
Public Sub load(url As String)
RaiseEvent LoadEvent(url)
End Sub Public Sub SetWindowBounds(bound As Drawing.Rectangle)
MainForm.Bounds = bound
End Sub
End Class
html和vue那边的目录结构

大概就这样吧,大体上一个简单的nw就搞出来了,只能说简陋
下回说说vue那点儿事儿吧。
公用的cefsharp窗口的更多相关文章
- 【CefSharp】 禁用右键菜单 与 控制弹出窗口的方式(限版本39.0.0.1)
这周没什么时间,一开始就在忙一些CefSharp的事情,Win10的研究就放了下来,CefSharp的资料挺少的,但好在是开源的,可以我们便宜的折腾.因为两个的内容都不多,我就合成一篇文章啦. 这还里 ...
- CefSharp.v49.0.1浏览器控件完全WPF版,实现禁止弹出新窗口,在同一窗口打开链接,并且支持带type="POST" target="_blank"的链接
需求场景:在查询页面,填写查询条件,查询条件包括上传的图片,根据图片的特征查询,这就需要在提交的时候,使用POST提交,因为GET提交无法提交图片数据,提交查询条件之后,在新的窗口展示查询结果.(当然 ...
- CefSharp 在同一窗口打开链接的方法
摘要 在winform中使用cefsharp的时候,我们在浏览网页的时候,想在同一个窗口打开链接,而不是创建新的窗口.可以通过下面的方法实现. 解决方案 CefSharp 中控制弹窗的接口是 ILif ...
- CefSharp禁止弹出新窗体,在同一窗口打开链接,或者在新Tab页打开链接,并且支持带type="POST" target="_blank"的链接
说明:在同一窗口打开链接,只要稍加改造就可以实现,这里实现的是在新Tab页打开链接,并且支持带type="POST" target="_blank"的链接 gi ...
- CefSharp禁止弹出新窗体,在同一窗口打开链接,并且支持带type="POST" target="_blank"的链接
1.实现ILifeSpanHandler接口,代码如下: using CefSharp; using CefSharp.WinForms; using System; using System.Col ...
- CefSharp 初用遇到的一些问题及解决方法
之前用WebBrowser,打开网页很卡,但因为并是太要求速度和体验,所以可以显示html就可以了.但是,现在要求显示速度,最主要问题是WebBrowser控件的UserAgent,其实并不完全是IE ...
- CefSharp .net
构建基于Chromium的应用程序 chromium是google chrome浏览器所采用的内核,最开始由苹果的webkit发展而出,由于webkit在发展上存在分歧,而google希望在开发上有更 ...
- 认识ATL窗口
这是一个相当于“Hello world!”的任务,作为认识ATL,考查了其运作流程与机制. 环境:VS2008 创建:新建-项目-Win32项目-添加公用头文件用于(选择ATL). PS:注意新建项目 ...
- (03)odoo模型/记录集/公用操作
-----------------更新时间11:17 2016-09-18 星期日11:00 2016-03-13 星期日09:10 2016-03-03 星期四11:46 2016-02-25 星期 ...
随机推荐
- react-webpack-express
这是一个整合react express 实现前后台交互,并且采用webpack进行打包和解析文件.其实react官方有一个脚手架create react app,也可以看那个,但是这个脚手架webpa ...
- [EffectiveC++]item40:明智而审慎地使用多重继承
- 微信小程序国际化
微信小程序国际化 现状 小程序国际化官方没有支持,也没有现成的插件. 网上有人做了国际化的尝试.但是只能替换静态文本,就是简单的键值匹配. vue-i18n 由于是基于html 和 vue, 不同于w ...
- python入门16 递归函数 高阶函数
递归函数:函数内部调用自身.(要注意跳出条件,否则会死循环) 高阶函数:函数的参数包含函数 递归函数 #coding:utf-8 #/usr/bin/python """ ...
- 笔记本win8系统共享wifi上网方法
华硕笔记本电脑,安装了win8系统,使用wifi上网,由于连接无线路由的机器太多,超过路由连接数上限,因此转为使用笔记本共享wifi方式给手机上网. 最终上网方式为: 笔记本网卡接入无线路由器上网,笔 ...
- 【[COCI2011-2012#5] POPLOCAVANJE】
据说这道题卡空间? 不存在的,拿\(AC\)自动机去存\(5000\times5000\)的串肯定是要M的 我们可以考虑对长度为\(n\)的串建一个\(SAM\),这样空间就只需要两倍的\(3e5\) ...
- cf 786 B 线段树优化建图
cf 786 B 链接 CF 思路 n个点,3种建边方式,规模\(O(n^2)\) 线段树优化建图 注意 读入的数据好坑啊,说好的v,u变成了u,v. 两棵树,一棵出,一棵入.线段树的作用只不过是按照 ...
- 【洛谷P4568】[JLOI2011]飞行路线
飞行路线 题目链接 今天上午模拟考试考了原题,然而数组开小了,爆了4个点. 据王♂强dalao说这是一道分层图SPFA的裸题 dis[i][j]表示到点i用k个医疗包的最小消耗,dis[u][j]+e ...
- Android学习笔记_57_ExpandableListView控件应用
1.布局文件: <?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:andr ...
- 19.springboot邮件服务服务器部署访问不到邮箱服务器解决方案
1.前言 在Springboot项目的生产环境中,win系统环境下,邮箱服务是可以正常使用的. 当项目部署到阿里云服务器上之后,因为服务器端口采用安全组的方式,25端口访问不到. 在网上查找了一部分资 ...