青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品

Codejie's C++ Space

Using C++

LingosHook: Lingoes生詞本第一步


??? 一直在用Lingoes作為翻譯工具,占用空間小,運行比較穩定,詞典可以任意切換,使用起來要比Kingsoft的詞霸感覺--“輕松”~
??? Lingoes有個沒法和詞霸相比的功能--生詞本。對于我這樣記性不好的人來說,如果能夠記錄自己曾經“認真”背誦過的單詞,然后再“強化”一下,應該會有好的效果(實際差不多,一樣過三天就記不住了),因此這個功能對我來說比較--實用。但,Lingoes無此功能~
??? 在網上查找,發現很有些人跟我有同感,并也有人士完成了此功能,大喜,下載使用,嗯,功能都有,只是我用起來不太順手。于是,發揚“輪子精神”,然后便有了這個--LingosHook~

??? 如其名字,由于無法知道Lngoes內部實現,只能走旁門--HOOK了。而如我們所知,要想用Hook,DLL是少不了的,前期關于DLL的練習也做了很久了,但上周才把可用的DLL剛剛調試完成,然后加上一個測試的App,就有了下面的截圖。


??? 上圖中,顯式了由Lingoes結果窗口(未截圖)中Hook到的HTML和TEXT內容,這樣在加上SQLite和一些管理策略代碼,一個生詞本應該就可以完成了.

??? 實現的關鍵還是Hook的DLL,有興趣,請點擊這里下載。其中包括了測試用的App。DLL的exports如下:


??? CreateHookThread用于“注冊”,RemoveHookThread用于“卸載”。下面是調用的主要代碼,我使用的開發測試環境是XP SP3+VCExpress 9.0+wxWidgets 2.8.10,還有lingoes 2.63。如果測試的app不能運行,請先到MS下載相應的VC發布包試試。
??
? ? 實現步驟如下:
??? 1.向Lingoes注冊截取消息的Hook DLL;
??? 2.創建線程,用于等待Hook發現Lingoes“截取到文本”觸發的WM_COPYDATA消息后的事件;
??? 3.線程收到事件后,向注冊進程發送內部消息,轉發Lingoes的翻譯結果,其中結果分為HTML和TEXT兩種結果;
??? 4.注冊線程收到消息后,顯式結果。

??? 注冊代碼:

void ?MyFrame::OnBtnHook(wxCommandEvent? & event )
{
????_hDll?
= ?::LoadLibrary(_T( " ../Debug/LingosHook.dll " ));
????
if (_hDll? != ?NULL)
????
{
????????CreateHookThreadPtr?pch?
= ?(CreateHookThreadPtr)GetProcAddress(_hDll,? " CreateHookThread " );
????????
if (pch? != ?NULL)
????????
{
????????????
if (pch((HWND) this -> GetHandle(),?NULL,?NULL,? & _nMsgID)? != ?TRUE)
????????????
{
????????????????wxMessageBox(_(
" call?CreateHookThread()?failed. " ));
????????????????::FreeLibrary(_hDll);
????????????}

????????}

????????
else
????????
{
????????????wxMessageBox(_(
" Get?CreateHookThread?address?failed. " ));
????????}

????}

????
else
????
{
????????wxMessageBox(_(
" Load?LingosHook?dll?failed. " ));
????}



// ????event.Skip();
// ????wxLogDebug(wxT("Event?handler?(MyFrame::OnBtnHook)?not?implemented?yet"));? // notify?the?user?that?he?hasn't?implemented?the?event?handler?yet
}


??? 卸載代碼:

void ?MyFrame::OnBtnUnhook(wxCommandEvent? & event )
{
????
if (_hDll? != ?NULL)
????
{
????????RemoveHookThreadPtr?prh?
= ?(RemoveHookThreadPtr)GetProcAddress(_hDll,? " RemoveHookThread " );
????????
if (prh? != ?NULL)
????????
{
????????????
if (prh()? != ?TRUE)
????????????
{
????????????????wxMessageBox(_(
" call?RemoveHookThread()?failed. " ));
????????????}

????????}

????????
else
????????
{
????????????wxMessageBox(_(
" Get?RemoveHookThread?address?failed. " ));
????????}

????????::FreeLibrary(_hDll);
????????_hDll?
= ?NULL;
????}


// ????event.Skip();
// ????wxLogDebug(wxT("Event?handler?(MyFrame::OnBtnUnhook)?not?implemented?yet"));? // notify?the?user?that?he?hasn't?implemented?the?event?handler?yet
}


??? 消息處理代碼:

