易語言教程其他核心編程_第1頁
易語言教程其他核心編程_第2頁
易語言教程其他核心編程_第3頁
易語言教程其他核心編程_第4頁
易語言教程其他核心編程_第5頁
已閱讀5頁,還剩20頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)

文檔簡介

windows編程簡作者:E-mail:WGhai 所以,才誕生了這個第二版的。將格式從改為pdf格增添了N加了些VB和C++的相關(guān)知識,不僅僅是易語言更好的視覺感受第一節(jié):易語言中APIInterface的縮寫。在win編程中,用到API的頻率很多。問題1:如何用C++編譯器實現(xiàn)stdcall在DLL源代碼中的.def文件中導(dǎo)出,格式為函數(shù)名@n(注:這個n是數(shù)字的代表符號,將在DLL調(diào)用時發(fā)揮作用。)如:問題2:如何在易語言中使用動態(tài)調(diào)用動態(tài)調(diào)用,就是通過API來調(diào)用DLL,調(diào)用相當(dāng)靈活, API第二節(jié):學(xué)習(xí)C++的消息windows在系統(tǒng)工作中,都會傳達(dá)不同的消息。如 MAND消息,當(dāng)系統(tǒng)中 MAND消息發(fā)送, RAM的高字中( 命令的ID號,對菜單來講就是菜單ID ram ram,MSDN的舉例 翻譯為易語言CWindowmyWindow;CWindowmyWindow;如果使用API進(jìn)行窗口投遞,就不是這么簡單了。其中WM_PAINT的10進(jìn)制消息標(biāo)志符為:15消息的方法要用到WINDOWS的消息鉤子,消息鉤子會到后面的兩個參數(shù),句柄,通俗說就是windows在同一個項目中資源的標(biāo)志。★內(nèi)存塊(blockof★GDI對象(GDIobject包括位圖(bitmap),畫刷(brush),元文件(metafile句柄在WIN編程中扮演著重要的角色,可以說在同一個項目里,句柄是唯一的,這就好比進(jìn)程的PID一樣。②動態(tài)調(diào)用DLL,用LoadLibrary()VC++HANDLE(HWND)據(jù)類型,在VB中則為Long數(shù)據(jù)類型。指針在C語言和匯編中使用廣泛,在易語言中,也得到很好的體現(xiàn)。,可以瞬間彈出50個信息框,ShowMessage“參數(shù)”的參()命令來實現(xiàn)子程序指針的應(yīng)用上面這些,都屬于WINDOWSWINDOW不僅僅幾句代碼就能執(zhí)行很多事情,資源也是必不可少的。以上來自《高級Windows'WM_CLOSE的消息值為16補(bǔ)充知識(“1230API之取鼠標(biāo)所在窗口句柄備注:第一個API例程,一句話搞定!還記得易語言為我們提供了一個命令:取鼠標(biāo)所在窗口句柄()嗎?現(xiàn)在,我們用API來搞定它! CreateProcessA創(chuàng)建一個新的進(jìn)程,可以設(shè)置讀寫管道PeekNamedPipe查看管道中的數(shù)據(jù)SECURITY_ATTRIBUTES.nLength=12STARTUPINFO.cb=STARTUPINFO.dwFlags=257STARTUPINFO.wShowWindow=0STARTUPINFO.hStdOutput=hWriteSTARTUPINFO.hStdError=hWrite這里創(chuàng)建出一個新進(jìn)程,然后用closehandle關(guān)閉多余句柄例如CreateProcessA(0,cmd.exe/c”+一個dos命令,0,0,真,0,0,0,STARTUPINFO,CloseHandlee.g:PeekNamedPipe(句柄,0,0,0,長度,0)'兩個變量:句柄和長step2:當(dāng)管道中有數(shù)據(jù)時(此處可以加一個判斷語句,當(dāng)長度(上面的變量)<>0 e.g:(:到文本(文本源代碼管道的應(yīng)用代碼隨手寫的,不規(guī)范,如果命令錯誤(不存在令,或命令失敗)則無回顯易語 位或(, 位與(, 位取反 位異或(, 右移(, 左移(, 如將b移x位結(jié)果為y表示為: 位取反 位異或(1,1)=0,位異或(1,0)=1,位異或(0,0)=0,位異或(0,1)=1,規(guī)則為“同0異#include#includevoidinta=2; //定義一個整型變量a并賦值為2 //對a進(jìn)行位異或運(yùn)算 //輸出一個運(yùn)算結(jié)果a,其值為2,過程如下}2的補(bǔ)碼為 0還是0(前面的一大堆省略了所以輸出的值是十進(jìn) 二進(jìn) 備210000↓↓ 210同0,異1(豎排看那么這里輸出的數(shù)值就是第一節(jié)匯編機(jī)器語 匯編語cmpa,babmova,bb的值送給aret返回主程序nopcalljejz若相等則跳(機(jī)器碼74或0F84)jnejnz若不相等則跳(機(jī)器碼75或0F85)jmp無條件跳(機(jī)器碼EB)jb若小于則跳ja若大于則跳jg若大于則跳jgejljlepoppushMOV傳送字或字節(jié).MOVSX先符號擴(kuò)展,再傳送.MOVZX先零擴(kuò)展,再傳送.PUSH把字壓入堆棧.POP把字彈出堆棧POPADI,SI,BP,SP,BX,DX,CX,AX依次彈出堆棧.POPAD把EDI,ESI,EBP,ESP,EBX,EDX,ECX,EAX依次彈出堆棧.XCHG交換字或字節(jié).(至少有一個操作數(shù)為寄存器,段寄存器不可作為操作數(shù))CMPXCHG比較并交換操作數(shù).(第二個操作數(shù)必須為累加器AL/AX/EAX)XADD先交換再累加.(結(jié)果在第一個操作數(shù)里)XLAT字節(jié)查表轉(zhuǎn)換ADD加法ADC帶進(jìn)位加法.INC加1.AAA加法的ASCII碼調(diào)整.DAA加法的十進(jìn)制調(diào)整.SUB減法.SBB帶借位減法.DEC減1.NEC求反(0減之CMP比較.(兩操作數(shù)作減法,僅修改標(biāo)志位,不回送結(jié)果).AAS減法的ASCII碼調(diào)整.DAS減法的十進(jìn)制調(diào)整.MUL無符號乘法.IMUL整數(shù)乘法以上兩條,結(jié)果回送AHAL(字節(jié)運(yùn)算),DXAX(字運(yùn)算),AAM乘法的ASCII碼調(diào)整.DIV無符號除法.IDIV整數(shù)除法.商回送AL,AH,(字節(jié)運(yùn)算);或商回送AX,余數(shù)回送DX字運(yùn)算).AAD除法的ASCII碼調(diào)整.CBW字節(jié)轉(zhuǎn)換為字.(把AL中字節(jié)的符號擴(kuò)展到AH中去)CWD字轉(zhuǎn)換為雙字.(AX中的字的符號擴(kuò)展到DX中去)CWDE字轉(zhuǎn)換為雙字.(AX中的字符號擴(kuò)展到EAX中去)CDQ雙字?jǐn)U展.(把EAX中的字的符號擴(kuò)展到EDX中去)④其他指令(一部分位運(yùn)算AND與運(yùn)算.OR或運(yùn)算.XOR異或運(yùn)算.NOT取反TEST測試.(兩操作數(shù)作與運(yùn)算,僅修改標(biāo)志位,不回送結(jié)果).SHL邏輯左移.SAL算術(shù)左移SHR邏輯右移SAR算術(shù)右移ROL循環(huán)左移.ROR循環(huán)右移RCL通過進(jìn)位的循環(huán)左移.RCR通過進(jìn)位的循環(huán)右移備注:這些匯編代碼不能夠直接被易語言所識別,在VC++將其轉(zhuǎn)化為十進(jìn)制的字節(jié)集,使用置入代碼()命令。置入代碼({139,68,36,8,61,0,0,16,0,126,8,133,192,116,4,139,0,235,5,184,255,255,255,139,229,93,194,4,0..._讀整型內(nèi)存,整數(shù)型, 地址,整數(shù)139,68,36,8,61,0,0,16,0,126,8,133,192,116,4,139,0,235,5,184,255,255,255,139,229,93,194,4,0(-提供相關(guān)工具--OD面,我們已經(jīng)接觸到了多線程的應(yīng)用(我們面已經(jīng)了解到,一個被多線程調(diào)用的子程序,如果想知道自己是第幾個線程,就可以使用多線程支持庫為我們提供令啟動線程()中的第二個API來實現(xiàn)多線程的代碼如下CloseHandleCreateThread0,0,欲執(zhí)行的子程序,參數(shù)數(shù)據(jù)0,我們可以將這個參數(shù)的數(shù)據(jù)類型改為子程序指針型。 證(無參數(shù),返回值為整型,有緩沖變量證):InitializeCriticalSection( 返回(證刪除進(jìn) 證(有參 DeleteCriticalSection(證 EnterCriticalSection( 退 LeaveCriticalSection(證API()命令,而且還會附帶一個參數(shù)(整數(shù)型)。使用多線程,要注意這一點(diǎn)我們本節(jié),就介紹易語言動態(tài)調(diào)用DLL方法幾則。上面的代碼中,返回值僅可以為整數(shù)型在標(biāo)準(zhǔn)的WINDOWSAPI中,返回值僅可以為整數(shù)型,如果需要返回文本,則需要使用類似API的緩沖區(qū)一樣的寫法。命令即可。在例程5.2中有動態(tài)調(diào)用示例,以及指針文本測試!HOOKWINDOWS受到之前被HOOK(鉤子)到!WH_CALLWNDPROC當(dāng)調(diào)用SendMessage時WH_CALLWNDPROCRET當(dāng)SendMessage的調(diào)用返回時WH_GETMESSAGE當(dāng)調(diào)用GetMessage或PeekMessage時WH_KEYBOARDGetMessagePeekMessage來從消息隊列中查WM_KEYUPWM_KEYDOWNWH_MOUSE當(dāng)調(diào)用GetMessage或PeekMessage來從消息隊列中查詢鼠標(biāo)WH_HARDWARE當(dāng)調(diào)用GetMessage或PeekMessage來從消息隊列種查詢WH_MSGFILTER當(dāng)框、菜單或滾動條要處理一個消息時。該鉤子是WH_SYSMSGFILTER和WH_MSGFILTER一樣,只不過是系統(tǒng)范圍的WH_JOURNALRECORD當(dāng)WINDOWS從硬件隊列中獲得消息時 YBACK當(dāng)一個 當(dāng)關(guān)于WINDOWS外 的按鈕WH_CBT當(dāng)基于計算機(jī)的訓(xùn)練(CBT)發(fā)生WH_FOREGROUNDIDLEWINDOWSWH_DEBUGAPI的系列函數(shù)來實現(xiàn)的。HOOK鉤子,有的只能在自身進(jìn)程中使用,如果想要應(yīng)用到別的地方,還得使用使用到了API函數(shù):安裝全局鉤子代碼SetWindowsHookExWH_CALLWNDPROC,到整數(shù)(&),GetWindowLong(窗口句柄,#GWL_HINSTANCE),GetCurrentThreadId())剛才說到,WH_CALLWNDPROCSendMessage時被觸發(fā),然后進(jìn)入層3、HOOKAPI中,在HOOKAPI后,最好是第一時間作出反映,否則可能出DLL注入方式。6HOOKCallNextHookEx(),如果不用,基本上HOOK就沒有用處了。7、處理子程序需要有四個整數(shù)型參數(shù)hWnd,Msg,ram,lParam,該函數(shù)應(yīng)返回"調(diào)用下個鉤子"的返回值。前言:前面的所有內(nèi)容都作為基礎(chǔ)來了解,看起來好像沒有我自 了命令處理()一樣安全有效()加上延時()API的sleep()舉個例子:在端口掃描器中,使用多線

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論