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;
namespace Lskj.MiniBlink
{
public partial class FormMain : Form
{
public DynamicPubNewBrowerModel PubBrowerModel;
BlinkBrowser blinkBrowser1 = null;
static BlinkBrowser mb = null;
public string url = string.Empty;
///
/// 下载验证
///
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);
}
///
/// 浏览器初始化
///
///
///
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 = url;
// blinkBrowser1.Focus();
}
///
/// winform键盘事件
///
///
///
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);
}
}
///
/// 下载文件
///
///
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 目录中文件到软件运行目录。");
}
}
///
/// 说明:定义服务器文件地址,含文件名。客户端接收地址及文件名由客户端自行定义
/// 创建人:王一帆
/// 创建日期:
/// 修改人:
/// 修改日期:
/// 修改备注:
/// 版本:1.0
///
/// The URL.
/// Name of the file.
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(
(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);
}
}
}
}