亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關于我們
? 蟲蟲下載站

?? 12.txt

?? 介紹VB里的各種控件的使用方法,窗口控制,圖像編程以及OCX等內容,還提供了一個API集供參考.
?? TXT
?? 第 1 頁 / 共 2 頁
字號:
UINT uSize // size of directory buffer
); // 若成功,則傳回目錄的字元數
VB的宣告(API檢視員)
Declare Function GetWindowsDirectory Lib "kernel32" Alias _
"GetWindowsDirectoryA" (ByVal lpBuffer As String, ByVal nSize As Long) _
As Long
我們將之更改為
Declare Function GetWindowsDirectory Lib "kernel32" Alias _
"GetWindowsDirectoryA" ( lpBuffer As Byte, ByVal nSize As Long) As Long
----------------------------------------------------------------------------- 
范例四
***************************************************************************** 
Dim n as Long
Dim Buff() as Byte
Dim StrA as String
Buff = space(256)
n=GetWindowsDirectory(Buff(0), 256)
Buff = Leftb(Buff, n)
StrA = StrConv(Buff, vbUniCode) 'StrA便是Windows所在目錄
***************************************************************************** 
在范例四中,GetWindowsDirectory()傳入的第一個叁數Buff(0)便是這陣列的起始 Byte
,因VB 宣告成lpBuffer As Byte,故傳過去的是ByRef Buff(0)的位址,當然了,你也
可以呼叫成n=GetWindowsDirectory(Buff(1), 256),只是傳回值是填在Buff(1) to
Buff(n),而Buff(0)則仍為起始的Space Character(32),因為該API傳回值是字元個數
,再加上存於Buff中的是Byte Array故,使用Leftb()去除多出的byte,再用 StrConv將
Byte Array轉成Unicode的字串。比照范例二的作法,我們也可以將Byte Array 改成以
String的方式來做,二者可做一比較,誰比較好或比較順暢,那見人見智,不過可以肯
定的是,如果傳的值是Binary的值,那麼使用Byte Array來做才對,因用 String來傳的
話,會經過轉換成UniCode的步驟,這中間會發生什麼事,沒人知道。


