-
Notifications
You must be signed in to change notification settings - Fork 210
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
- Loading branch information
Showing
68 changed files
with
3,669 additions
and
3,603 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -1,6 +1,6 @@ | ||
<?xml version="1.0" encoding="utf-8" ?> | ||
<?xml version="1.0" encoding="utf-8"?> | ||
<configuration> | ||
<startup> | ||
<supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.5" /> | ||
<supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.5.2"/> | ||
</startup> | ||
</configuration> | ||
</configuration> |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,26 @@ | ||
using CefSharp; | ||
using CefSharp.Enums; | ||
using System; | ||
using System.Collections.Generic; | ||
using System.Linq; | ||
using System.Text; | ||
using System.Threading.Tasks; | ||
|
||
namespace Browser.CefOp | ||
{ | ||
/// <summary> | ||
/// (たぶん)ドラッグ&ドロップを無効化します。 | ||
/// </summary> | ||
public class DragHandler : IDragHandler | ||
{ | ||
public bool OnDragEnter(IWebBrowser browserControl, IBrowser browser, IDragData dragData, DragOperationsMask mask) | ||
{ | ||
return true; | ||
} | ||
|
||
public void OnDraggableRegionsChanged(IWebBrowser browserControl, IBrowser browser, IList<DraggableRegion> regions) | ||
{ | ||
// nop? | ||
} | ||
} | ||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,143 @@ | ||
using CefSharp; | ||
using System; | ||
using System.Collections.Generic; | ||
using System.Linq; | ||
using System.Text; | ||
using System.Threading.Tasks; | ||
using System.Windows.Forms; | ||
|
||
namespace Browser.CefOp | ||
{ | ||
/// <summary> | ||
/// キーボード入力を下層のフォームに伝えます? | ||
/// </summary> | ||
/// <remarks>CefSharp.WinForms.Example.Handlers</remarks> | ||
public class KeyboardHandler : IKeyboardHandler | ||
{ | ||
public bool OnPreKeyEvent(IWebBrowser browserControl, IBrowser browser, KeyType type, int windowsKeyCode, int nativeKeyCode, CefEventFlags modifiers, bool isSystemKey, ref bool isKeyboardShortcut) | ||
{ | ||
const int WM_SYSKEYDOWN = 0x104; | ||
const int WM_KEYDOWN = 0x100; | ||
const int WM_KEYUP = 0x101; | ||
const int WM_SYSKEYUP = 0x105; | ||
const int WM_CHAR = 0x102; | ||
const int WM_SYSCHAR = 0x106; | ||
const int VK_TAB = 0x9; | ||
const int VK_LEFT = 0x25; | ||
const int VK_UP = 0x26; | ||
const int VK_RIGHT = 0x27; | ||
const int VK_DOWN = 0x28; | ||
|
||
isKeyboardShortcut = false; | ||
|
||
// Don't deal with TABs by default: | ||
//: Are there any additional ones we need to be careful of? | ||
// i.e. Escape, Return, etc...? | ||
if (windowsKeyCode == VK_TAB || windowsKeyCode == VK_LEFT || windowsKeyCode == VK_UP || windowsKeyCode == VK_DOWN || windowsKeyCode == VK_RIGHT) | ||
{ | ||
return false; | ||
} | ||
|
||
var result = false; | ||
|
||
var control = browserControl as Control; | ||
var msgType = 0; | ||
switch (type) | ||
{ | ||
case KeyType.RawKeyDown: | ||
if (isSystemKey) | ||
{ | ||
msgType = WM_SYSKEYDOWN; | ||
} | ||
else | ||
{ | ||
msgType = WM_KEYDOWN; | ||
} | ||
break; | ||
case KeyType.KeyUp: | ||
if (isSystemKey) | ||
{ | ||
msgType = WM_SYSKEYUP; | ||
} | ||
else | ||
{ | ||
msgType = WM_KEYUP; | ||
} | ||
break; | ||
case KeyType.Char: | ||
if (isSystemKey) | ||
{ | ||
msgType = WM_SYSCHAR; | ||
} | ||
else | ||
{ | ||
msgType = WM_CHAR; | ||
} | ||
break; | ||
default: | ||
// abort? | ||
break; | ||
} | ||
|
||
|
||
// We have to adapt from CEF's UI thread message loop to our fronting WinForm control here. | ||
// So, we have to make some calls that Application.Run usually ends up handling for us: | ||
var state = PreProcessControlState.MessageNotNeeded; | ||
|
||
// We can't use BeginInvoke here, because we need the results for the return value | ||
// and isKeyboardShortcut. In theory this shouldn't deadlock, because | ||
// atm this is the only synchronous operation between the two threads. | ||
control.Invoke(new Action(() => | ||
{ | ||
var msg = new Message | ||
{ | ||
HWnd = control.Handle, | ||
Msg = msgType, | ||
WParam = new IntPtr(windowsKeyCode), | ||
LParam = new IntPtr(nativeKeyCode) | ||
}; | ||
|
||
// First comes Application.AddMessageFilter related processing: | ||
// 99.9% of the time in WinForms this doesn't do anything interesting. | ||
var processed = Application.FilterMessage(ref msg); | ||
if (processed) | ||
{ | ||
state = PreProcessControlState.MessageProcessed; | ||
} | ||
else | ||
{ | ||
// Next we see if our control (or one of its parents) | ||
// wants first crack at the message via several possible Control methods. | ||
// This includes things like Mnemonics/Accelerators/Menu Shortcuts/etc... | ||
state = control.PreProcessControlMessage(ref msg); | ||
} | ||
})); | ||
|
||
if (state == PreProcessControlState.MessageNeeded) | ||
{ | ||
//: Determine how to track MessageNeeded for OnKeyEvent. | ||
isKeyboardShortcut = true; | ||
} | ||
else if (state == PreProcessControlState.MessageProcessed) | ||
{ | ||
// Most of the interesting cases get processed by PreProcessControlMessage. | ||
result = true; | ||
} | ||
|
||
//Debug.WriteLine("OnPreKeyEvent: KeyType: {0} 0x{1:X} Modifiers: {2}", type, windowsKeyCode, modifiers); | ||
//Debug.WriteLine("OnPreKeyEvent PreProcessControlState: {0}", state); | ||
|
||
return result; | ||
} | ||
|
||
public bool OnKeyEvent(IWebBrowser browserControl, IBrowser browser, KeyType type, int windowsKeyCode, int nativeKeyCode, CefEventFlags modifiers, bool isSystemKey) | ||
{ | ||
var result = false; | ||
//Debug.WriteLine("OnKeyEvent: KeyType: {0} 0x{1:X} Modifiers: {2}", type, windowsKeyCode, modifiers); | ||
//: Handle MessageNeeded cases here somehow. | ||
return result; | ||
} | ||
|
||
|
||
} | ||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,41 @@ | ||
using CefSharp; | ||
using System; | ||
using System.Collections.Generic; | ||
using System.Linq; | ||
using System.Text; | ||
using System.Threading.Tasks; | ||
using System.Windows.Forms; | ||
|
||
namespace Browser.CefOp | ||
{ | ||
/// <summary> | ||
/// コンテキストメニューを無効化します。 | ||
/// </summary> | ||
public class MenuHandler : IContextMenuHandler | ||
{ | ||
public MenuHandler() | ||
{ | ||
} | ||
|
||
|
||
public void OnBeforeContextMenu(IWebBrowser browserControl, IBrowser browser, IFrame frame, IContextMenuParams parameters, IMenuModel model) | ||
{ | ||
model.Clear(); | ||
} | ||
|
||
public bool OnContextMenuCommand(IWebBrowser browserControl, IBrowser browser, IFrame frame, IContextMenuParams parameters, CefMenuCommand commandId, CefEventFlags eventFlags) | ||
{ | ||
return false; | ||
} | ||
|
||
public void OnContextMenuDismissed(IWebBrowser browserControl, IBrowser browser, IFrame frame) | ||
{ | ||
// nop | ||
} | ||
|
||
public bool RunContextMenu(IWebBrowser browserControl, IBrowser browser, IFrame frame, IContextMenuParams parameters, IMenuModel model, IRunContextMenuCallback callback) | ||
{ | ||
return false; | ||
} | ||
} | ||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,30 @@ | ||
using CefSharp; | ||
using CefSharp.Handler; | ||
using System; | ||
using System.Collections.Generic; | ||
using System.Linq; | ||
using System.Text; | ||
using System.Threading.Tasks; | ||
|
||
namespace Browser.CefOp | ||
{ | ||
/// <summary> | ||
/// レスポンスの置換制御を行います。 | ||
/// </summary> | ||
public class RequestHandler : DefaultRequestHandler | ||
{ | ||
bool pixiSettingEnabled; | ||
|
||
public RequestHandler(bool pixiSettingEnabled) : base() { | ||
this.pixiSettingEnabled = pixiSettingEnabled; | ||
} | ||
|
||
public override IResponseFilter GetResourceResponseFilter(IWebBrowser browserControl, IBrowser browser, IFrame frame, IRequest request, IResponse response) | ||
{ | ||
if (pixiSettingEnabled && request.Url.Contains(@"/kcs2/index.php")) | ||
return new ResponseFilterPixiSetting(); | ||
|
||
return base.GetResourceResponseFilter(browserControl, browser, frame, request, response); | ||
} | ||
} | ||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,50 @@ | ||
using CefSharp; | ||
using System; | ||
using System.Collections.Generic; | ||
using System.IO; | ||
using System.Linq; | ||
using System.Text; | ||
using System.Threading.Tasks; | ||
|
||
namespace Browser.CefOp | ||
{ | ||
/// <summary> | ||
/// スクリーンショット撮影に必要なデータを挿入します。 | ||
/// </summary> | ||
public class ResponseFilterPixiSetting : IResponseFilter | ||
{ | ||
public bool InitFilter() => true; | ||
|
||
public FilterStatus Filter(Stream dataIn, out long dataInRead, Stream dataOut, out long dataOutWritten) | ||
{ | ||
if (dataIn == null) | ||
{ | ||
dataInRead = 0; | ||
dataOutWritten = 0; | ||
return FilterStatus.Done; | ||
} | ||
|
||
using (var reader = new StreamReader(dataIn)) | ||
{ | ||
string raw = reader.ReadToEnd(); | ||
|
||
// note: preserveDrawingBuffer = true 設定時に動作が重くなる可能性がある | ||
// が、 false だとスクリーンショットがハードコピー(Graphics.CopyFromScreen 等)でしか取れなくなる | ||
// 描画直後に保存処理(toDataUrl)を行うと false でも撮れるらしいが、外部からの操作でそれができるかは不明 | ||
string replaced = raw.Replace( | ||
@"/pixi.js""></script>", | ||
@"/pixi.js""></script><script>PIXI.settings.RENDER_OPTIONS.preserveDrawingBuffer=true;</script>"); | ||
|
||
var bytes = Encoding.UTF8.GetBytes(replaced); | ||
dataOut.Write(bytes, 0, bytes.Length); | ||
|
||
dataInRead = dataIn.Length; | ||
dataOutWritten = Math.Min(bytes.Length, dataOut.Length); | ||
} | ||
|
||
return FilterStatus.Done; | ||
} | ||
|
||
public void Dispose() { } | ||
} | ||
} |
Oops, something went wrong.