411 lines
17 KiB
C#
411 lines
17 KiB
C#
using MiniBlinkPinvoke;
|
||
using System;
|
||
using System.Collections.Generic;
|
||
using System.ComponentModel;
|
||
using System.Data;
|
||
using System.Drawing;
|
||
using System.IO;
|
||
using System.Runtime.InteropServices;
|
||
using System.Text;
|
||
using System.Threading;
|
||
using System.Windows.Forms;
|
||
using Lskj.Control.Model;
|
||
using Lskj.Model;
|
||
using Lskj.Business.Impl;
|
||
using Lskj.Util;
|
||
using System.Web;
|
||
using Lskj.Business;
|
||
using Lskj.Control;
|
||
using Lskj.Web.Core.Util;
|
||
using System.Collections;
|
||
using System.Linq;
|
||
|
||
namespace Lskj.MiniBlink
|
||
{
|
||
public partial class FormMain : Form
|
||
{
|
||
public DynamicPubNewBrowerModel PubBrowerModel;
|
||
BlinkBrowser blinkBrowser1 = null;
|
||
static BlinkBrowser mb = null;
|
||
public string url = string.Empty;
|
||
/// <summary>
|
||
/// 下载验证
|
||
/// </summary>
|
||
public bool IsDownVerify = false;
|
||
|
||
public FormMain()
|
||
{
|
||
InitializeComponent();
|
||
}
|
||
|
||
//System.Windows.Forms.Timer queryTimer = new System.Windows.Forms.Timer();
|
||
private IntPtr taskPtr;
|
||
XL.DownTaskInfo taskInfo = new XL.DownTaskInfo();
|
||
[JSFunctin]
|
||
public void Console_WriteLine(string msg)
|
||
{
|
||
MessageBox.Show("Console_WriteLine :" + msg);
|
||
}
|
||
|
||
|
||
/// <summary>
|
||
/// 浏览器初始化
|
||
/// </summary>
|
||
/// <param name="sender"></param>
|
||
/// <param name="e"></param>
|
||
private void Form1_Load(object sender, EventArgs e)
|
||
{
|
||
WaitForm.ShowForm();
|
||
try
|
||
{
|
||
if (PubBrowerModel.isCalSize)
|
||
{
|
||
this.Height = Convert.ToInt32(Lskj.Main.Model.Manager.frmHeight * PubBrowerModel.PerHeight);
|
||
this.Width = Convert.ToInt32(Screen.PrimaryScreen.WorkingArea.Width * PubBrowerModel.PerWidth);
|
||
this.Location = new Point((Screen.PrimaryScreen.WorkingArea.Width - this.Width) / 2,
|
||
(Lskj.Main.Model.Manager.frmHeight - this.Height) / 2);
|
||
|
||
}
|
||
this.PubBrowerModel.Privilege = PubBrowerModel.ModuleId > 0 ? BaseImpl.GetUserPurviewsByMenuId(PubBrowerModel.ModuleId + "") + "" : BaseImpl.GetUserPurviewsByMenuCode(PubBrowerModel.ModuleCode) + "";
|
||
string urlEnd = string.IsNullOrEmpty(PubBrowerModel.UrlParame) ? ReplaceHelper.ReplaceUserInfo(PubBrowerModel.ModuleCode) : PubBrowerModel.UrlParame.StartsWith("http") ? ReplaceHelper.ReplaceUserInfo(PubBrowerModel.UrlParame) : HttpUtility.UrlEncode(PubBrowerModel.UrlParame);
|
||
url = PubBrowerModel.BetweenDLLCoid != null && PubBrowerModel.BetweenDLLCoid.StartsWith("http") ? PubBrowerModel.BetweenDLLCoid + urlEnd : urlEnd.StartsWith("http") ? PubBrowerModel.BetweenDLLCoid + urlEnd : SystemInfo.Instance.OAUrl + PubBrowerModel.BetweenDLLCoid + urlEnd;
|
||
bool downLoadFlag = this.PubBrowerModel.downLoadFlag == 1;
|
||
int RightKeyFlag = this.PubBrowerModel.RightKeyFlag;
|
||
if (downLoadFlag)
|
||
{
|
||
this.Close();
|
||
url = url.Replace("%2f", "/");
|
||
WebBrowser browserNew = new WebBrowser();//点击下载的页面
|
||
browserNew.Navigate(url);
|
||
}
|
||
else
|
||
{
|
||
this.Opacity = 100D;
|
||
blinkBrowser1 = new BlinkBrowser();
|
||
blinkBrowser1.GlobalObjectJs = this;
|
||
mb = blinkBrowser1;
|
||
blinkBrowser1.Dock = DockStyle.Fill;
|
||
Neghte(url);
|
||
this.Controls.Add(blinkBrowser1);
|
||
}
|
||
}
|
||
catch (Exception ex)
|
||
{
|
||
LogHelper.Instance.WriteError(ex, "浏览器dll");
|
||
//MessageUtil.Show(ex.Message + "\r\n" + ex.StackTrace);
|
||
string Message = ErrorMessage.PromptErrorMessage(ex);
|
||
MessageUtil.Show(Message, ex.Message);
|
||
}
|
||
finally
|
||
{
|
||
Lskj.Control.Model.AutoSizeChange.ControllInitializeSize(this);
|
||
}
|
||
WaitForm.HideForm();
|
||
|
||
}
|
||
public void Neghte(string url)
|
||
{
|
||
//BlinkBrowserPInvoke.wkeSetHandle(blinkBrowser1.handle, this.Handle);
|
||
//BlinkBrowserPInvoke.wkeSetHandleOffset(blinkBrowser1.handle, blinkBrowser1.Location.X-2,0);
|
||
blinkBrowser1.OnUrlChange2Call += BlinkBrowser1_OnUrlChange2Call;
|
||
blinkBrowser1.OnTitleChangeCall += BlinkBrowser1_OnTitleChangeCall;
|
||
blinkBrowser1.DocumentReadyCallback += BlinkBrowser1_DocumentReadyCallback;
|
||
blinkBrowser1.OnDownloadFile += BlinkBrowser1_OnDownloadFile;
|
||
|
||
this.url = url;
|
||
|
||
blinkBrowser1.Url = ToEnUrl(url);
|
||
// blinkBrowser1.Focus();
|
||
|
||
}
|
||
public static string ToEnUrl(string url)
|
||
{
|
||
string[] urlParams = url.Split('?');
|
||
string enKey = "encrypt", enVal = "";
|
||
bool hasEn = false;
|
||
if (urlParams.Length > 1)
|
||
{
|
||
string[] queryParams = urlParams[1].Split('&');
|
||
List<string> qpLS = new List<string>();
|
||
Hashtable pms = new Hashtable();
|
||
hasEn = queryParams.Any(str => str.Trim().StartsWith(enKey, StringComparison.OrdinalIgnoreCase));
|
||
foreach (string q in queryParams)
|
||
{
|
||
string[] eqParams = q.Split('=');
|
||
if (eqParams.Length > 1)
|
||
{
|
||
if (hasEn && eqParams[0].ToLower() == enKey)
|
||
{
|
||
enVal = eqParams[1];
|
||
continue;
|
||
}
|
||
if (hasEn || eqParams[0].ToLower() == "username" || eqParams[0].ToLower() == "password")
|
||
{
|
||
pms.Add(eqParams[0], eqParams[1]);
|
||
}
|
||
else
|
||
{
|
||
qpLS.Add(string.Format("{0}={1}", eqParams[0], HttpUtility.UrlEncode(eqParams[1])));
|
||
}
|
||
}
|
||
else
|
||
{
|
||
}
|
||
}
|
||
if (pms.Count > 0)
|
||
{
|
||
DateTime dateTime = DateTime.Now.AddDays(1);
|
||
DateTime epoch = new DateTime(1970, 1, 1, 0, 0, 0, DateTimeKind.Utc);
|
||
long timestamp = (dateTime.Ticks - epoch.Ticks) / TimeSpan.TicksPerSecond;
|
||
pms.Add("exp", timestamp);
|
||
}
|
||
return $"{urlParams[0]}?pms={HttpUtility.UrlEncode(hasEn ? Lskj.Web.Core.Util.safety.AESUtil.Encrypt(JSON.Encode(pms), enVal) : Lskj.Web.Core.Util.safety.AESUtil.MobileEncrypt(JSON.Encode(pms)))}&{qpLS.SJoin("&")}";
|
||
}
|
||
return url;
|
||
}
|
||
/// <summary>
|
||
/// winform键盘事件
|
||
/// </summary>
|
||
/// <param name="sender"></param>
|
||
/// <param name="e"></param>
|
||
private void Form1_KeyDown(object sender, KeyEventArgs e)
|
||
{
|
||
try
|
||
{
|
||
//截屏
|
||
if (e.Control && e.Shift && e.KeyCode == Keys.C)
|
||
{
|
||
IntPtr mainFrameId = BlinkBrowserPInvoke.wkeWebFrameGetMainFrame(blinkBrowser1.handle);
|
||
int width = BlinkBrowserPInvoke.wkeGetContentWidth(blinkBrowser1.handle);
|
||
int height = BlinkBrowserPInvoke.wkeGetContentHeight(blinkBrowser1.handle);
|
||
wkeScreenshotSettings settings = new wkeScreenshotSettings
|
||
{
|
||
height = height,
|
||
width = width
|
||
};
|
||
settings.structSize = System.Runtime.InteropServices.Marshal.SizeOf(settings);
|
||
var bf = BlinkBrowserPInvoke.wkePrintToBitmap(blinkBrowser1.handle, mainFrameId, settings);
|
||
if (bf != IntPtr.Zero)
|
||
{
|
||
|
||
var data = (wkeMemBuf)Marshal.PtrToStructure(bf, typeof(wkeMemBuf));
|
||
if (data.data != IntPtr.Zero && data.length != 0)
|
||
{
|
||
byte[] ys = new byte[data.length];
|
||
Marshal.Copy(data.data, ys, 0, ys.Length);
|
||
|
||
string fileName = Guid.NewGuid().ToString("n") + ".bmp";
|
||
System.IO.File.WriteAllBytes(fileName, ys);
|
||
MessageBox.Show("截图保存成功,图片地址为:" + Application.StartupPath + "\\" + fileName);
|
||
}
|
||
else
|
||
{
|
||
MessageBox.Show("截图失败,数据解析失败。");
|
||
}
|
||
}
|
||
else
|
||
{
|
||
MessageBox.Show("截图失败,返回空。");
|
||
}
|
||
}
|
||
// 打开调试工具
|
||
if (e.KeyCode == Keys.F12)
|
||
{
|
||
blinkBrowser1.ShowDevtools(Application.StartupPath + @"\front_end\inspector.html");
|
||
}
|
||
}
|
||
catch (Exception ex)
|
||
{
|
||
string Message = ErrorMessage.PromptErrorMessage(ex);
|
||
MessageUtil.Show(Message, ex.Message);
|
||
}
|
||
}
|
||
/// <summary>
|
||
/// 下载文件
|
||
/// </summary>
|
||
/// <param name="url"></param>
|
||
private void BlinkBrowser1_OnDownloadFile(string url)
|
||
{
|
||
//只是简单实现下载,可以模仿其他下载界面,先弹出一个窗体,让用户选择保存路径文件名什么的。
|
||
//使用前先拷贝 libs/XL 目录中文件到软件运行目录。
|
||
if (File.Exists("xldl.dll"))
|
||
{
|
||
var initSuccess = XL.XL_Init();
|
||
if (initSuccess)
|
||
{
|
||
|
||
XL.DownTaskParam p = new XL.DownTaskParam()
|
||
{
|
||
IsResume = 0,
|
||
szTaskUrl = url,
|
||
szFilename = url.Substring(url.LastIndexOf('/') + 1),//简单处理文件名,实际中还需要单独处理,这里有BUG
|
||
szSavePath = AppDomain.CurrentDomain.BaseDirectory
|
||
};
|
||
string SzFileName = HttpUtility.UrlDecode(p.szFilename);
|
||
string[] szName = SzFileName.Split('/');
|
||
taskPtr = XL.XL_CreateTask(p);
|
||
var startSuccess = XL.XL_StartTask(taskPtr);
|
||
if (startSuccess)
|
||
{
|
||
string fileTitle = szName[szName.Length - 1];
|
||
DataRow rowItem = AttachImpl.GetTempletFile(fileTitle);
|
||
if (IsDownVerify)
|
||
{
|
||
if (rowItem != null)
|
||
{
|
||
Download(p.szTaskUrl, fileTitle);
|
||
}
|
||
else
|
||
{
|
||
MessageBox.Show("未找到下载项");
|
||
}
|
||
}
|
||
else
|
||
{
|
||
Download(p.szTaskUrl, fileTitle);
|
||
}
|
||
}
|
||
}
|
||
else
|
||
{
|
||
MessageBox.Show("XL_Init初始化失败");
|
||
}
|
||
}
|
||
else
|
||
{
|
||
MessageBox.Show("请先将 libs/XL 目录中文件到软件运行目录。");
|
||
}
|
||
}
|
||
|
||
/// <summary>
|
||
/// <para>说明:定义服务器文件地址,含文件名。客户端接收地址及文件名由客户端自行定义</para>
|
||
/// <para>创建人:王一帆</para>
|
||
/// <para>创建日期: </para>
|
||
/// <para>修改人:</para>
|
||
/// <para>修改日期:</para>
|
||
/// <para>修改备注:</para>
|
||
/// <para>版本:1.0</para>
|
||
/// </summary>
|
||
/// <param name="URL">The URL.</param>
|
||
/// <param name="FileName">Name of the file.</param>
|
||
public static void Download(string URL, string FileName)
|
||
{
|
||
FrmSelectDownload frmSelectDownload = new FrmSelectDownload();
|
||
frmSelectDownload.URL = URL;
|
||
frmSelectDownload.FileName = FileName;
|
||
frmSelectDownload.Show();
|
||
//SaveFileDialog saveFileDialog = new SaveFileDialog();
|
||
//saveFileDialog.FileName = FileName;
|
||
//saveFileDialog.Title = "下载模板文件到";
|
||
//saveFileDialog.RestoreDirectory = true;
|
||
////点了保存按钮进入
|
||
//if (saveFileDialog.ShowDialog() == DialogResult.OK)
|
||
//{
|
||
// string localFilePath = System.IO.Path.GetFullPath(saveFileDialog.FileName);//获得文件路径,含文件名
|
||
// string fileNameExt = localFilePath.Substring(localFilePath.LastIndexOf("\\") + 1);//获取文件名,不带路径
|
||
// string FilePath = localFilePath.Substring(0, localFilePath.LastIndexOf("\\"));//获取文件路径,不带文件名
|
||
// FrmDownload frm = new FrmDownload(URL, FileName, localFilePath);
|
||
// frm.Show();
|
||
//}
|
||
}
|
||
|
||
|
||
//[JSFunctin]
|
||
//public static async void DOTaskWithAsync(string str)
|
||
//{
|
||
// await Task.Run(() =>
|
||
// {
|
||
// Dotaskfunction(str);
|
||
// });
|
||
//}
|
||
public static void Dotaskfunction(string s)
|
||
{
|
||
Thread.Sleep(1000 * 5);
|
||
if (mb != null)
|
||
{
|
||
mb.Invoke(new Action<string>(
|
||
(sx) =>
|
||
{
|
||
string _str = "ceshi" + sx;
|
||
_str = System.Web.HttpUtility.UrlEncode(_str);
|
||
string invokeJSStr = "asyncTest('" + _str + "')";
|
||
mb.InvokeJS(invokeJSStr);
|
||
}
|
||
), s);
|
||
}
|
||
|
||
}
|
||
private void BlinkBrowser1_DocumentReadyCallback()
|
||
{
|
||
}
|
||
|
||
private void BlinkBrowser1_OnTitleChangeCall(string title)
|
||
{
|
||
Text = title;
|
||
}
|
||
|
||
private void BlinkBrowser1_OnUrlChange2Call(string url)
|
||
{
|
||
this.url = url;
|
||
}
|
||
|
||
private void button2_Click(object sender, EventArgs e)
|
||
{
|
||
try
|
||
{
|
||
blinkBrowser1.ShowDevtools(Application.StartupPath + @"\front_end\inspector.html");
|
||
//MiniBlinkPinvoke.BlinkBrowserPInvoke.wkeSetDebugConfig(blinkBrowser1.handle, "showDevTools", Application.StartupPath + @"\front_end\inspector.html");
|
||
}
|
||
catch (Exception ex)
|
||
{
|
||
string Message = ErrorMessage.PromptErrorMessage(ex);
|
||
MessageUtil.Show(Message, ex.Message);
|
||
}
|
||
}
|
||
|
||
private void button3_Click(object sender, EventArgs e)
|
||
{
|
||
try
|
||
{
|
||
IntPtr mainFrameId = BlinkBrowserPInvoke.wkeWebFrameGetMainFrame(blinkBrowser1.handle);
|
||
int width = BlinkBrowserPInvoke.wkeGetContentWidth(blinkBrowser1.handle);
|
||
int height = BlinkBrowserPInvoke.wkeGetContentHeight(blinkBrowser1.handle);
|
||
wkeScreenshotSettings settings = new wkeScreenshotSettings
|
||
{
|
||
height = height,
|
||
width = width
|
||
};
|
||
settings.structSize = System.Runtime.InteropServices.Marshal.SizeOf(settings);
|
||
var bf = BlinkBrowserPInvoke.wkePrintToBitmap(blinkBrowser1.handle, mainFrameId, settings);
|
||
if (bf != IntPtr.Zero)
|
||
{
|
||
|
||
var data = (wkeMemBuf)Marshal.PtrToStructure(bf, typeof(wkeMemBuf));
|
||
if (data.data != IntPtr.Zero && data.length != 0)
|
||
{
|
||
byte[] ys = new byte[data.length];
|
||
Marshal.Copy(data.data, ys, 0, ys.Length);
|
||
|
||
string fileName = Guid.NewGuid().ToString("n") + ".bmp";
|
||
System.IO.File.WriteAllBytes(fileName, ys);
|
||
MessageBox.Show("截图保存成功,图片地址为:" + Application.StartupPath + "\\" + fileName);
|
||
}
|
||
else
|
||
{
|
||
MessageBox.Show("截图失败,数据解析失败。");
|
||
}
|
||
}
|
||
else
|
||
{
|
||
MessageBox.Show("截图失败,返回空。");
|
||
}
|
||
}
|
||
catch (Exception ex)
|
||
{
|
||
string Message = ErrorMessage.PromptErrorMessage(ex);
|
||
MessageUtil.Show(Message, ex.Message);
|
||
}
|
||
}
|
||
}
|
||
}
|