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

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>
            久久蜜桃精品| 久热精品视频在线免费观看| 欧美日韩一区二区在线播放| 亚洲美女黄色片| 99国产精品99久久久久久粉嫩| 欧美午夜宅男影院在线观看| 西西人体一区二区| 久久国产视频网| 亚洲国产欧美国产综合一区| 亚洲国产成人av好男人在线观看| 欧美承认网站| 午夜精品福利一区二区三区av | 亚洲国产精品成人综合| 欧美激情视频给我| 欧美日韩在线视频观看| 羞羞视频在线观看欧美| 久久夜色精品国产| 亚洲一区二区三区四区视频| 亚洲欧美在线免费| 亚洲日韩成人| 亚洲综合首页| 最新国产精品拍自在线播放| 亚洲视频免费看| 精品动漫3d一区二区三区免费版| 亚洲人成久久| 国产一区日韩一区| 亚洲另类自拍| 精品二区久久| 亚洲无线观看| 日韩亚洲欧美成人| 欧美在线网站| 一区二区三区欧美激情| 久久精品国产99国产精品| 一区二区欧美激情| 久久亚洲私人国产精品va| 亚洲综合社区| 欧美另类变人与禽xxxxx| 久久久久一区| 国产精品日日做人人爱| 亚洲国产一区视频| 国产亚洲网站| 亚洲午夜一二三区视频| 亚洲精品在线看| 久久久久国产一区二区三区四区| 亚洲中字在线| 欧美日韩mv| 欧美国产在线电影| 国产综合色在线| 亚洲网站视频| 亚洲欧美激情在线视频| 欧美日韩免费观看一区三区 | 中文欧美在线视频| 欧美黄网免费在线观看| 欧美91福利在线观看| 国产日韩欧美在线看| 中文欧美在线视频| 亚洲视频一区二区免费在线观看| 欧美国产精品一区| 欧美国产精品日韩| 亚洲区一区二区三区| 美女黄色成人网| 激情成人综合| 久久日韩粉嫩一区二区三区| 久久久噜噜噜久久久| 国产亚洲福利| 久久成人精品视频| 久久婷婷国产麻豆91天堂| 国产一区二区看久久| 午夜精品在线看| 久久精品一区二区国产| 国产色视频一区| 欧美在线看片a免费观看| 久久久夜夜夜| 亚洲高清网站| 欧美伦理影院| 亚洲午夜国产一区99re久久| 欧美亚洲尤物久久| 国产一区二区精品| 久久永久免费| 亚洲激情视频网站| 亚洲一区二区三区乱码aⅴ蜜桃女 亚洲一区二区三区乱码aⅴ | 欧美91大片| 一区二区三区免费网站| 国产精品丝袜久久久久久app| 亚洲欧美制服中文字幕| 久久一区二区三区四区| 亚洲精品国产日韩| 国产精品v日韩精品| 欧美在线黄色| 亚洲第一黄网| 欧美一级理论片| 亚洲第一精品久久忘忧草社区| 欧美激情无毛| 欧美一区二区在线播放| 亚洲黑丝一区二区| 销魂美女一区二区三区视频在线| 伊人色综合久久天天| 欧美激情一二三区| 亚洲欧美日韩天堂| 欧美激情按摩| 午夜精品区一区二区三| 在线观看91精品国产入口| 欧美日韩一区自拍| 久久久精品一区二区三区| 亚洲精品午夜| 欧美成人精品1314www| 亚洲女人av| 亚洲激情一区二区| 国产日韩欧美一二三区| 欧美福利视频网站| 久久激情综合| 在线午夜精品自拍| 亚洲国产精品va在线看黑人动漫| 亚洲欧美激情在线视频| 亚洲毛片av| 在线精品视频一区二区| 国产模特精品视频久久久久| 欧美丰满高潮xxxx喷水动漫| 性色一区二区三区| 在线午夜精品自拍| 亚洲区中文字幕| 免费看成人av| 久久久久久网| 欧美在线免费| 亚洲欧美久久久久一区二区三区| 亚洲啪啪91| 亚洲缚视频在线观看| 国产一区二区三区网站| 国产精品尤物| 国产精品久久777777毛茸茸| 亚洲性视频网站| 9l国产精品久久久久麻豆| 欧美韩国在线| 欧美成人免费在线观看| 美女精品国产| 久久综合给合久久狠狠狠97色69| 久久国产精品久久w女人spa| 亚洲欧美成人一区二区三区| 亚洲一品av免费观看| 一二三区精品福利视频| 日韩写真在线| 一本色道久久加勒比88综合| 99国产精品视频免费观看| 亚洲精品一区二区三区婷婷月| 亚洲国产日本| 亚洲精品综合精品自拍| 亚洲精品日韩综合观看成人91| 亚洲人成在线播放网站岛国| 亚洲美女精品久久| 一区二区三区日韩精品视频| 亚洲视频一区二区在线观看| 亚洲图片欧美午夜| 亚洲欧美成人一区二区三区| 午夜精品三级视频福利| 久久精品在线观看| 麻豆av福利av久久av| 欧美高清视频在线| 亚洲人成人77777线观看| 日韩午夜黄色| 亚洲综合欧美日韩| 欧美自拍丝袜亚洲| 美女任你摸久久| 欧美日韩国内| 国产在线成人| 亚洲精品一区二区三| 9久草视频在线视频精品| 亚洲一区制服诱惑| 久久久久久久精| 欧美福利视频网站| 亚洲视频在线二区| 久久九九电影| 欧美连裤袜在线视频| 国产日韩欧美一二三区| 亚洲人成啪啪网站| 午夜在线观看免费一区| 欧美aa在线视频| 在线亚洲精品福利网址导航| 欧美一激情一区二区三区| 欧美www视频| 国产农村妇女精品| 亚洲经典三级| 欧美一区二区精品在线| 亚洲福利视频网站| 午夜精品久久久久久99热| 免费久久99精品国产自| 国产精品裸体一区二区三区| 激情综合自拍| 亚洲综合另类| 亚洲人成亚洲人成在线观看| 午夜精品久久久久久| 欧美日韩免费观看一区=区三区| 韩国久久久久| 欧美一级专区免费大片| 亚洲久久一区二区| 久久久精品日韩| 国产精品视频一区二区三区| 一本色道久久99精品综合| 奶水喷射视频一区| 欧美综合激情网| 国产精品视频久久一区|