freepeople性欧美熟妇, 色戒完整版无删减158分钟hd, 无码精品国产vα在线观看DVD, 丰满少妇伦精品无码专区在线观看,艾栗栗与纹身男宾馆3p50分钟,国产AV片在线观看,黑人与美女高潮,18岁女RAPPERDISSSUBS,国产手机在机看影片

正文內(nèi)容

vcapi常用函數(shù)簡單例子大全-資料下載頁

2025-05-29 22:49本頁面
  

【正文】 0。 //應(yīng)用程序?qū)嵗浔蒞inMain函數(shù)傳進(jìn)來 =WinSunProc。 //窗口消息處理函數(shù) =windowclass。 //窗口類名 =NULL。 //窗口菜單名,沒有菜單,為NULL =CS_HREDRAW | CS_VREDRAW。//窗口類型,CS_HREDRAW和CS_VERDRAW 表明 //當(dāng)窗口水平方向垂直方向的寬度變化時(shí)重繪整個(gè)窗口 RegisterClass(amp。wndcls)。 //把窗口信息提交給系統(tǒng),注冊窗口類 HWND hwnd。 //用以存儲(chǔ)CreateWindow函數(shù)所創(chuàng)建的窗口句柄 hwnd=CreateWindow(windowclass,first windows, WS_OVERLAPPEDWINDOW,0,0,600,400,NULL,NULL,hInstance,NULL)。//創(chuàng)建窗口 ShowWindow(hwnd,SW_SHOWNORMAL)。//窗口創(chuàng)建完了,顯示它 UpdateWindow(hwnd)。 //更新窗口,讓窗口毫無延遲的顯示 MSG msg。//消息結(jié)構(gòu)類型 while(GetMessage(amp。msg,NULL,0,0))//獲取消息 { //TranslateMessage(amp。msg)。 //此函數(shù)用于把鍵盤消息(WM_KEYDOWN,WM_KEYUP)轉(zhuǎn)換成字符消息WM_CHAR DispatchMessage(amp。msg)。 //這個(gè)函數(shù)調(diào)用窗口過程處理函數(shù),并把MSG里的信息處理后傳給過程函數(shù)的四個(gè)參數(shù)} return 0。}第三十七個(gè)ReadProcessMemory根據(jù)進(jìn)程句柄讀取相應(yīng)的一段內(nèi)存(讀其它進(jìn)程里的內(nèi)存)函數(shù)定義:BOOL ReadProcessMemory(HANDLE hProcess,PVOID pvAddressRemote,PVOID pvBufferLocal,DWORD dwSize,PDWORD pdwNumBytesRead)??偣菜膫€(gè)參數(shù)第一個(gè)參數(shù)hProcess是遠(yuǎn)程進(jìn)程句柄,被讀取者第二個(gè)pvAddressRemote是遠(yuǎn)程進(jìn)程中內(nèi)存地址。 從具體何處讀取pvBufferLocal是本地進(jìn)程中內(nèi)存地址. 函數(shù)將讀取的內(nèi)容寫入此處,dwSize是要讀取的字節(jié)數(shù)。要讀取多少pdwNumBytesRead是實(shí)際讀取的內(nèi)容(函數(shù)執(zhí)行后,實(shí)際讀了多少字節(jié),將存儲(chǔ)在該變量里)遠(yuǎn)程進(jìn)程的內(nèi)存地址是什么意思呢,比如我現(xiàn)在定義一個(gè)變量a,int a。就是了,大家知道int型是占四個(gè)字節(jié)的,也就是說如果a變量所占的內(nèi)存起始地址是0x1234,那么變量a就占用0x1234,0x1235,0x1236,0x1237這四個(gè)字節(jié),這四個(gè)字節(jié)的內(nèi)容決定了a變量的值。好了知道了這個(gè),我們就來舉個(gè)例子,讀取另一個(gè)進(jìn)程里一個(gè)變量的值:需設(shè)計(jì)兩個(gè)程序,一個(gè)用于讀(Read)一個(gè)用于被讀(BeRead)。那么要如何獲得另一個(gè)進(jìn)程中一個(gè)變量的地址呢?這里我們用一個(gè)簡單的方法,讓另一個(gè)進(jìn)程自己去獲取,然后輸出地址值。被讀的程序代碼如下:假設(shè)該進(jìn)程名為:includeint main(){int a=10。//要讀取的變量。 printf(%x\n,amp。a)。//輸出這個(gè)變量的起始地址,假設(shè)輸出為12ff7c while(1) { Sleep(1000)。 }return 0。}必須先讓這個(gè)程序運(yùn)行,然后根據(jù)輸出的地址值,才能在下面的程序填入地址值。讀取的程序代碼如下:includeincludeincludeint main(){//先要獲取進(jìn)程句柄,如何獲取,參照TerminateProcess函數(shù),結(jié)束一個(gè)進(jìn)程HANDLE ReProcess。PROCESSENTRY32 pe32。=sizeof(pe32)。HANDLE hProcessSnap=CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS,0)。BOOL bMore=::Process32First(hProcessSnap,amp。pe32)。while(bMore){if(strcmp(,)==0)//{ReProcess=::OpenProcess(PROCESS_ALL_ACCESS,FALSE,)。//獲取該進(jìn)程句柄break。}bMore=Process32Next(hProcessSnap,amp。pe32)。}int *ReAddress=(int *)0x12ff7c。//要讀取的內(nèi)存的地址值int *p=new int。 unsigned long size。ReadProcessMemory(ReProcess,ReAddress,p,4,amp。size)。//讀取BeRead進(jìn)程的內(nèi)存printf(%d\n,*p)。//輸出讀取來的值return 0。}第三十八個(gè)WriteProcessMemory根據(jù)進(jìn)程句柄寫入相應(yīng)的一段內(nèi)存(寫入其它進(jìn)程里的內(nèi)存)這個(gè)函數(shù)里的參數(shù)跟ReadProcessMemory函數(shù)參數(shù)意思一樣,只不過一個(gè)是寫,一個(gè)是讀。下面直接舉個(gè)例子,形式跟讀內(nèi)存函數(shù)的例子一樣。被寫的程序代碼如下:假設(shè)該進(jìn)程名為:includeint main(){int a=10。 printf(%x\n,amp。a)。//假設(shè)輸出為12ff7c while(1) { printf(%d\n,a)。//每隔一秒輸出,查看值有沒有改變 Sleep(1000)。 }return 0。}寫入的代碼如下:includeincludeincludeint main(){HANDLE ReProcess。PROCESSENTRY32 pe32。=sizeof(pe32)。HANDLE hProcessSnap=CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS,0)。BOOL bMore=::Process32First(hProcessSnap,amp。pe32)。while(bMore){if(strcmp(,)==0){ReProcess=::OpenProcess(PROCESS_ALL_ACCESS,FALSE,)。break。}bMore=Process32Next(hProcessSnap,amp。pe32)。}int *ReAddress=(int *)0x12ff7c。int *p=new int。*p=300。 unsigned long size。WriteProcessMemory(ReProcess,ReAddress,p,4,amp。size)。return 0。}第三十九個(gè)CreateThread創(chuàng)建一個(gè)線程(多線程)線程是什么意思呢,代碼是由線程來執(zhí)行的,一個(gè)程序默認(rèn)只有一個(gè)線程(主線程),打個(gè)比方,線程就好比一個(gè)人,而不同功能的代碼或函數(shù)就好是一件件不同的事情,如洗碗,洗衣服,擦地。一個(gè)人要把這幾種事情做完,可以有好幾種方案,第一種就是,洗完碗,就去洗衣服,衣服洗完了,再去擦地。第二種就是:洗一分鐘碗,再去洗一分鐘衣服,再去擦一分鐘,然后又去洗一分鐘衣服.......直到做完。好了,現(xiàn)在你可以再創(chuàng)造一個(gè)人幫你做事,創(chuàng)造這個(gè)人后,你就叫他洗衣服,而你就洗碗,這樣兩件事就可以同時(shí)被做了。而這里的創(chuàng)造一個(gè)人指的就是CreateThread函數(shù)。函數(shù)定義:HANDLE CreateThread(LPSECURITY_ATTRIBUTES lpThreadAttributes,DWORD dwStackSize,LPTHREAD_START_ROUTINE lpStartAddress,LPVOID lpParameter,DWORD dwCreationFlags,LPDWORD lpThreadId)。該函數(shù)有六個(gè)參數(shù),第一個(gè)參數(shù)不用管它,填NULL,第二個(gè)參數(shù)dwStackSize用于新線程的初始堆棧大小,默認(rèn)為0,第三個(gè)lpStartAddress填函數(shù)名(指標(biāo)),但這個(gè)函數(shù)必須是這種固定格式的DWORD _stdcall ThreadProc(LPVOID lpParameter),新的線程將會(huì)執(zhí)行這個(gè)函數(shù)里面的代碼,直到函數(shù)結(jié)束,線程死亡。第四個(gè)lpParameter是一自定義參數(shù),用戶可以通過這個(gè)參數(shù),傳遞需要的類型,這個(gè)參數(shù)與線程函數(shù)的參數(shù)相對應(yīng)。第五個(gè)dwCreationFlags填0表示立即執(zhí)行,如果是CREATE_SUSPENDED表示掛起,直到用ResumeThread函數(shù)喚醒。第六個(gè)lpThreadId填NULL就行了?,F(xiàn)舉個(gè)例子,兩個(gè)線程同時(shí)每隔一秒輸出一個(gè)數(shù)字,也就是一秒會(huì)有兩數(shù)字輸出。includeincludeDWORD _stdcall ThreadProc(LPVOID lpParameter)//線程執(zhí)行函數(shù){int si=100。while(si0){printf(子線程輸出數(shù)字:%d\n,si)。Sleep(1000)。}return 0。}int main(){int mi=0。CreateThread(NULL,0,ThreadProc,NULL,0,NULL)。//創(chuàng)建一個(gè)線程,去執(zhí)行ThreadProc函數(shù)while(mi100){printf(主線程輸出數(shù)字:%d\n,mi++)。Sleep(1000)。}return 0。}第四十個(gè)GetCurrentProcessId獲得當(dāng)前進(jìn)程IDDWORD currentPID。currentPID=::GetCurrentProcessId()。//返回進(jìn)程ID號coutcurrentPIDendl。第四十一個(gè)CreateCompatibleDC創(chuàng)建一個(gè)兼容的內(nèi)存設(shè)備上下文(DC)簡單的來說,就是復(fù)制一個(gè)模一樣的DC。就把窗口看成一幅幅圖畫,窗口有大有小,里面的內(nèi)容也不一樣(顏色值),每個(gè)像素點(diǎn)的顏色值可能不一樣,所以就用設(shè)備上下文來描述每個(gè)窗口的信息,對于DC具體是怎樣描述設(shè)備上下文的,我們暫時(shí)還不需要知道,只要了解這個(gè)概念就行了。這個(gè)窗口信息,獲得一個(gè)窗口設(shè)備上下文,就用GetDC函數(shù)就行了,如HDC hDC=GetDC(hWnd)。而CreateCompatibleDC的作用是根據(jù)一個(gè)設(shè)備上下文,再創(chuàng)建一個(gè)兼容的設(shè)備上下文,如 HDC mDC=CreateCompatibleDC(hDC)。這樣mDC里的信息就跟hDC里的一樣,那這有什么用呢?這個(gè)將會(huì)在后面的BitBltl輸出一個(gè)位圖(合并兩個(gè)DC)函數(shù)里會(huì)用到。第四十二個(gè)GetObject獲取一個(gè)對象信息(如位圖,圖標(biāo),光標(biāo))函數(shù)定義:int GetObject(HGDIOBJ hgdiobj, int cbBuffer, LPVOID lpvObject);第一個(gè)參數(shù)hgdiobj是對象句柄,第二個(gè)參數(shù)cbBuffer是待寫入lpvObject指針指向緩存區(qū)數(shù)據(jù)大小,第三個(gè)參數(shù)lpvObject是一個(gè)指針,指向一個(gè)緩存區(qū)。這里舉一個(gè)獲取位圖的信息,獲取位圖的大小,輸出位圖的寬高includeincludeint main(){BITMAP bmInfo。//這個(gè)結(jié)構(gòu)存儲(chǔ)位圖信息HBITMAP bmp。bmp=(HBITMAP)LoadImage(NULL,e:\\,IMAGE_BITMAP,0,0,LR_LOADFROMFILE)。GetObject(bmp,sizeof(BITMAP),amp。bmInfo)。printf(位圖寬:%d,位圖高:%d\n,)。return 0。}第四十三個(gè)BitBlt在窗口輸出一個(gè)位圖其實(shí)倒不如說這個(gè)BitBlt函數(shù)是拷貝一個(gè)設(shè)備上下文(DC),或者合并兩個(gè)窗口,再延伸一下,合并兩個(gè)圖片?也并無不可,往大了說,窗口難道不是圖片嗎?用截屏軟件,把窗口截成圖片,這樣窗口便成了圖片??赡苡悬c(diǎn)瞎說,大家還是按照標(biāo)準(zhǔn)來吧,反正,你只要掌握這個(gè)函數(shù)就行了,而且這個(gè)概念也不會(huì)有什么影響,那就足夠了。BitBlt的作用跟把兩幅圖片合在一起一樣,合并兩幅圖片??赡軆煞鶊D片大小不一樣也可以合并,但合并DC就不行了,必須兩個(gè)信息一樣的DC才可以合并,那要如何確保兩個(gè)DC一樣呢?這就要用到CreateCompatibleDC函數(shù)了。函數(shù)定義:BOOL BitBlt(HDC hdcDest,int nXDest,int nYDest,int nWidth,int nHeight,HDC hdcSrc,int nXSrc,int nYSrc,DWORD dwRop);第一個(gè)參數(shù)hdcDest是原DC句柄,被覆蓋的DC,nXdest,nYDest,nWidth,nHeight這四個(gè)參數(shù),指明了一個(gè)矩形,覆蓋原DC哪塊區(qū)域。第六個(gè)參數(shù)hdcSrc是覆蓋的DC句柄,nXSrc,nYSrc參數(shù)指明從哪里開始覆蓋。(覆蓋DC的左上角),第九個(gè)參數(shù)dwPop表示以何種方式覆蓋。因?yàn)檫@里我們只要輸出一個(gè)位圖,所以用SRCCOPY,直接覆蓋。好了,直接舉個(gè)例子,在窗口輸出一副圖片。為了方便,我們直接在記事本窗口輸出位圖,先運(yùn)行一個(gè)窗口名為 記事本記事本窗口程序。includeincludeint main(){BITMAP bmInfo。//這個(gè)結(jié)構(gòu)存儲(chǔ)位圖信息HBITMAP bmp。bmp=(HBITMAP)LoadImage(NULL,e:\\,IMAGE_BITMAP,0,0,L
點(diǎn)擊復(fù)制文檔內(nèi)容
化學(xué)相關(guān)推薦
文庫吧 www.dybbs8.com
備案圖鄂ICP備17016276號-1