六、CallBack Function的作法
VB的使用者通常對於這個名詞有著多多少少的疑惑,或稱之為"哭爸"Function,而 VB5
使用手冊使用Window Procedure來說明,除非對Window 系統有一些了解,否則可能令人
更不知所云;我使用另一個例子來說明,那便是KeyBoard Hook。什麼是KeyBoard Hook
呢,簡言之便是按鍵盤時,便會自動執行某一段Function的功能,就好比Dos時代的攔
截中斷向量一般。讓我們先看一下設定Hook的宣告吧。
----------------------------------------------------------------------------- 
HHOOK SetWindowsHookEx(
int idHook, // type of hook to install
HOOKPROC hkprc, // address of hook procedure
HINSTANCE hMod, // handle of application instance
DWORD dwThreadID // identity of thread to install hook for
);
Declare Function SetWindowsHookEx Lib "user32" Alias SetWindowsHookExA" _
(ByVal idHook As Long, _
ByVal lpfn As Long, _
ByVal hmod As Long, _
ByVal dwThreadId As Long) As Long
-----------------------------------------------------------------------------
Hook有很多種,如KeyBoard Hook, Mouse Hook, JournalRecord Hook等,所以第一個
叁數指明了要哪一種Hook,第二個叁數便是Hook Procedure所在,也就是方才所說 "自
動執行某一段Function的功能"中的那一個Function,這個Function的名稱可以隨意給定
,但有一定的叁數傳遞規則,例如:
hnexthookproc = SetWindowsHookEx(WH_KEYBOARD, _
AddressOf MyKBHFunc, App.Hinstance, 0)
如此設定則每當按任一個鍵時,程式自動會去執行 MyKBHFunc。這個Hook Function 是
由我們所定義,但是它是由Window自動去呼叫,而不是由我們的程式呼叫,這類的
Function就叫CallBack Function。
以上面的例子來說,這個CallBack Function定義如下:
----------------------------------------------------------------------------- 
Public Function MyKBHFunc(ByVal iCode As Long, _
ByVal wParam As Long, ByVal lParam As Long) As Long
MyKBHFunc = 0
If iCode < 0 Then
MyKBHFunc = CallNextHookEx(hnexthookproc, iCode, wParam, lParam)
Exit Function
End If
'偵測 有沒有按到PrintScreen鍵
If wParam = vbKeySnapshot Then
MyKBHFunc = 1
Debug.Print "haha"
End If
End Function
----------------------------------------------------------------------------- 
這個KeyBoard Hook Function的目的主要是想攔截有沒有按到Print Screen這個鍵,這
個鍵不會在Form的KeyDown, KeyPress, KeyUp Event中作用,所以只好透過KeyBoa rd 
Hook去攔截。而CallBack Function放的位置有規定,一個是要與呼叫SetWindowsHo 
okEx() 的地方在同樣的一個Project,另外,它只能存在於.BAS檔,不能放在其他地方。
KeyBoard Hook的程式於范五。
范例五
***************************************************************************** 
'以下程式於Hook.bas
Declare Function SetWindowsHookEx Lib "user32" Alias _
"SetWindowsHookExA" (ByVal idHook As Long, ByVal lpfn As Long, _
ByVal hmod As Long, ByVal dwThreadId As Long) As Long
Declare Function UnhookWindowsHookEx Lib "user32" _
(ByVal hHook As Long) As Long
Declare Function CallNextHookEx Lib "user32" (ByVal hHook As Long, _
ByVal ncode As Long, ByVal wParam As Long, lParam As Any) As Long
Public hnexthookproc As Long
Public Const HC_ACTION = 0
Public Const WH_KEYBOARD = 2
Public Sub UnHookKBD()
If hnexthookproc <> 0 Then
UnhookWindowsHookEx hnexthookproc
hnexthookproc = 0
End If
End Sub
Public Function EnableKBDHook()
If hnexthookproc <> 0 Then
Exit Function
End If
hnexthookproc = SetWindowsHookEx(WH_KEYBOARD, AddressOf _
MyKBHFunc, App.Hinstance, 0)
If hnexthookproc <> 0 Then
EnableKBDHook = hnexthookproc
End If
End Function
Public Function MyKBHFunc(ByVal iCode As Long, _
ByVal wParam As Long, ByVal lParam As Long) As Long
'這三個叁數是固定的,不能動,而MyKBHFunc這個名稱只要和
'SetWindowsHookex()中 AddressOf後的名稱一樣便可,不一定叫什麼
MyKBHFunc = 0
If iCode < 0 Then
MyKBHFunc = CallNextHookEx(hnexthookproc, iCode, wParam, lParam)
Exit Function
End If
If wParam = vbKeySnapshot Then '偵測 有沒有按到PrintScreen鍵
MyKBHFunc = 1
Debug.Print "haha"
End If
End Function
'以下程式於Form
Private Sub Form_Load()
Call EnableKBDHook
End Sub
Private Sub Form_Unload(Cancel As Integer)
Call UnHookKBD
End Sub
***************************************************************************** 
七、自訂型態的傳遞
因這只要用ByRef的方式來做就沒有什麼大的問題,故不做說明。
八、綜合應用
我們再以一個實例來說明Win API在VB5中呼叫的技巧。有一個函式叫CopyMemory 的宣告
如下:
----------------------------------------------------------------------------- 
Declare Sub CopyMemory Lib "KERNEL32" Alias "RtlMoveMemory" ( _
lpvDest As Any, lpvSource As Any, ByVal cbCopy as Long)
----------------------------------------------------------------------------- 
這個函式可以將 lpvDest的momory copy 到lpvSource上去,cbCopy則代表要copy 多少
個byte。有了這個函式,我們可以知道一個Double值存在Memory中的各個byte到底是多
少。
----------------------------------------------------------------------------- 
Dim dbl as Double
Dim bte(0 to 7) as Byte
Dbl = 168.256
CopyMemory dbl, byt(0), 8
----------------------------------------------------------------------------- 
如此檢視bte陣列便可以知道這Double值的各個byte是多少。再以另一個 JournalRecord 
Hook為例來說明:
范例六
*****************************************************************************
' 以下在Hook.bas
Const WM_MOUSELAST = &H209
Const WM_MOUSEFIRST = &H200
Public Const WM_KEYLAST = &H108
Public Const WM_KEYFIRST = &H100
Public Const WH_JOURNALRECORD = 0
Type EVENTMSG
message As Long
paramL As Long
paramH As Long
time As Long
hwnd As Long
End Type
Declare Function SetWindowsHookEx Lib "user32" Alias _
"SetWindowsHookExA" (ByVal idHook As Long, ByVal lpfn As Long, _
ByVal hmod As Long, ByVal dwThreadId As Long) As Long
Declare Function UnhookWindowsHookEx Lib "user32" _
(ByVal hHook As Long) As Long
Declare Function CallNextHookEx Lib "user32" (ByVal hHook As Long, _
ByVal nCode As Long, ByVal wParam As Long, lParam As Any) As Long
Declare Sub CopyMemory Lib "KERNEL32" Alias "RtlMoveMemory" _
(lpvDest As Any, ByVal lpvSource As Long, ByVal cbCopy As Long)
Public hNxtHook As Long ' handle of Hook Procedure
Public msg As EVENTMSG
Sub EnableHook()
hNxtHook = SetWindowsHookEx(0, AddressOf HookProc, App.hInstance, 0)
End Sub
Sub FreeHook()
Dim ret As Long
ret = UnhookWindowsHookEx(hNxtHook)
End Sub
Function HookProc(ByVal code As Long, ByVal wParam As Long, _
ByVal lParam As Long) As Long
CopyMemory msg, lParam, Lenb(msg)
If (msg.message >= WM_KEYFIRST _
And msg.message <= WM_KEYLAST) Then
Debug.Print msg.message, msg.paramH
End If
HookProc = CallNextHookEx(hNxtHook, code, wParam, lParam)
End Function
'以下程式於Form1
Private Sub Form_Load()
Call EnableHook
End Sub
Private Sub Form_Unload(Cancel As Integer)
Call FreeHook
End Sub
***************************************************************************** 
詳細的流程不多做說明,我們只把重點放在HookProc這個Hook Procedure,如果我們查
JournalRecord Hook的Hook Procedure可得定義如下:
----------------------------------------------------------------------------- 
LRESULT CALLBACK JournalRecordProc(
int code, // hook code
WPARAM wParam, // undefined
LPARAM lParam // 為一個EVENTMSG Structure的address值
);
這個JournalRecordProc 對應到我們的HookProc便是
Function HookProc(ByVal code As Long, ByVal wParam As Long, _
ByVal lParam As Long) As Long
----------------------------------------------------------------------------- 
有沒有注意到第三個叁數它是一個 ByVal的Long,指的是存放某一個EVENTMSG的位址,
而先前我們提過,自定型態的叁數傳遞要使用ByRef的方式才能解決,天??!它用ByVal 
的方式來做,如果是C語言,那不成問題,只要如下:
----------------------------------------------------------------------------- 
EVENTMSG *p;
P = (EVENTMSG *) lParam;
----------------------------------------------------------------------------- 
如此便可以用 *p->message 之方式來取得內容,但VB呢?這里便要用些小技巧了,試想
,如果我們能依lParam所指的位址,一個Byte一個Byte的Copy到一個EVENTMSG的變數上
面,不就可以了嗎?所以了, CopyMomory這個函式派上用場了,但是 CopyMomory的原
始宣告如下,前面兩個叁數都是ByRef的方式,但目前對我們有的是lParam的內容(假設
是lParam = 25600, Address of lParam = 100100),如果我們使用底下的宣告,而去呼
-- 宣告一 ---------------------------------------------------------------------- 
Declare Sub CopyMemory Lib "KERNEL32" Alias "RtlMoveMemory" ( _
lpvDest As Any, lpvSource As Any, ByVal cbCopy as Long)
CopyMomory msg , lParam, Lenb(msg)
----------------------------------------------------------------------------- 
那麼WinAPI RtlMoveMemory會得到第二個叁數值=100100,而使指標指到100100的位址,
那麼就得不到想要的資料了 (因資料在25600的位址上)。所以我們改變原始宣告,將之
變成宣告二的樣子,如此VB 第二個叁數的作法會傳出25600(因為ByVal嘛)給RtlMoveMe
mory,那不就成功了嗎?
----宣告二 ---------------------------------------------------------------------
Declare Sub CopyMemory Lib "KERNEL32" Alias "RtlMoveMemory" ( _
lpvDest As Any, ByVal lpvSource As Long, ByVal cbCopy as Long)
CopyMomory msg , lParam, Lenb(msg)
----------------------------------------------------------------------------- 
或許這RtlMoveMemory您在許多地方都會用上,前兩個叁數時而要ByRef, 時而需 ByVal,
那是否就要定義四個宣告來因應不同之需,其實也不用,上面的例子中,只要宣告成宣
告一的樣子,但是呼叫時改成:
CopyMemory msg, ByVal lParam, Lenb(msg)
在第二個叁數前加上ByVal這樣這可以了啦。
這里還有另外一個做法,那就是從Hook Procedure的宣告著手,別忘了,Hook Pro 
cedure是Window所呼叫的,所以它傳給我們定義的HookProc()時,第三個叁數以先前的
舉例來說便是傳入25600,那麼,我們將HookProc()改定義成:
----------------------------------------------------------------------------- 
Function HookProc(ByVal code As Long, ByVal wParam As Long, _
lParam As Long) As Long
----------------------------------------------------------------------------- 
第三個叁數變成 ByRef的方式傳入,所以了,用msg = lParam來取代CopyMemory的作法,
嘛可以通啦!即如下:
-----------------------------------------------------------------------------
Function HookProc(ByVal code As Long, ByVal wParam As Long, _
lParam As Long) As Long 'lParam改成ByRef
msg = lParam
' CopyMemory msg, lParam, Lenb(msg) //這行可省啦
If (msg.message >= WM_KEYFIRST _
And msg.message <= WM_KEYLAST) Then
Debug.Print msg.message, msg.paramH
End If
HookProc = CallNextHookEx(hHook, code, wParam, lParam)
End Function