WXLRESULT?MyFrame::MSWWindowProc(WXUINT?message,?WXWPARAM?wParam,?WXLPARAM?lParam)
{
????
if (message? == ?_nMsgID)
????
{
????????wxLogDebug(_(
" msg:%d,?wparam:%d,?lparam:%d " ),?message,?wParam,?lParam);

????????
struct ?_HookData_t * ?hd? = ?(reinterpret_cast < struct ?_HookData_t *> (lParam));
????????wxString?str;
????????
if (hd? != ?NULL? && ?hd -> data? != ?NULL)
????????
{
????????????str.append(hd
-> data,?hd -> size); // ,?wxMBConvUTF16,?hd->size);
????????????
// delete?[]?hd->data;
????????}
????????

????????
// if(wParam?==?HKT_CATCH)
????????
// {
????????
// ????wxLogDebug(_T("get?CATCH?message."));
????????
// ????_textEdit->AppendText(_("CATCH:")?+?str?+?_("\n"));
????????
// }
????????
// else
???????? if (wParam? == ?HKT_RESULT_TEXT)
????????
{
????????????wxLogDebug(_T(
" get?RESULT_TEXT?message. " ));
????????????_textEdit
-> AppendText(_( " \n---------------TEXT---------------\n " )? + ?str);
????????}

????????
else ? if (wParam? == ?HKT_RESULT_HTML)
????????
{
????????????wxLogDebug(_T(
" get?RESULT_HTLM?message. " ));
????????????_textEdit
-> AppendText(_( " \n---------------HTML---------------\n " )? + ?str);
????????}

????????
else
????????
{
????????????wxLogDebug(_T(
" get?UNKNOWN?message. " ));
????????}

????}

????
return ?wxFrame::MSWWindowProc(message,?wParam,?lParam);
}

posted on 2009-11-16 12:53 codejie 閱讀(793) 評論(2)  編輯 收藏 引用 所屬分類: C++

評論

# re: LingosHook: Lingoes生詞本第一步[未登錄] 2009-11-17 10:07 Liu

看完以后的感覺,moto給你的活太少了,你在家里也不用干家務看孩子……  回復  更多評論   

# re: LingosHook: Lingoes生詞本第一步 2009-11-17 10:20 codejie

@Liu
嘿嘿。。。不能這么說啊,你應該知道我敲字比較快了,多出的時間就換換做做了~關于看孩子的事情,咱們應該都一樣了,只有寶寶睡著了,咱們才能自由活動啊~  回復  更多評論   

公告

Using C++

導航

統計

留言簿(73)

隨筆分類(513)

積分與排名

最新評論

閱讀排行榜

評論排行榜

