• <tr id="yyy80"></tr>
  • <sup id="yyy80"></sup>
  • <tfoot id="yyy80"><noscript id="yyy80"></noscript></tfoot>
  • 99热精品在线国产_美女午夜性视频免费_国产精品国产高清国产av_av欧美777_自拍偷自拍亚洲精品老妇_亚洲熟女精品中文字幕_www日本黄色视频网_国产精品野战在线观看 ?

    基于SPY++的軟件功能擴(kuò)展的研究

    2013-04-26 02:43:06楊超
    計(jì)算機(jī)光盤軟件與應(yīng)用 2013年1期
    關(guān)鍵詞:句柄線程進(jìn)程

    楊超

    摘要:利用微軟Visual Studio 6.0的工具軟件SPY++找出要操作的運(yùn)行軟件窗口的圖形樹(shù),最終找出要操作的控件ID,再使用VC++ 6.0建立了一個(gè)軟件向該控件發(fā)送消息和模擬要操作控件的事件,最終實(shí)現(xiàn)現(xiàn)有軟件功能擴(kuò)充。

    關(guān)鍵詞:進(jìn)程;線程;句柄;SPY++

    中圖分類號(hào):TP312 文獻(xiàn)標(biāo)識(shí)碼:A 文章編號(hào):1007-9599 (2013) 01-0189-02

    進(jìn)程間通信的主要目的是實(shí)現(xiàn)同一計(jì)算機(jī)系統(tǒng)內(nèi)部的相互協(xié)作的進(jìn)程之間的數(shù)據(jù)共享與信息交換,由于這些進(jìn)程處于同一軟件和硬件環(huán)境下,利用操作系統(tǒng)提供的編程接口,用戶可以方便地在程序中實(shí)現(xiàn)這種通信。

    進(jìn)程是裝入內(nèi)存并準(zhǔn)備執(zhí)行的程序,每個(gè)進(jìn)程都有自己的虛擬地址空間,由代碼、數(shù)據(jù)以及它可利用的系統(tǒng)資源組成。多進(jìn)程/多線程是Windows操作系統(tǒng)的一個(gè)基本特征。Microsoft Win32應(yīng)用編程接口(API)提供了大量支持應(yīng)用程序間數(shù)據(jù)共享和交換的機(jī)制,這些機(jī)制行使的活動(dòng)稱為進(jìn)程間通信( IPC),通信的目的是在不同進(jìn)程間進(jìn)行數(shù)據(jù)共享和數(shù)據(jù)交換。

    如何進(jìn)行進(jìn)程間通信為現(xiàn)有軟件的功能進(jìn)行擴(kuò)充,已成為應(yīng)用開(kāi)發(fā)中的一個(gè)常見(jiàn)問(wèn)題,下面本文將通過(guò)Windows進(jìn)程通信的API來(lái)對(duì)一個(gè)視頻格式軟件——視頻轉(zhuǎn)換大師的多個(gè)視頻文件轉(zhuǎn)換的批處理功能進(jìn)行了擴(kuò)充。

    1 相關(guān)的技術(shù)

    1.1 Spy++功能

    Spy++是一個(gè)基于Win32的實(shí)用工具,它提供系統(tǒng)的進(jìn)程、線程、窗口和窗口消息的圖形視圖。使用 Spy++ 可以執(zhí)行下列操作: 顯示系統(tǒng)對(duì)象(包括進(jìn)程、線程和窗口)之間關(guān)系的圖形樹(shù);搜索指定的窗口、線程、進(jìn)程或消息;查看選定的窗口、線程、進(jìn)程或消息的屬性;直接從視圖中選擇窗口、線程、進(jìn)程或消息;通過(guò)鼠標(biāo)定位,使用查找程序工具選擇窗口;使用復(fù)雜的消息日志選擇參數(shù)設(shè)置消息選項(xiàng)。 提示使用 Spy++ 時(shí),在許多實(shí)例中都可以單擊鼠標(biāo)右鍵顯示常用命令的彈出式菜單。

    1.2 有關(guān)Windows API的使用

    1.2.1 SendMessage

    函數(shù)將指定的消息發(fā)送到指定窗口,由窗口調(diào)用程序,直至窗口程序處理完消息再返回。

    LRESULT SendMessage(HWND hWnd,UINT Msg,WPARAM wParam,LPARAM IParam);

    參數(shù):

    hWnd:其窗口程序?qū)⒔邮障⒌拇翱诘木浔?。如果此參?shù)為HWND_BROADCAST,則消息將被發(fā)送到系統(tǒng)中所有頂層窗口。

    Msg:指定被發(fā)送的消息。

    wParam:指定附加的消息特定信息。

    IParam:指定附加的消息特定信息。

    返回值:返回值指定消息處理的結(jié)果,依賴于所發(fā)送的消息。

    1.2.2 findwindow

    HWND FindWindow( LPCSTR lpClassName, LPCSTR lpWindowName );

    參數(shù):

    lpClassName:指向一個(gè)以NULL結(jié)尾的、用來(lái)指定類名的字符串或一個(gè)可以確定類名字符串的原子。這個(gè)原子(一個(gè)16bit的值),必須被放置在lpClassName的低位字節(jié)中,lpClassName的高位字節(jié)置零。如果該參數(shù)為NULL時(shí),將會(huì)尋找任何與lpWindowName參數(shù)匹配的窗口。

    lpWindowName:指向一個(gè)以NULL結(jié)尾的、用來(lái)指定窗口名(即窗口標(biāo)題)的字符串;如果此參數(shù)為NULL,則匹配所有窗口名。

    返回值:

    如函數(shù)執(zhí)行成功,則返回相應(yīng)的窗口句柄;執(zhí)行失敗,則返回 NULL 。

    1.2.3 CreateThread

    函數(shù)原型如下:

    HANDLE CreateThread(

    LPSECURITY_ATTRIBUTES lpThreadAttributes, // 線程安全屬性

    DWORD dwStackSize, // 堆棧大小

    LPTHREAD_START_ROUTINE lpStartAddress, // 線程函數(shù)

    LPVOID lpParameter, // 線程參數(shù)

    DWORD dwCreationFlags, // 線程創(chuàng)建屬性

    LPDWORD lpThreadId // 線程ID

    );

    參數(shù):

    lpThreadAttributes:指向SECURITY_ATTRIBUTES型態(tài)的結(jié)構(gòu)的指針。在Windows NT中,NULL使用默認(rèn)安全性,不可以被子線程繼承。

    dwStackSize:設(shè)置初始棧的大小,以字節(jié)為單位,如果為0,那么默認(rèn)將使用與調(diào)用該函數(shù)的線程相同的??臻g大小。

    lpStartAddress:指向線程函數(shù)的指針,即函數(shù)名稱。

    lpParameter:向線程函數(shù)傳遞的參數(shù),是一個(gè)指向結(jié)構(gòu)的指針,不需傳遞參數(shù)時(shí),為NULL。

    dwCreationFlags:線程標(biāo)志。

    lpThreadId:保存新線程的id。

    返回值:

    函數(shù)成功,返回線程句柄;函數(shù)失敗,返回NULL。

    2 軟件實(shí)現(xiàn)

    2.1 查看指定窗口句柄

    運(yùn)行視頻轉(zhuǎn)換大師軟件,將程序運(yùn)行到要進(jìn)行的操作界面,然后運(yùn)行VC++ 6.0中spy++工具軟件,打開(kāi)spy++窗口中的樹(shù),找到要操作的窗口結(jié)點(diǎn),點(diǎn)擊旁邊的加號(hào)打開(kāi)窗口樹(shù),選擇相應(yīng)控件句柄進(jìn)行高亮顯示,對(duì)要操作控件右鍵點(diǎn)擊屬性,打開(kāi)屬性窗口。

    本次操作將獲取得到文件打開(kāi)對(duì)話框的文件名輸入框的控件ID和打開(kāi)按鈕的控件ID,現(xiàn)有視頻轉(zhuǎn)換軟件窗口內(nèi)的列表框的ID、文件名輸入框ID和批處理按鈕的ID。

    2.2 通過(guò)API實(shí)現(xiàn)進(jìn)程間通信

    通過(guò)上面步驟獲取的控件ID號(hào),在程序中使用GetDlgItem方法將控件ID轉(zhuǎn)換為當(dāng)前運(yùn)行軟件窗口的控件句柄,有了這個(gè)句柄就可以通過(guò)Message操縱控件,模擬控件的事件,調(diào)用相應(yīng)的事件過(guò)程。

    2.2.1 加載一個(gè)可多選的文件對(duì)話框

    此過(guò)程包含兩個(gè)方面的操作,建立一個(gè)文件打開(kāi)對(duì)話框?qū)ο?,并以模態(tài)方式打開(kāi)。打開(kāi)后,新建一個(gè)伺服線程去通過(guò)判斷打開(kāi)對(duì)話框的打開(kāi)按鈕是否存在來(lái)取得文件選擇框的內(nèi)容。實(shí)現(xiàn)調(diào)用打開(kāi)對(duì)話框的核心內(nèi)容如下:

    3 結(jié)束語(yǔ)

    跨進(jìn)程通信的方式還有許多, 這些方式中有的需要同一臺(tái)電腦,比如文件映射、共享內(nèi)存、郵件槽、剪貼板、動(dòng)態(tài)數(shù)據(jù)交換、對(duì)象連接與嵌入、動(dòng)態(tài)連接庫(kù)、WM_COPYDATA,有的則是要在不同電腦的遠(yuǎn)程通信有管道、遠(yuǎn)程過(guò)程調(diào)用、NetBios函數(shù)、Sockets,本文所實(shí)現(xiàn)的操作方式屬于前一種方式。

    通過(guò)上述操作和程序編寫最后達(dá)到視頻轉(zhuǎn)換大師軟件批處理功能的擴(kuò)充,在實(shí)際操作中進(jìn)行過(guò)最多一次傳送過(guò)兩百多個(gè)文件,共計(jì)轉(zhuǎn)換過(guò)四千多個(gè)視頻文件操作,并最終將這些文件成功轉(zhuǎn)換。但是在調(diào)試中發(fā)現(xiàn)了一個(gè)小問(wèn)題,即模擬批處理操作按鈕點(diǎn)擊事件時(shí),需模擬兩次,否則就會(huì)有文件遺失,不能發(fā)送到指定窗口,兩次模擬后可正確無(wú)誤發(fā)送通信。

    參考文獻(xiàn):

    [1]Windows核心編程(第5版).北京:清華大學(xué)出版社,2008,9:46,128,626.

    [2]Spy++的使用方法及下載 [EB/OL].

    猜你喜歡
    句柄線程進(jìn)程
    債券市場(chǎng)對(duì)外開(kāi)放的進(jìn)程與展望
    編譯技術(shù)綜述
    高校圖書館持久標(biāo)識(shí)符應(yīng)用研究
    編譯程序語(yǔ)法分析句柄問(wèn)題分析與探討
    淺談linux多線程協(xié)作
    MFC應(yīng)用程序多線程混合顯示界面方法研究
    社會(huì)進(jìn)程中的新聞學(xué)探尋
    我國(guó)高等教育改革進(jìn)程與反思
    Linux僵死進(jìn)程的產(chǎn)生與避免
    Linux線程實(shí)現(xiàn)技術(shù)研究
    绥芬河市| 鄂温| 东港市| 罗山县| 枣阳市| 麟游县| 喀什市| 怀化市| 大丰市| 嵊州市| 都兰县| 博乐市| 兴义市| 西青区| 庆元县| 沙河市| 丹东市| 萨嘎县| 东海县| 汤原县| 通化县| 青海省| 唐山市| 昔阳县| 南投县| 汤原县| 上虞市| 布拖县| 高安市| 中宁县| 会理县| 临夏市| 图木舒克市| 宣城市| 天祝| 肃北| 沅陵县| 玉溪市| 南开区| 宁化县| 苏尼特左旗|