返回

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
日韩激情av在线| av在线综合网| av成人动漫在线观看| 欧美精品第一页| 国产日韩影视精品| 日本欧美一区二区在线观看| 99久久综合狠狠综合久久| 精品久久久久香蕉网| 亚洲黄色尤物视频| 成人一区二区在线观看| 欧美精品一区二区不卡| 免费欧美在线视频| 欧美影视一区在线| **网站欧美大片在线观看| 极品少妇xxxx精品少妇| 日韩一区二区在线观看视频| 午夜久久电影网| 欧日韩精品视频| 亚洲欧美激情在线| kk眼镜猥琐国模调教系列一区二区| 欧美v日韩v国产v| 男女性色大片免费观看一区二区| 91极品视觉盛宴| 亚洲精选免费视频| 91免费版在线| 亚洲精品日产精品乱码不卡| 91丨九色丨尤物| 国产精品传媒在线| av电影在线观看不卡| 国产精品久久久久久一区二区三区 | 欧美特级限制片免费在线观看| 国产日韩欧美麻豆| 福利视频网站一区二区三区| 久久久美女艺术照精彩视频福利播放| 裸体歌舞表演一区二区| 精品国产乱码91久久久久久网站| 麻豆久久一区二区| 精品裸体舞一区二区三区| 国产中文字幕一区| 中文字幕不卡在线| 91农村精品一区二区在线| 一区二区国产盗摄色噜噜| 欧美性xxxxxxxx| 无码av免费一区二区三区试看| 欧美精品aⅴ在线视频| 老鸭窝一区二区久久精品| www久久精品| 91丝袜高跟美女视频| 亚洲18女电影在线观看| 日韩午夜在线播放| 国产suv精品一区二区6| 亚洲精品免费看| 5858s免费视频成人| 国产在线精品一区在线观看麻豆| 国产蜜臀av在线一区二区三区| 99久久久久久| 石原莉奈在线亚洲三区| 久久久青草青青国产亚洲免观| 91在线精品一区二区| 亚洲福利电影网| 久久久五月婷婷| 色久优优欧美色久优优| 久久精品国产色蜜蜜麻豆| 国产欧美一区二区精品性色超碰| 91精品办公室少妇高潮对白| 国产一区二区调教| 夜夜嗨av一区二区三区网页| 日韩丝袜美女视频| 91免费版在线| 韩国v欧美v亚洲v日本v| 一区二区三区四区在线免费观看| 日韩美一区二区三区| 91久久精品日日躁夜夜躁欧美| 麻豆精品一区二区| 亚洲一区av在线| 国产午夜精品理论片a级大结局| 欧美在线观看视频在线| 国产在线播放一区三区四| 一区二区三区四区激情| 久久噜噜亚洲综合| 欧美一区二区播放| 在线视频一区二区三| 国产成人av一区二区三区在线观看| 亚洲成人在线网站| 亚洲欧美国产毛片在线| 久久久99免费| 欧美一区二区三区在线看| 色拍拍在线精品视频8848| 国产成人av福利| 日韩成人一级大片| 一区二区三区在线观看网站| 国产女人18毛片水真多成人如厕| 777精品伊人久久久久大香线蕉| 99久久免费视频.com| 国产精品亚洲午夜一区二区三区| 日韩精品国产欧美| 亚洲一区二区在线视频| 成人欧美一区二区三区白人| 日本一区二区三区四区| 26uuu亚洲| 精品剧情v国产在线观看在线| 欧美日韩黄色影视| 精品视频在线免费看| 91免费观看在线| 97成人超碰视| 色综合天天综合网国产成人综合天| 国产黄色91视频| 国产精品77777| 成人手机电影网| 成人黄色大片在线观看| 成人午夜免费电影| 成人免费毛片嘿嘿连载视频| 丁香婷婷综合激情五月色| 国产盗摄视频一区二区三区| 国产一区二区三区av电影 | 亚洲激情网站免费观看| 一区二区三区自拍| 亚洲午夜精品网| 五月天国产精品| 久热成人在线视频| 国产精品自产自拍| 国产成人8x视频一区二区| a级高清视频欧美日韩| 91浏览器打开| 欧美性生活大片视频| 91精品国产麻豆| 久久女同性恋中文字幕| 国产精品欧美综合在线| 亚洲欧美日韩国产综合在线| 亚洲自拍偷拍综合| 日本不卡1234视频| 国产精品一区二区久久不卡 | 成人免费视频在线观看| 亚洲日本在线a| 亚洲第一主播视频| 激情综合色播激情啊| 粉嫩av一区二区三区粉嫩| 日本久久一区二区三区| 7777精品伊人久久久大香线蕉| 精品国产免费一区二区三区四区| 欧美激情中文不卡| 亚洲国产中文字幕在线视频综合| 美女在线观看视频一区二区| 国产美女精品一区二区三区| 91丨九色丨蝌蚪丨老版| 日韩一区二区三| 综合电影一区二区三区| 日日欢夜夜爽一区| 国产91丝袜在线18| 欧美久久久影院| 久久精品一区二区三区av| 亚洲综合在线电影| 国产做a爰片久久毛片| 91免费看`日韩一区二区| 精品免费国产一区二区三区四区| 亚洲欧洲日韩av| 久久精品av麻豆的观看方式| 91在线看国产| 久久久久97国产精华液好用吗| 亚洲综合在线电影| 国产成人精品综合在线观看| 欧美色图天堂网| 中文字幕免费不卡| 蜜臀av一区二区| 欧美影院午夜播放| 亚洲三级久久久| 国产成人免费av在线| 日韩欧美视频一区| 亚洲国产婷婷综合在线精品| 国产成人精品一区二| 91精品国产综合久久久久久漫画 | 国产一区日韩二区欧美三区| 91精彩视频在线观看| 国产精品狼人久久影院观看方式| 青娱乐精品在线视频| 色av一区二区| 亚洲欧美偷拍卡通变态| 不卡一区二区在线| 久久久www成人免费毛片麻豆 | 国产aⅴ综合色| 日韩精品中文字幕在线一区| 亚洲综合av网| 欧美伊人精品成人久久综合97| 中文字幕精品综合| 国产一区福利在线| 日韩欧美自拍偷拍| 奇米色777欧美一区二区| 欧美色综合天天久久综合精品| 综合久久国产九一剧情麻豆| 懂色av中文一区二区三区| 久久久久一区二区三区四区| 国产美女娇喘av呻吟久久| 欧美大片日本大片免费观看| 蜜臀av一区二区在线观看 | 国产精品少妇自拍| 国产精品亚洲а∨天堂免在线| 欧美成人女星排行榜| 麻豆精品国产传媒mv男同| 欧美一卡在线观看| 激情都市一区二区|