Goal
With Chrome extension, user-defined protocol and Windows API integrated in C#, the auto-look-up process when reviewing words on Shanbay can be even more cost-efficient and precise comparing with former methods.
- [x] Find a good Dictionary
- [x] Modify for better user experience
- [x] FInd a good Dictionary Software
- [x] Modify for better user experience
- [x] FInd a even better Dictionary Software and modify it for good
- [x] Integrate with Shanbay
- [x] Basic intergration by simulating user activity
- [x] Advanced intergration by combining webpage with local software
- [x] Triggered by user activity
- [ ] Triggered by page content update
Chrome Extension
manifest.json
{
"name": "GoldenDictForShanbay",
"version": "0.9",
"manifest_version": 2,
"description": "GoldenDictForShanbay",
"icons": {"16":"16.png","48":"48.png","128":"128.png"},
"permissions": [
"https://www.shanbay.com/bdc/review/"
],
"browser_action": {
"default_icon": "16.png"
},
"content_scripts":[
{
"matches": ["https://www.shanbay.com/bdc/review/"],
"js":["main.js"]
}
]
}
main.js
document.addEventListener("keydown",callmain, false);
var formerword = null;
var word = null;
function callmain(){
document.addEventListener("keydown",callmain, false);
var formerword = null;
var word = null;
function callmain(){
if(
event.keyCode == 32 //space
|| event.keyCode == 49 //main 1
|| event.keyCode == 50 //main 2
|| event.keyCode == 68 //d
|| event.keyCode == 97 //numpad 1
|| event.keyCode == 98 //numpad 2
){
setTimeout(main, 200);
}
};
function main(){
word = document.getElementsByTagName("h1")[0].innerHTML
if(formerword != word){
window.location.href="GoldenDict://"+word;
formerword = word;
}
}
User-defined Protocol
Windows Registry Editor Version 5.00
[HKEY_CLASSES_ROOT\GoldenDict]
"URL Protocol"="D:\\Users\\Mark\\Documents\\Mark\\Data\\Dictionary\\GoldenDict\\protocol\\GoldendictProtocol.exe"
@="protocol.exe"
[HKEY_CLASSES_ROOT\GoldenDict\DefaultIcon]
@="D:\\Users\\Mark\\Documents\\Mark\\Data\\Dictionary\\GoldenDict\\protocol\\GoldendictProtocol.exe,1"
[HKEY_CLASSES_ROOT\GoldenDict\shell]
[HKEY_CLASSES_ROOT\GoldenDict\shell\open]
[HKEY_CLASSES_ROOT\GoldenDict\shell\open\command]
@="\"D:\\Users\\Mark\\Documents\\Mark\\Data\\Dictionary\\GoldenDict\\protocol\\GoldendictProtocol.exe\" \"%1\""
C#
using System;
using System.Collections.Generic;
using System.Linq;
using System.Runtime.InteropServices;
using System.Text;
namespace GoldendictProtocol
{
class Program
{
static void Main(string[] args)
{
IntPtr hWnd = GetForegroundWindow();
if (args.Length > 0)
{
args[0] = args[0].Remove(0, 13);
args[0] = args[0].Replace("%20", " ");
System.Diagnostics.Process.Start("D:\\Users\\Mark\\Documents\\Mark\\Data\\Dictionary\\GoldenDict\\GoldenDict.exe", "\"" + args[0] + "\"");
}
System.DateTime beforDT = System.DateTime.Now;
System.DateTime afterDT = new System.DateTime();
do
{
if (hWnd == GetForegroundWindow())
{
afterDT = System.DateTime.Now;
System.Threading.Thread.Sleep(1);
continue;
}
else
{
break;
}
} while (afterDT.Subtract(beforDT).TotalMilliseconds < 200);
SetForegroundWindow(hWnd);
}
[DllImport("user32.dll", EntryPoint = "GetForegroundWindow")]
public static extern IntPtr GetForegroundWindow();
[DllImport("user32.dll", EntryPoint = "SetForegroundWindow")]
public static extern int SetForegroundWindow(IntPtr hwnd);
}
}