青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品
  • <ins id="pjuwb"></ins>
    <blockquote id="pjuwb"><pre id="pjuwb"></pre></blockquote>
    <noscript id="pjuwb"></noscript>
          <sup id="pjuwb"><pre id="pjuwb"></pre></sup>
            <dd id="pjuwb"></dd>
            <abbr id="pjuwb"></abbr>
            毛片一区二区三区| 欧美大片18| 欧美14一18处毛片| 老妇喷水一区二区三区| 一区二区三区高清在线观看| 亚洲精品一区二区三区蜜桃久| 亚洲国产日韩欧美| 一本色道久久综合狠狠躁篇怎么玩 | 亚洲国产欧美在线| 在线激情影院一区| 在线亚洲+欧美+日本专区| 中文在线资源观看网站视频免费不卡 | 久久亚洲精品欧美| 欧美日韩免费高清| 国产午夜一区二区三区| 亚洲国产日韩在线| 日韩午夜剧场| 欧美中文字幕精品| 开心色5月久久精品| 国产日韩欧美在线视频观看| 99国产麻豆精品| 久久久精品午夜少妇| 亚洲另类自拍| 老巨人导航500精品| 国产亚洲精品7777| 99在线精品免费视频九九视| 欧美激情精品久久久久久大尺度 | 性做久久久久久久久| 欧美三级网页| 亚洲午夜小视频| 在线亚洲观看| 国产精品看片你懂得| 日韩亚洲一区在线播放| 亚洲精品久久久久久下一站| 久久精品国产亚洲精品 | 国产精品九九久久久久久久| 一本色道久久88综合日韩精品| 欧美二区视频| 欧美激情一级片一区二区| 一区二区三区免费网站| 亚洲精品小视频在线观看| 久久久www成人免费毛片麻豆| 国产亚洲精品v| 欧美激情久久久久| 欧美视频精品在线| 久久蜜桃香蕉精品一区二区三区| 欧美在线观看网址综合| 久久精品一区四区| 夜夜精品视频| 久久久综合精品| 一二三区精品福利视频| 亚洲男人的天堂在线| 国产一本一道久久香蕉| 亚洲欧洲精品一区二区精品久久久 | 欧美华人在线视频| 欧美日韩一区在线视频| 欧美大成色www永久网站婷| 欧美三级在线视频| 欧美成人精品在线| 国产在线不卡| 亚洲午夜av电影| 亚洲色图自拍| 久久久久久亚洲综合影院红桃 | 亚洲午夜激情在线| 亚洲人www| 美国十次了思思久久精品导航| 午夜精品福利视频| 国产精品老牛| 亚洲主播在线| 欧美在线日韩精品| 欧美日韩中文字幕综合视频| 麻豆成人在线播放| 亚洲成人在线| 欧美韩日一区二区三区| 亚洲精品日本| 亚洲一区二区三区高清| 欧美性天天影院| 午夜国产精品影院在线观看| 午夜视频在线观看一区二区| 欧美国产激情二区三区| 欧美凹凸一区二区三区视频| 国产一区清纯| 免费久久99精品国产自| 91久久精品美女高潮| 在线亚洲成人| 噜噜噜在线观看免费视频日韩| 黄页网站一区| 欧美成人一区二免费视频软件| 亚洲国产女人aaa毛片在线| 亚洲欧洲视频| 欧美日韩久久不卡| 欧美一级在线视频| 欧美高清在线视频观看不卡| 亚洲激情成人| 亚洲第一二三四五区| 国产亚洲欧美一区二区| 久热精品视频在线观看| 午夜视频在线观看一区二区三区| 欧美成人午夜免费视在线看片 | 亚洲国产高清在线观看视频| 国产精品推荐精品| 欧美激情第二页| 欧美有码视频| 久久国产精品久久久久久| 夜夜狂射影院欧美极品| 一本一本久久a久久精品综合妖精| 欧美激情精品久久久| 欧美激情网站在线观看| 欧美a级在线| 欧美不卡福利| 亚洲高清视频的网址| 欧美国产日韩亚洲一区| 亚洲国产精品小视频| 亚洲精品123区| 国产综合视频| 激情成人综合| 激情综合激情| 亚洲国产欧美一区| 亚洲美女黄网| 亚洲四色影视在线观看| 欧美一区午夜视频在线观看| 午夜久久影院| 免费h精品视频在线播放| 蜜桃久久精品乱码一区二区| 免费在线看一区| 亚洲国产成人一区| 亚洲性视频h| 久久综合成人精品亚洲另类欧美| 欧美国产激情| 国产香蕉97碰碰久久人人| 亚洲第一色中文字幕| 在线综合亚洲欧美在线视频| 久久九九国产| 亚洲精品三级| 久久久久国产精品一区三寸| 欧美区在线播放| 国产综合久久久久久| 午夜精品久久久久久久蜜桃app | 欧美日韩国产一级片| 精品不卡在线| 久久精品人人做人人爽电影蜜月| 亚洲黄色视屏| 欧美极品在线观看| 精品999日本| 久久se精品一区精品二区| 亚洲尤物在线视频观看| 国产精品99免视看9| 亚洲天堂免费观看| 亚洲精品乱码久久久久久日本蜜臀| 久久人体大胆视频| 亚洲国语精品自产拍在线观看| 麻豆精品传媒视频| 久久99在线观看| 欧美一区二区视频在线观看| 国产精品久久久久久久午夜片| 亚洲男人影院| 亚洲尤物在线| 亚洲经典在线| 亚洲午夜精品在线| 国内视频精品| 亚洲靠逼com| 国产一区二区黄| 欧美大片在线看免费观看| 欧美成人国产一区二区| 在线一区二区日韩| 久久久99精品免费观看不卡| 激情五月综合色婷婷一区二区| 亚洲承认在线| 国产乱码精品一区二区三区不卡| 老牛嫩草一区二区三区日本 | 欧美片第1页综合| 欧美一站二站| 欧美午夜www高清视频| 欧美jizz19hd性欧美| 久久久久国产免费免费| 国产精品视频免费观看| 欧美激情一区二区三区在线| 国产精品免费视频xxxx| 亚洲人被黑人高潮完整版| 国产字幕视频一区二区| 亚洲视频中文字幕| 一本综合久久| 欧美日韩三区| 亚洲精品美女免费| 亚洲免费av片| 欧美刺激性大交免费视频| 男女激情久久| 亚洲精品乱码| 欧美日韩国产美| 日韩午夜在线视频| 国产精品99久久久久久久久久久久| 欧美精选一区| 一区二区欧美激情| 亚洲欧美伊人| 国产在线观看一区| 久久久久久久久综合| 日韩一区二区精品在线观看| 亚洲美女淫视频| 亚洲欧美日韩视频一区| 亚洲日韩欧美视频|