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

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~19sex高清播放| 欧美亚洲在线视频| 久久综合伊人| 久久精品在线| 久久久久久久尹人综合网亚洲| 亚洲精品一区久久久久久| 亚洲高清不卡| 激情久久五月| 狠狠久久婷婷| 欧美精品三区| 欧美国产精品v| 亚洲午夜久久久| a4yy欧美一区二区三区| 亚洲视频欧美在线| 欧美一区二区日韩一区二区| 亚洲视频一区二区| 欧美性天天影院| 国产精品区一区二区三区| 国产一区二区三区观看| 亚洲日本中文| 久久99在线观看| 亚洲精品乱码久久久久| 亚洲一区二区三区三| 另类成人小视频在线| 国产精品免费观看视频| 亚洲人成网站在线播| 欧美在线观看天堂一区二区三区| 欧美成人精品在线观看| 一区二区三区欧美激情| 免费成人av资源网| 国产一区日韩欧美| 亚洲在线播放电影| 亚洲精品欧美极品| 欧美高清你懂得| 在线不卡视频| 久久免费视频观看| 一区二区激情| 欧美日本不卡视频| 亚洲激情精品| 美女尤物久久精品| 久久大综合网| 国产亚洲人成a一在线v站| 亚洲欧美日韩天堂| 一区二区日韩免费看| 欧美日本在线视频| 亚洲激情影视| 久久深夜福利免费观看| 亚洲图片在线观看| 欧美日韩免费在线观看| 亚洲欧洲美洲综合色网| 久久久久久尹人网香蕉| 国产精品欧美久久久久无广告| 一区免费视频| 亚洲一区二区三区乱码aⅴ蜜桃女 亚洲一区二区三区乱码aⅴ | 欧美大片在线影院| 久久国产精品99精品国产| 国产精品久久久久久超碰| 亚洲一区二区毛片| 亚洲视频综合| 国产精品私房写真福利视频| 亚洲欧美在线免费| 亚洲男女自偷自拍图片另类| 国产欧美精品一区| 久久蜜桃精品| 免费欧美在线| 亚洲天堂av图片| 亚洲一品av免费观看| 国产欧美欧美| 媚黑女一区二区| 欧美日韩mv| 欧美一级网站| 老司机一区二区| 99v久久综合狠狠综合久久| 日韩一区二区久久| 国产日韩av一区二区| 欧美成人午夜激情| 欧美日韩在线三区| 久久久久**毛片大全| 欧美高清视频| 欧美一区二区三区免费大片| 欧美在线999| 亚洲精品美女| 亚洲综合色婷婷| 在线精品国产欧美| 中文精品在线| 亚洲国产精品黑人久久久| 99视频超级精品| 国内精品99| 9久re热视频在线精品| 黑人巨大精品欧美一区二区| 亚洲国产日韩欧美在线99| 欧美吻胸吃奶大尺度电影| 久久久久久久一区二区| 欧美日韩国产综合网| 久久在线免费观看视频| 国产精品theporn88| 蜜桃精品一区二区三区 | 欧美日韩一区二区在线观看视频| 亚洲欧美日韩精品综合在线观看| 久久久噜噜噜久噜久久| 一区二区三区欧美日韩| 久久九九精品99国产精品| 午夜精品成人在线| 国产麻豆午夜三级精品| 亚洲第一区在线观看| 国产精品主播| 日韩写真视频在线观看| 在线精品视频在线观看高清| 亚洲一本视频| 9i看片成人免费高清| 久久久精品一区二区三区| 香蕉久久国产| 国产精品二区在线| 亚洲欧洲一区二区天堂久久 | 亚洲在线观看| 欧美人成在线| 欧美黄色成人网| 狠狠做深爱婷婷久久综合一区| 亚洲午夜黄色| 亚洲专区免费| 欧美丝袜一区二区三区| 亚洲国产精品成人综合色在线婷婷| 国产视频在线观看一区二区三区| 在线视频精品一区| 在线中文字幕不卡| 欧美三日本三级少妇三2023| 亚洲精品影院在线观看| 一区二区精品国产| 欧美日韩精品免费在线观看视频| 亚洲激情女人| 一本久道久久综合婷婷鲸鱼| 欧美日韩国产欧| 日韩一级片网址| 欧美一级视频免费在线观看| 国产欧美日韩不卡免费| 欧美一二三视频| 久久人人九九| 亚洲国产一区二区精品专区| 欧美成人免费小视频| 亚洲成色777777女色窝| 亚洲精品日本| 欧美日韩午夜激情| 亚洲特级片在线| 欧美一级夜夜爽| 在线观看久久av| 欧美福利视频| 亚洲手机成人高清视频| 久久久亚洲综合| 亚洲精品一区二区三区四区高清 | 亚洲激情视频网站| 欧美日韩成人| 亚洲一区一卡| 美日韩丰满少妇在线观看| 日韩视频免费在线| 国产精品欧美风情| 另类天堂av| 国产精品99久久久久久久久久久久| 欧美在线观看一二区| 亚洲国产一区二区三区高清| 欧美手机在线视频| 久久国内精品视频| 亚洲三级色网| 久久九九免费视频| 欧美成人国产va精品日本一级| 宅男精品视频| 国产视频精品xxxx| 欧美激情第三页| 欧美一区二区福利在线| 亚洲韩国日本中文字幕| 性欧美videos另类喷潮| 亚洲激情视频在线观看| 国产美女精品免费电影| 欧美高清视频一区二区| 久久福利精品| 亚洲乱码国产乱码精品精98午夜 | 日韩亚洲视频在线| 国产一区二区三区奇米久涩 | 欧美国产第一页| 欧美一区精品| 一区二区国产在线观看| 欧美国产在线电影| 久久久精品国产一区二区三区 | 亚洲免费网站| 91久久精品日日躁夜夜躁欧美 | 国产精品亚洲综合天堂夜夜| 男同欧美伦乱| 欧美中文在线观看| 亚洲午夜未删减在线观看| 亚洲第一主播视频| 久久香蕉国产线看观看av| 欧美影院成年免费版| 亚洲欧美资源在线| 一区二区三区欧美激情| 亚洲精品乱码| 亚洲美女毛片|