api là gì.docx

84
API là gì? API là viết tắt của Application Programming Interface (giao diện lập trình ứng dụng). Nó là 1 giao tiếp phần mềm được dùng bởi các ứng dụng khác nhau. Cũng giống như bàn phím là một thiết bị giao tiếp giữa ngườI dùng và máy tính, API là 1 giao tiếp phần mếm chẳng hạn như giữa chương trình và hệ điều hành (HĐH). Bộ API của từng HĐH là khác nhau, làm cho các HĐH khác nhau và thường không tương thích với nhau. Ví dụ những phần mềm trên máy Macintosh không thể chạy được trên máy Windows bởi vì Macintosh và Windows có các API hòan tòan khác nhau. Windows API quản lý mọi vấn đề làm ra Windows. Tuy nhiên nó đồng thời cũng cung cấp hầu hết các tính năng thông dụng (Open, Save As, Choose Font,…), các thiết lập HĐH, các sự kiện,… Các ứng dụng trên nền Windows dùng Windows API hầu như trong mỗi tác vụ. Thậm chí nếu bạn không dùng API trong khi lập trình thì ngôn ngữ lập trình cũng sẽ gọi các API trong chương trình được tạo ra để quản lý nhiều tác vụ khác nhau. Hầu hết các hàm API được chứa trong các file DLL (Dynamic Link Library – thư viện liên kết động) chứa trong thư mục hệ thống của Windows. Các file DLL cho phép các chương trình bên ngòai dùng các hàm của chúng. Khai báo hàm: Trước khi 1 hàm API có thể được dùng trong Visual Basic, nó phải được khai báo. Bằng việc khai báo hàm, bạn báo cho Visual Basic biết phải tìm hàm đó ở đâu. Phần khai báo đặc tả tên của hàm, file .dll chứa nó, các tham số hàm và kiểu dữ liệu trả về (nếu có). Phát biểu Declare trong Visual Basic dùng để khai báo 1 hàm. Phát biểu Declare chỉ có thể xuất hiện trong phần khai báo của 1 Form hay 1 Module. Nếu nó xuất hiện trong form, phần khai báo phải là Private, điều này làm cho hàm chỉ truy xuất được trong form. Nếu nó xuất hiện trong 1 module, phần khai báo có thể là Public hoặc Private. Từ khóa Public làm cho hàm có thể được dùng trong tòan bộ chương trình, còn từ khóa Private giới hạn nó chỉ được dùng trong moodule mà thôi. Các hàm API có 2 dạng: hàm (Function) có trị trả về và thủ tục (Sub) không có trị trả về: Khai báo cho hàm có trị trả về như sau: Declare Function function_name Lib “DLL_filename” [Alias “function_alias” (argument_list) As data_type Khai báo cho các thủ tục: Declare Sub function_name Lib “DLL_filename” [Alias “function_alias”

Upload: vutruong1

Post on 17-Sep-2015

253 views

Category:

Documents


8 download

TRANSCRIPT

API l g?API l vit tt ca Application Programming Interface (giao din lp trnh ng dng). N l 1 giao tip phn mm c dng bi cc ng dng khc nhau. Cng ging nh bn phm l mt thit b giao tip gia ngI dng v my tnh, API l 1 giao tip phn mm chng hn nh gia chng trnh v h iu hnh (HH). B API ca tng HH l khc nhau, lm cho cc HH khc nhau v thng khng tng thch vi nhau. V d nhng phn mm trn my Macintosh khng th chy c trn my Windows bi v Macintosh v Windows c cc API han tan khc nhau.

Windows API qun l mi vn lm ra Windows. Tuy nhin n ng thi cng cung cp hu ht cc tnh nng thng dng (Open, Save As, Choose Font,), cc thit lp HH, cc s kin, Cc ng dng trn nn Windows dng Windows API hu nh trong mi tc v. Thm ch nu bn khng dng API trong khi lp trnh th ngn ng lp trnh cng s gi cc API trong chng trnh c to ra qun l nhiu tc v khc nhau.

Hu ht cc hm API c cha trong cc file DLL (Dynamic Link Library th vin lin kt ng) cha trong th mc h thng ca Windows. Cc file DLL cho php cc chng trnh bn ngai dng cc hm ca chng.

Khai bo hm:Trc khi 1 hm API c th c dng trong Visual Basic, n phi c khai bo. Bng vic khai bo hm, bn bo cho Visual Basic bit phi tm hm u. Phn khai bo c t tn ca hm, file .dll cha n, cc tham s hm v kiu d liu tr v (nu c).Pht biu Declare trong Visual Basic dng khai bo 1 hm. Pht biu Declare ch c th xut hin trong phn khai bo ca 1 Form hay 1 Module. Nu n xut hin trong form, phn khai bo phi l Private, iu ny lm cho hm ch truy xut c trong form. Nu n xut hin trong 1 module, phn khai bo c th l Public hoc Private. T kha Public lm cho hm c th c dng trong tan b chng trnh, cn t kha Private gii hn n ch c dng trong moodule m thi.

Cc hm API c 2 dng: hm (Function) c tr tr v v th tc (Sub) khng c tr tr v:

Khai bo cho hm c tr tr v nh sau:Declare Function function_name Lib DLL_filename [Alias function_alias (argument_list) As data_type

Khai bo cho cc th tc:Declare Sub function_name Lib DLL_filename [Alias function_alias (argument_list)

function_name: L tn ca hm API. y l tn m Visual Basic tham chiu n hm mi khi n c gi.

DLL_filename: Tn ca file .dl cha hm. Cc file th vin ny phi c y tn cng phn m rng, ring i vi 3 th vin USER, KERNEL, v GUI th khng cn phi c phn m rng. Tn ny l mt String nn cn phi bo trong du "".

Nu khng khai bo ng dn y , VisualBasic s tm ln lt trong:1. Th mc cha file thc thi .exe2. Th mc hin hnh3. \Windows\System324. \Windows\System5. \Windows6. ng dn c khai bo trc

Sau y l cc file th vin ph bin :Advapi32.dll : Advanced API services library supporting numerous APIs including many security and Registry callsComdlg32.dll : Common dialog API libraryGdi32.dll : Graphics Device Interface API library (cc hm giao tip thit b ha)Kernel32.dll : Core Windows 32-bit base API support (cc hm ca HH)Lz32.dll : 32-bit compression routinesMpr.dll : Multiple Provider Router libraryNetapi32.dll : 32-bit Network API libraryShell32.dll : 32-bit Shell API library (cc hm h v Windows)User32.dll : Library for user interface routines (cc hm giao din ngi dng)Version.dll : Version libraryWinmm.dll : Windows multimedia library

Bn th vin chnh ca Windows :KERNEL32 The main DLL, Kernel32, handles memory management, multitasking of the programs that are running, and most other functions which directly affect how Windows actually runs. USER32 Windows management library. Contains functions which deal with menus, timers, communications, files and many other non-display areas of Windows. GDI32 Graphics Device Interface. Provides the functions necessary to draw things on the screen, as well as checking which areas of forms need to be redrawn. WINMM Provides multimedia functions for dealing with sound, music, real-time video, sampling and more. This is a 32-bit only DLL. The 16 bit equivalent is called MMSYSTEM.

function_alias (ty chn, c hay khng cng c): L tn tht s ca hm lu trong file .dll. iu ny l quan trng bi v hu ht cc hm nhn tham s kiu String u c 2 phin bn: 1 phin bn ANSI chun dng x l cc k t khng phi Unicode v 1 phin bn x l k t Unicode. Nu c 2 phin bn cng c cha trong 1 file .dll th phin bn khng Unicode s thm hu t A v phin bn Unicode s thm hu t W. V d: hm CompareString c 2 phin bn l CompareStringA v CompareStringW.

argument_list: Danh sch cc i s m hm yu cu. Xc nh c bao nhiu i s v kiu tng ng ca mi i s c truyn cho hm. C php nh sau:

[{ByVal | ByRef}] argument_name As data_type,

argument_name: tn ca i s.data_type: kiu d liu ring ca mi i s.

Mt s im cn lu khi dng ByVal v ByRef: Cc String lun truyn kiu ByVal. Cc cu trc (structure) u c truyn bng ByRef. Cc array lun truyn bng ByRef khi tan b array c truyn cho 1 hm. C php ca Visual Basic ch cho php bn truyn phn t u tin ca mng cho 1 hm. Tuy nhin khi bn truyn bng ByRef, Visual Basic s hiu l bn mun truyn tan b mng. Cc bin kiu s c th truyn bng ByVal hay ByRef ty theo cch dng ca bn.

data_type: Kiu d liu m hm tr v. Thng l kiu Long, mc d 1 s hm c th tr v String. Hm API ch h tr 1 s gii hn cc kiu d liu, sau y l cc kiu d liu c th dng trong cc hm API: Byte : 1 s nguyn 8-bit Integer : 1 s nguyn 16-bit Long : 1 s nguyn 32-bit StringNgai cc kiu d liu trn, bt k cu trc (structure) no ca API cng c th c dng.

bit cch khai bo hm API bn cn khi ng tin ch API Text Viewer c cung cp km theo Visual Basic hoc download ApiViewer 2004 v API-Guide

Su tm v tng hp

u trang

NoBi Qun tr

Bi vit: 920Ngy tham gia: T.Ba 18/03/2008 1:22 pmn t: Si GnHasthanked: 42 timeBeenthanked: 61 timeLin h: Lin h NoBi Th no l Handle? Trch dn Gi bigi bi NoBi T.Su 28/03/2008 11:52 am Th no l Handle - What is a Handle???A variable that identifies an object; an indirect reference to an operating system resource. In plain English a handle is variable of type long which uniquely identifies any object like forms,desktop,menus or in other words a handle is a unique id for each of these objects. Every window in the Windows operating system is identified by a handle. The desktop window has a handle, a Visual Basic form displayed in an application has a handle, and even the controls on a form, which are themselves actually windows, have handles. You can gather a lot of information about the windows in your application after you get the handle of the window that interests you.

Handle : (cn) tm gi l a chL mt bin kiu Long c gi tr nhn bit duy nht dng nh ngha mt i tng. V trong Windows th mi i tng (control) s c gn cho 1 a ch ring, ging nh s CMND ca mnh vy , v khi chng ta mun lm vic vi i tng no th phi tr ti a ch ca i tng , ci a ch c gi l Handle ca mi i tng. Mi ca s trong HH Windows th c nh ngha bi mt handle. Bn c th ly c tt c cc thng tin v mt i tng sau khi bn ly c handle ca n.

By gi chng ta s th lm cho ca s ng dng nhp nhy (Flashing a Window) :

1. To 1 project mi trong VB2. Khai bo hm API FlashWindow trong phn khai bo tng qut ca Form :M: Chn ht1. Private Declare Function FlashWindow Lib "user32" Alias "FlashWindow" (ByVal hWnd As Long, ByVal bInvert As Long) As Long

3. Thm vo trn Form 1 iu khin Timer. t thuc tnh Interval cho Timer =10 (Timer s thc thi on code trong 10 mili giy mt ln).4. Double-click vo iu khin Timer. Nhp vo on code sau :M: Chn ht1. Private Sub Timer1_Timer() 2. Dim nReturnValue As Long 3. nReturnValue = FlashWindow(Form1.hWnd, True) 4. End Sub

5. Chy th chng trnh, bn s thy ca s ca ng dng nhp nhy.

Private Declare Function FlashWindow Lib "user32" Alias "FlashWindow" (ByVal hWnd As Long, ByVal bInvert As Long) As Long

Phn khai bo sau t kha Lib l th vin cha hm FlashWindow, c th y l User32 DLL.Alias (b danh): cho VB bit tn tht s ca hm bn trong th vin l g - ci ny c th khc vi ci tn m chng ta gn cho n trc t kha Lib.Private Declare Function FlashWindow Lib "user32" (ByVal hWnd As Long, ByVal bInvert As Long) As LongTrng hp ny th Alias s c cng tn vi tn hm API (FlashWindow)

(ByVal hWnd As Long, ByVal bInvert As Long) As LongTham s u tin (hWnd) : l handle (cn, a ch) ca ca s m chng ta mun n nhp nhy.Tham s th hai (bInvert) : bt hay tt tnh nng nhp nhy. Nu l True, khi ta gi cu lnh FlashWindow(Form1.hWnd, True) th ca s Form1 s nhp nhy. Khi mun tr v trng thi bnh thng th gi cu lnh trn vi gi tr l False.

nReturnValue = FlashWindow(Form1.hWnd, True)nReturnValue : bin lu tr gi tr tr v khi ta gi hm FlashWindow. Hu ht mi hm API u tr v con s m bo li, cho d bn khng s dng g ti gi tr ny nhng bn nn gn cho n 1 bin. Nu khng gn gi tr tr v v 1 bin, s rt nguy him khi trong on code bn gi li hm ln th 2, n c th gy treo my. Ni chung tt nht bn nn lu tr ci gi tr tr v ny v 1 bin mc d sau bn khng bao gi s dng ti n.

u trang

NoBi Qun tr

Bi vit: 920Ngy tham gia: T.Ba 18/03/2008 1:22 pmn t: Si GnHasthanked: 42 timeBeenthanked: 61 timeLin h: Lin h NoBi Hng s s dng trong cc hm API Trch dn Gi bigi bi NoBi T.Su 28/03/2008 11:53 am Nh chng ta bit, cc hng s dng lu mt gi tr khng i gip cho chng ta d nh, tin li cho qu trnh vit code.Vd: Const PI = 3.14Vy th cc hng s dng trong cc hm API cng l cc hng s nh bnh thng vy thi. Ch khc l nhng hng s c ly nhng ci tn chun chung cho tt c ngi lp trnh nh chng ta khi xem code u c th hiu c lin. Nhng tn hng c vit tc ngn gn v mang tnh gi nh nhng ngi trong ngh khi c ti th t nhiu cng on ra c ngha ca n. D nhin l bn c th t li tn khc cho cc hng s min sao vn gi nguyn gi tr ca cc hng s . Nhng c l chng ai lm iu ny v lm nh vy th ch c bn mi hiu c mnh lm g ... xem cc hng s trn, bn s dng tin ch API Text Viewer c cung cp km theo Visual Basic. Chn Constants, n s trnh by cho bn danh sch cc hng s c ngi ta nh ngha sn. V d bn c 1 sourcecode ca 1 chng trnh no , thy n dng hng s WM_MOUSEMOVE = &H200, bn c th hiu c rng y l hng s c dng trong x l Window Message(cc thng ip trong Windows) s kin di chuyn chut. Gi s by gi bn li khng mun dng MOUSEMOVE na m mun dng s kin MOUSEWHEEL, bn c th d dng tm thy hng s WM_MOUSEWHEEL = &H20A bng tin ch API Text Viewer. Nh vy bn c thy rng tm c hng s cn dng th ty thuc rt nhiu vo kinh nghim ca mnh khng ?. V ch c ng chm nhiu vi n bn mi rt ta ra c nhng kinh nghim cho ring mnh !.

Hng s c quy c lun vit bng ch IN HOA

Hy xt v d sau:V d : lm cho ca s lun trn cc ca s khc (always on top)

Khai bo cc hng s cn thitConst HWND_TOPMOST = -1Const HWND_NOTOPMOST = -2Const SWP_NOSIZE = &H1Const SWP_NOMOVE = &H2Const SWP_NOACTIVATE = &H10Const SWP_SHOWWINDOW = &H40

Hm API cn s dngPrivate Declare Sub SetWindowPos Lib "User32" (ByVal hWnd As Long, ByVal hWndInsertAfter As Long, ByVal X As Long, ByVal Y As Long, ByVal cx As Long, ByVal cy As Long, ByVal wFlags As Long)M: Chn ht1. Private Sub Command1_Click()2. 'Set the window position to topmost3. SetWindowPos Me.hWnd, HWND_TOPMOST, 0, 0, 0, 0, SWP_NOACTIVATE Or SWP_SHOWWINDOW Or SWP_NOMOVE Or SWP_NOSIZE4. End Sub

hWndHandle ca ca s cn thc hin.

hWndInsertAfterGm 1 trong cc gi tr sau :HWND_BOTTOM : a ca s xung v tr cui cng

HWND_NOTOPMOST : a ca s ln trn tt c cc ca s notopmost nhng bn di topmost.HWND_TOP : a ca s ln v tr trn cng (top).HWND_TOPMOST : a ca s ln v tr cao nht (topmost), ngay c khi n khng c kch hot (deactived).

XV tr mi bn tri (left).

YV tr mi pha trn (top).

cx rng mi ca ca s (width), n v l pixel.

cy cao mi ca ca s (height), n v l pixel.

uFlagsC nh v tr v kch thc. C th s dng kt hp cc tham s :

SWP_NOACTIVATE : khng kch hot ca sDoes not activate the window. If this flag is not set, the window is activated and moved to the top of either the topmost or non-topmost group (depending on the setting of the hWndInsertAfter parameter).SWP_NOMOVE : gi nguyn v tr hin tiRetains the current position (ignores the X and Y parameters).SWP_NOSIZE : gi nguyn kch thc hin tiRetains the current size (ignores the cx and cy parameters).SWP_SHOWWINDOW : hin th ca sDisplays the window.

c nhng hng dn chi tit hn, cc bn v http://www.allAPI.net download v chng trnh API-Guide v APIViewer, y l 2 chng trnh rt cn thit cho nhng ai mun tm hiu v API.

u trang

NoBi Qun tr

Bi vit: 920Ngy tham gia: T.Ba 18/03/2008 1:22 pmn t: Si GnHasthanked: 42 timeBeenthanked: 61 timeLin h: Lin h NoBi V d mu Trch dn Gi bigi bi NoBi T.Su 28/03/2008 11:54 am Ly handle ca mt i tng

Chng ta hy cng kho st hm WindowFromPoint dng ly handle ca i tng v tr c ch nh (xPoint, yPoint).

Declare Function WindowFromPoint Lib "user32" (ByVal xPoint As Long, ByVal yPoint As Long) As Long

Declare Function GetCursorPos Lib "user32" (lpPoint As POINTAPI) As Long

V i cp vi n l :

GetCursorPos : ly v tr hin ti ca con tr. V tr ny c lu gi trong lpPoint, c 2 gi tr l ta X v Y (kiu Long). V vy ly c gi tr ca bin lpPoint, chng ta cn phi c 1 bin c cng cu trc (structure) kiu d liu vi n.M: Chn ht1. 2. Private Type POINTAPI3. X As Long4. Y As Long5. End Type6. 7. Private Sub Form_MouseUp(Button As Integer, Shift As Integer, X As Single, Y As Single)8. Dim Pt As POINTAPI, mWnd As Long9. 10. 'Ly v tr hin ti ca chut11. GetCursorPos Pt12. 13. 'Ly handle ca ca s ti v tr chut14. mWnd = WindowFromPoint(Pt.X, Pt.Y)15. 16. 'Hin th ln Form17. Me.Print "handle= " & mWnd18. End Sub19.

u trang

NoBi Qun tr

Bi vit: 920Ngy tham gia: T.Ba 18/03/2008 1:22 pmn t: Si GnHasthanked: 42 timeBeenthanked: 61 timeLin h: Lin h NoBi Class name l g? Trch dn Gi bigi bi NoBi T.Su 28/03/2008 11:55 am Class name ???

Ln trc chng ta c gii thiu hm API WindowFromPoint ly handle ca 1 ca s bt k, ln ny tui xin gii thiu vi cc bn hm FindWindow. Nhng trc ht chng ta cng tm hiu Class name l g ?.

Class name: l tn lp i din cho 1 s ca s (hay i tng). V d nh class name ca tt c ca s trnh son tho Notepad l Notepad; ca cc ca s trong CommonDialog l #32770; ca mn hnh ngoi Desktop l SysListView32; ca cc nt lnh trong ca s Msgbox l Button; ca label hin th thng bo trong Msgbox l Static .....V ly Class name ca 1 ca s (hay i tng), ta dng hm API GetClassName:

Declare Function GetClassName Lib "user32" Alias "GetClassNameA" (ByVal hwnd As Long, ByVal lpClassName As String, ByVal nMaxCount As Long) As Long

Ly tn lp ca ca shwnd : handle ca ca s (hay i tng) cn ly tn lplpClassName : bin nhn ly chui tn lpnMaxCount : qui nh chiu di ca tn lp, nu tn lp di hn th n s b ct bt

-----------------------------------------------------------

By gi hy tm hiu thm vi hm FindWindow nh :

Declare Function FindWindow Lib "user32" Alias "FindWindowA" (ByVal lpClassName As String, ByVal lpWindowName As String) As Long

Ly handle ca ca s c tn (title) hoc class name trong chui c ch nh.

lpClassName : tn lp (Class name) cn ly handlelpWindowName : tiu (title) ca ca s cn ly handleM: Chn ht1. Vd 1: ly handle ca ca s son tho vn bn Notepad2. Private Sub Command1_Click()3. Dim n As Long4. n = FindWindow("Notepad", vbNullString )5. MsgBox "handle = " & n6. End Sub

Nu chng ta c nhiu ca s ng dng Notepad ang m th n s ln lt l handle ca tng ca s, gi tr n s l handle ca ca s c tm thy cui cng. (vbNullString : khng cho bit tn c th, hm FindWindow s tm ht tt c ca s c class name l Notepad)M: Chn ht1. Vd 2: ly handle ca ca s c tiu l Untitled - Notepad2. Private Sub Command1_Click()3. Dim n As Long4. n = FindWindow(vbNullString, "Untitled - Notepad")5. MsgBox "handle = " & n6. End Sub

Ln ny hm FindWindow s tr v handle ca tt c ca s no c tiu l Untitled Notepad. (vbNullString : khng cho bit class name c th, hm FindWindow s tm ht trong tt c cc ca s c trn mn hnh)Bn th to 1 Form c Caption = Untitled Notepad. Khi n s = handle ca Form .Bt chng trnh son tho Notepad. Khi n s = handle ca ca s chng trnh Notepad.M: Chn ht1. Vd 3: Ly hanlde ca trnh son tho Notepad c tiu l caulacbovb.txt - Notepad2. Private Sub Command1_Click()3. Dim n As Long4. n = FindWindow("Notepad", "caulacbovb.txt - Notepad")5. MsgBox "handle = " & n6. End Sub

Ln ny r rng bn thy l chng ta c 2 rng buc : ch ly handle ca trnh son tho Notepad no c tiu tha mn yu cu.Bn to 1 file caulacbovb.txtTo thm vi file .txt khc na, to 1 Form c Caption = caulacbovb. txt - NotepadM tt c my file , by gi n s ch l handle ca ca s chng trnh Notepad c tiu l caulacbovb. txt - Notepad m thi.

Qua 3 v d trn, bn thy r cch lm vic ca hm FindWindow, nhng n ch tm ly handle ca ca s cha m thi. Vy mun ly handle ca cc nt lnh, label hin th thng bo trong Msgbox Vit ha n th ta phi lm sao ?. Mi bn tham kho hm FindWindowEx

on code bn di demo cho vic ly tn lp ca 1 ca s. Bn nhp chnh xc tiu ca 1 ca s vo, chng trnh s tr li tn lp ca ca s :M: Chn ht1. Private Declare Function FindWindow Lib "user32" Alias "FindWindowA" (ByVal lpClassName As String, ByVal lpWindowName As String) As Long2. Private Declare Function GetClassName Lib "user32" Alias "GetClassNameA" (ByVal hwnd As Long, ByVal lpClassName As String, ByVal nMaxCount As Long) As Long3. 4. Const gcClassnameMSWord = "OpusApp"5. Const gcClassnameMSExcel = "XLMAIN"6. Const gcClassnameMSIExplorer = "IEFrame"7. Const gcClassnameMSVBasic = "wndclass_desked_gsk"8. Const gcClassnameNotePad = "Notepad"9. Const gcClassnameMyVBApp = "ThunderForm"10. 11. Private Sub Form_Load()12. Dim WinWnd As Long, Ret As String, RetVal As Long, lpClassName As String13. 'Ask for a Window title14. Ret = InputBox("Enter the exact window title:" + Chr$(13) + Chr$(10) + "Note: must be an exact match")15. 'Search the window16. WinWnd = FindWindow(vbNullString, Ret)17. If WinWnd = 0 Then MsgBox "Couldn't find the window ...": Exit Sub18. 'Create a buffer19. lpClassName = Space(256)20. 'retrieve the class name21. RetVal = GetClassName(WinWnd, lpClassName, 256)22. 'Show the classname23. MsgBox "Classname: " + Left$(lpClassName, RetVal)24. End Sub

u trang

NoBi Qun tr

Bi vit: 920Ngy tham gia: T.Ba 18/03/2008 1:22 pmn t: Si GnHasthanked: 42 timeBeenthanked: 61 timeLin h: Lin h NoBi V d mu Trch dn Gi bigi bi NoBi T.Su 28/03/2008 11:56 am FindWindowEx

Declare Function FindWindowEx Lib "user32" Alias "FindWindowExA" (ByVal hWnd1 As Long, ByVal hWnd2 As Long, ByVal lpsz1 As String, ByVal lpsz2 As String) As Long

Hm FindWindowEx ging vi hm FindWindow, ch khc ch l cho ly handle ca ca s con (cc i tng nh nt lnh, label... trong 1 ca s th c gi l ca s con) hWnd1 : (hwndParent ) handle ca ca s cha. Nu n = Null th FindWindowEx s ly ca s Desktop lm ca s cha v bt u tm cc ca s con trong ca s Desktop (tc l cc ca s c trn mn hnh) hWnd2 : (hwndChildAfter ) ch nh ca s con m FindWindowEx s bt u tm t ca s k tr i. Nu n = Null th s bt u tm t ca s con u tin(Note that if both hwndParent and hwndChildAfter are NULL, the function searches all top-level windows). lpsz1 : (lpszClass) ch nh class name ca ca s con cn tm lpsz2 : (lpszWindow) ch nh caption ca ca s con cn tmBn hy chy chng trnh no c xut hin hp thoi Msgbox hay Dialogbox (v 2 ci ny c chung classname). Chy chng trnh bn di, bn s thy s thay i ...M: Chn ht1. Private Declare Function FindWindowEx Lib "user32" Alias "FindWindowExA" (ByVal hWnd1 As Long, ByVal hWnd2 As Long, ByVal lpsz1 As String, ByVal lpsz2 As String) As Long2. Private Declare Function FindWindow Lib "user32" Alias "FindWindowA" (ByVal lpClassName As String, ByVal lpWindowName As String) As Long3. Private Declare Function SendMessage Lib "user32" Alias "SendMessageA" (ByVal hwnd As Long, ByVal wMsg As Long, ByVal wParam As Long, lParam As Any) As Long4. Private Const WM_SETTEXT = &HC5. Dim hDlg As Long, hButton As Long6. 7. Private Sub Command1_Click()8. 'Ly handle ca ca s Dialog bt k c trn mn hnh9. hDlg = FindWindow("#32770", vbNullString)10. 'i tiu ca Dialog 11. SendMessage hDlg, WM_SETTEXT, 0&, ByVal "Xin chao ban"12. 13. 'Ly handle ca nt lnh bt k trong ca s Dialog14. hButton = FindWindowEx(hDlg, ByVal 0&, "Button", vbNullString)15. 'i tn nt lnh 16. SendMessage hButton, WM_SETTEXT, 0&, ByVal "Nut lenh"17. 18. 'Ly handle ca static box (label) bt k trong ca s Dialog19. hButton = FindWindowEx(hDlg, ByVal 0&, "Static", vbNullString)20. 'i dng vn bn hin th ca n21. SendMessage hButton, WM_SETTEXT, 0&, ByVal "www.caulacbovb.com"22. End Sub

Nu bn ch mun i tn nt lnh OK khng thi th dng :M: Chn ht1. hButton = FindWindowEx(hDlg, ByVal 0&, "Button", "OK")2. SendMessage hButton, WM_SETTEXT, 0&, ByVal "Dong y"

Tng t bn c th ty thay i tn nt lnh hay label no m mnh mun ...

Cc bn c th tham kho thm sourcecode ca cc chng trnh Vit ha. V cng dng cch ny i tn ting Anh thnh ting Vit.

hiu r classname l g, mi bn xem li bi vit trn.

Chc cc bn thnh cng !!!.

u trang

NoBi Qun tr

Bi vit: 920Ngy tham gia: T.Ba 18/03/2008 1:22 pmn t: Si GnHasthanked: 42 timeBeenthanked: 61 timeLin h: Lin h NoBi V d tng hp kt thc bi vit Trch dn Gi bigi bi NoBi T.Su 28/03/2008 11:58 am Ly handle, classname v text ca 1 i tng

Chp on code sau vo Form, thm vo 3 TextBox. Nhn F5 chy. Click chut vo Form v gi nguyn, ko chut ti ca s hoc control bt k, th chut ra, bn s ly c handle, classname v text ca n.M: Chn ht1. Option Explicit2. 3. Private Const WM_GETTEXT = &HD4. Private Const WM_GETTEXTLENGTH = &HE5. 6. Private Type POINTAPI7. X As Long8. Y As Long9. End Type10. 11. Private Declare Function WindowFromPoint Lib "user32" (ByVal xPoint As Long, ByVal yPoint As Long) As Long12. Private Declare Function GetCursorPos Lib "user32" (lpPoint As POINTAPI) As Long13. Private Declare Function SendMessage Lib "user32" Alias "SendMessageA" (ByVal hwnd As Long, ByVal wMsg As Long, ByVal wParam As Long, lParam As Any) As Long14. Private Declare Function GetClassName Lib "user32" Alias "GetClassNameA" (ByVal hwnd As Long, ByVal lpClassName As String, ByVal nMaxCount As Long) As Long15. 16. Private Sub Form_MouseUp(Button As Integer, Shift As Integer, X As Single, Y As Single)17. 18. Dim Pt As POINTAPI, mWnd As Long19. Dim lpClassName As String, RetVal As Long20. 21. 'Get the current cursor position22. GetCursorPos Pt23. 24. 'Get the window under the cursor25. mWnd = WindowFromPoint(Pt.X, Pt.Y)26. Text1.Text = "Handle = " & mWnd 'Ly handle ca i tng27. 28. 'ly class name29. lpClassName = Space(256)30. RetVal = GetClassName(mWnd, lpClassName, 256)31. lpClassName = Left$(lpClassName, RetVal)32. Text2.Text = "Classname = " & lpClassName33. 34. 'Ly ni dung hin th ca i tng35. Dim length As Long36. Dim result As Long37. Dim strtmp As String38. length = SendMessage(mWnd, WM_GETTEXTLENGTH, ByVal 0, ByVal 0) + 139. strtmp = Space(length)40. result = SendMessage(mWnd, WM_GETTEXT, ByVal length, ByVal strtmp)41. Dim a As Variant42. Dim st As String43. a = Split(strtmp, vbNullChar)44. Text3.Text = "Text = " & a(0)45. 46. End Sub

Kim tra tt c ca s chng trnh Notepad hin c, ci no ang Minimize th hin n lnM th vi ca s Notepad, thu nh chng ri chy on code bn di:M: Chn ht1. Private Declare Function FindWindowExA Lib "user32" (ByVal hWnd1 As Long, ByVal hWnd2 As Long, ByVal lpsz1 As String, ByVal lpsz2 As String) As Long2. Private Declare Function ShowWindow Lib "user32" (ByVal hwnd As Long, ByVal nCmdShow As Long) As Long3. Private Declare Function IsIconic Lib "user32" (ByVal hwnd As Long) As Long4. Private Const SW_NORMAL = 15. 6. Private Sub Command1_Click()7. Dim hCurrent As Long8. Do9. hCurrent = FindWindowExA(0&, hCurrent, vbNullString, "Untitled - Notepad")10. If IsIconic(hCurrent) 0 Then ShowWindow hCurrent, SW_NORMAL11. Loop Until hCurrent = 012. End Sub

u trang

truongphu VIP

Bi vit: 4737Ngy tham gia: CN 04/11/2007 10:57 amn t: Cam c, Khnh haHasthanked: 13 timeBeenthanked: 488 time55 hm API lin quan n ca s Trch dn Gi bigi bi truongphu T.Su 20/03/2009 1:15 pm http://congdong.saccauvong.net/showthread.php/c-c-h-m-api-li-n-6696.htmlDi y l ni dung Copy t a ch trn. Khng thy tn tc gi

Cc hm API lin quan n ca s

Phn 1: Cc hm API lin quan n ca s

xem xt quan h ca mt ca s (Tm gi l ca s khai bo) vi cc ca s khc ta nghin cu cc mi quan h sau:

1. Declare Function AnyPopup Lib "user32" Alias "AnyPopup" () As Long

Cng dng: a ra ch s ca s popup hin ang tn ti trn mn hnh. Tr tr v: Integer ~ True (Khc zero) nu c ca s popup.

2. Declare Function AdjustWindowRect Lib "user32" Alias "AdjustWindowRect" (lpRect As RECT, ByVal dwStyle As Long, ByVal bMenu As Long) As Long

3. Declare Function AdjustWindowRectEx Lib "user32" Alias "AdjustWindowRectEx" (lpRect As RECT, ByVal dsStyle As Long, ByVal bMenu As Long, ByVal dwEsStyle As Long) As Long

Cng dng: iu chnh ca s khi c vng lm vic client (Khng tnh kch thc ca thanh tiu , ng vin v cc phn thm) c khai bo, khi bit kiu ca s. Tham s km: LpRect Hnh ch nht cha vng lm vic client. DwStyle Kiu ca s. BMenu a gi tr True (Khc zero) nu ca s c trnh n DwEsStyle kiu ca s m rng.

4. Declare Function ArrangeIconicWindows Lib "user32" Alias "ArrangeIconicWindows" (ByVal hwnd As Long) As Long

Cng dng: Xp cc biu tng ca s trong mt ca s cha (Mc Parent). Tr tr v: Integer chiu cao ca hng biu tng. Zero nu tht bi. Tham s km: HWnd Cn ca ca s cha (Mc Parent).

5. Declare Function BeginDeferWindowPos Lib "user32" Alias "BeginDeferWindowPos" (ByVal nNumWindows As Long) As Long

Cng dng: Bt u xy dng danh sch v tr cc ca s mi thnh cu trc bn ni b cha v tr cc ca s. Tr tr v: Integer - cn ca cu trc bn . Zero nu tht bi. Tham s km: NNum Windows S ca s ban u cp pht ch trng.

6. Declare Function DeferWindowPos Lib "user32" Alias "DeferWindowPos" (ByVal hWinPosInfo As Long, ByVal hwnd As Long, ByVal hWndInsertAfter As Long, ByVal x As Long, ByVal y As Long, ByVal cx As Long, ByVal cy As Long, ByVal wFlags As Long) As Long

Cng dng: inh ngha v tr ca ca s mi qua ca s khai bo v a vo cu trc bn ni b cha v tr cc ca s. Tr tr v: Integer - Cn mi i vi cu trc bn cha thng tin cp nht v tr. Zero nu tht bi. Tham s km: HWinPosInfo Cn ca cu trc bn . HWnd Ca s cn nh v. HWndInsertAfter Cn ca s m ca s hWnd t sau n trong danh sch. N c th l mt trong cc hng sau: HWnd_BOTTOM: t v cui danh sch. HWnd_TOP: t ca s u danh sch HWnd_TPMOST: t ca s u danh sch ln trn cng nhn thy c. X Honh ca ca s hWnd theo to ca ca s cha (Mc Parent) n. Y Tung ca ca s hWnd theo to ca s cha (Mc Parent) n. cx Chiu rng ca s mi. cy Chiu cao ca s mi. Flags Mt s nguyn l mt trong cc hng sau: SWP_DRAWFRAME: V khung bao quanh ca s. SWp-HIDEWINDOW: Giu ca s. SWP_NOACTIVE: Khng kch hot ca s. SWP_NOMOVE: Gi nguyn v tr hin ti. SWP_NOREDRAW: Khng v li t ng. SWp_NOSIZE: Gi nguyn kch thc. SWp_NOZORDER: Gi nguyn v tr hin hnh trong danh sch.

7. Declare Function SetWindowPos Lib "user32" Alias "SetWindowPos" (ByVal hwnd As Long, ByVal hWndInsertAfter As Long, ByVal x As Long, ByVal y As Long, ByVal cx As Long, ByVal cy As Long, ByVal wFlags As Long) As Long

Cng dng: Thit t v tr v trng thi ca s. Tham s km: HWnd Cn ca ca s cn nh v HWndInsertAfter Nh hm trn.

8. Declare Function EndDeferWindowPos Lib "user32" Alias "EndDeferWindowPos" (ByVal hWinPosInfo As Long) As Long

Cng dng: Cp nht cc v tr v tnh trng ca tt c cc ca s. Tham s km: HWinPosInfo Cn ca cu trc bn ly t lnh DerefWindowPos gn nht.

9. Declare Function BringWindowToTop Lib "user32" Alias "BringWindowToTop" (ByVal hwnd As Long) As Long

Cng dng: Chuyn ca s ln u danh sch lm l ra nu b khut. Tham s km: HWndCn ca ca s cn tc ng.

10. Declare Function ChildWindowFromPoint Lib "user32" Alias "ChildWindowFromPoint" (ByVal hWnd As Long, ByVal xPoint As Long, ByVal yPoint As Long) As Long

11. Declare Function ChildWindowFromPoint Lib "user32" Alias "ChildWindowFromPoint" (ByVal hWndParent As Long, ByVal pt As POINTAPI) As Long

Cng dng: Ly cn ca ca s con (Mc Child) khi a im ca ca s cha (Mc Parent) n. Tr tr v: Integer - Cn ca ca s con (Mc Child) u tin tho mn. Nu khng thy ca s con (Mc Child) no tr v cn ca ca s cha (Mc Parent). Zero nu im nm ngoi ca s cha (Mc Parent). Tham s km: HWnd Cn ca ca s cha (Mc Parent). Pt Tr ca im. XPoint Honh ca im. YPoint Tung ca im.

12. Declare Function ClientToScreen Lib "user32" Alias "ClientToScreen" (ByVal hwnd As Long, lpPoint As POINTAPI) As Long

Cng dng: Chuyn to theo ca s sang to theo mn hnh. Tham s km: HWnd Cn ca ca s lm cn c xc nh to . LpPoint Ddieemr tnh theo to ca so0o--truongphu--o0o

.........Gh thm:Chuyn Linh Tinhu trang

truongphu VIP

Bi vit: 4737Ngy tham gia: CN 04/11/2007 10:57 amn t: Cam c, Khnh haHasthanked: 13 timeBeenthanked: 488 time55 hm API lin quan n ca s Trch dn Gi bigi bi truongphu T.Su 20/03/2009 4:00 pm 13. Declare Function CloseWindow Lib "user32" Alias "CloseWindow" (ByVal hwnd As Long) As Long Cng dng: Thu nh ca s.

Tham s km: HWnd Cn ca ca s cn thu.

14. Declare Function CopyRect Lib "user32" Alias "CopyRect" (lpDestRect As RECT, lpSourceRect As RECT) As Long

Cng dng: Sao ni dung hnh ch nht. Tham s km: lpDestRect Hnh ch nht ch s nhn kt qu. LpSourceRect Hnh ch nht ngun b copy.

15. Declare Function DestroyWindow Lib "user32" Alias "DestroyWindow" (ByVal hwnd As Long) As Long

Cng dng: Ph hu ca s (K c cc ca s con (Mc Child) ca n). Tr tr v: Integer khc 0 s thnh cng. Zero nu tht bi. Tham s km: HWnd Cn ca ca s s ph hu.

16. Declare Function EnableWindow Lib "user32" Alias "EnableWindow" (ByVal hwnd As Long, ByVal fEnable As Long) As Long

Cng dng: Cho hiu lc hay v hiu ho mi d liu nhp vo ca s t bn phm hoc chut. Tr tr v: Integer True (Khc zero) nu trc ca s c php. Zero nu b v hiu ho. Tham s km: HWnd Cn ca ca s FEnable Gi tr logic. Nu l True, th Window s c hiu lc Enable. Cn False, s khng c hiu lc Disable.

17. Declare Function EnumChildWindows Lib "user32" Alias "EnumChildWindows" (ByVal hWndParent As Long, ByVal lpEnumFunc As Long, ByVal lParam As Long) As Long

Cng dng: Lit k cc ca s con (Mc Child) ca mt ca s cha (Mc Parent). Phi c Custom Control CBK.VBX mi s dng c. Tr tr v: Integer True (Khc zero) nu thnh cng. Zero nu tht bi. Tham s km: HWndParent Cn ca ca s cha (Mc Parent) cn lit k LpEnumFunc Bin tr ch n hm gi i vi mi ca s con (Mc Child). S dng tnh cht ProcAddress ca Custon Control CBK.VBX nhn hm bin tr (function pointer) gi li (callbacks). LParam Tr chuyn n cho s kin EnumWindows ca Custom Control trong lc lit k. ngha ca tr ny do lp trnh vin xc nh.

18. Declare Function EnumWindowStations Lib "user32" Alias "EnumWindowStationsA" (ByVal lpEnumFunc As Long, ByVal lParam As Long) As Long

Cng dng: Lit k danh sch ca s cp trn, cha ca s khai bo. Phi c Custom Control CBK.VBX mi s dng c. Tr tr v: Integer True (Khc zero) nu thnh cng. Tham s km: LpEnumFuncBin tr ch n hm gi i vi mi ca s con (Mc Child). S dng tnh cht ProcAddress ca Custon Control CBK.VBX nhn hm bin tr (function pointer) gi li (callbacks) LParam Tr chuyn n cho s kin EnumWindows ca Custom Control trong lc lit k. ngha ca tr ny do lp trnh vin xc nh.19. Declare Function EqualRect Lib "user32" Alias "EqualRect" (lpRect1 As RECT, lpRect2 As RECT) As Long

Cng dng: So snh 2 cu trc hnh ch nht. Tr tr v: Integer True (Khc zero) Nu cc to gc tri trn v gc phi di ca 2 hnh bng nhau. Zero nu khc. Tham s km: LpRec1, lpRec2: Hai hnh ch nht cn so snh.

20. Declare Function FindWindow Lib "user32" Alias "FindWindowA" (ByVal lpClassName As String, ByVal lpWindowName As String) As Long

Cng dng: Tm ca s u tin trong danh sch ca s tho mn iu kin. Tr tr v: Integer - Cn ca ca s tho mn. Zero nu khng c ca s no. Tham s km: LpClassName Bin tr ch n chui kt thc bng null cha tn lp i tng i vi ca s. Nu bng zero chp nhn bt c lp no. LpWindowName Bin tr ch n chui kt thc bng null cha tn tiu ca s. Nu bng 0, chp nhn bt c tiu no.

21. Declare Function FindWindowEx Lib "user32" Alias "FindWindowExA" (ByVal hWnd1 As Long, ByVal hWnd2 As Long, ByVal lpsz1 As String, ByVal lpsz2 As String) As Long

Cng dng: Tm ca s u tin trong danh sch ca s tho mn iu kin. Tr tr v: Integer - Cn ca ca s tho mn. Zero nu khng c ca s no. Tham s km: hwndParent Cn cu ca s cha (Cp Parent) c cc ca s con tm. Nu hwndParent l NULL, hm s s dng desktop nh ca s cha parent. Hm s tm trong s cc ca s l ca s con (Cp Child) ca desktop. Windows 2000 tr ln: Nu hwndParent l HWND_MESSAGE, hm s tm tt c ca s dng message-only windows. hwndChildAfter L cn ca ca s con (cp child). Tm kim bt u t ca s con k tip theo th t trc Z. Ca s con phi l mt cp k tip ca hwndParent, khng th cp thp hn. Nu hwndChildAfter l NULL, tm kim s bt u vi ca s con u tin(Cp child) ca hwndParent. Nh rng nu c hai hwndParent v hwndChildAfter l NULL, hm s tm tt c mc top ca dng message-only windows. lpszClass Lp cn tm kim. lpszWindow Tiu ca ca s cn tm. Nu l NULL, Tm tt c.

22. Declare Function FlashWindow Lib "user32" Alias "FlashWindow" (ByVal hwnd As Long, ByVal bInvert As Long) As Long

Cng dng: Chiu sng ca s, ngay c khi n cha c kch hot (inactive) Tr tr v: Integer True (Khc zero) nu ca s c kch hot trc khi gi. Tham s km: HWnd Cn ca ca s cn chiu sng. BInvert Integer - True (Khc zero) nu bt, False quay li trng thi trc

23. Declare Function GetActiveWindow Lib "user32" Alias "GetActiveWindow" () As Long

Cng dng: Nhn cn ca ca s ang kch hot. Tr tr v: Integer - Cn ca ca s ang kch hot. Zero nu khng c.

24. Declare Function GetClassInfo Lib "user32" Alias "GetClassInfoA" (ByVal hInstance As Long, ByVal lpClassName As String, lpWndClass As WNDCLASS) As LongCng dng: Nhn bn sao cu trc Wndclass cha thng tin v lp khai bo. Tr tr v: Integer - True (Khc zero) khi thnh cng. Zero nu khng thy lp tho mn. Tham s km: hInstance Cn ca i tng s hu lp. Dng NULL nhn thng tin v cc lp Windows chun. LpClassName Tn ca lp cn tm. C th dng ID resource. LpWndClass WndCLASS - Cu trc cha kt qu.o0o--truongphu--o0o

.........Gh thm:Chuyn Linh Tinhu trang

truongphu VIP

Bi vit: 4737Ngy tham gia: CN 04/11/2007 10:57 amn t: Cam c, Khnh haHasthanked: 13 timeBeenthanked: 488 time55 hm API lin quan n ca s Trch dn Gi bigi bi truongphu T.Su 20/03/2009 4:05 pm 25. Declare Function GetClassLong Lib "user32" Alias "GetClassLongA" (ByVal hwnd As Long, ByVal nIndex As Long) As Long

Cng dng: Ly thng tin lp. Tr tr v: Tu theo yu cu. Tham s km: HWnd Cn ca ca s nhn thng tin i vi lp cha n. NIndex Thng tin cn nhn. Nu l GLC_MENUNAME ly tn hay resource ID i vi trnh n ca lp. Nu l GLC_WNDPROC nhn v tr ca hm ca s lp (Hm phn i vi cc ca s trong lp).

26. Declare Function GetWindowLong Lib "user32" Alias "GetWindowLongA" (ByVal hwnd As Long, ByVal nIndex As Long) As Long

Cng dng: Ly thng tin t cu trc ca s. Tr tr v: Theo yu cu. Tham s km: HWnd Cn ca ca s cn ly thng tin. NIndex Thng tin cn ly, tu thuc vo cc hng sau:

GWL_EXSTYLE: Kiu ca s m rng. GWL_STYLE: Kiu ca s. GWL_WNDPROC: V tr ca hm x l ca s ny. DWL_MSGRESULT: Tr c tr v bi thng bo bn trong hm i thoi. DWL_DLGPROC: V tr ca hm x l khung i thoi i vi ca s ny. DWL_USER: c nh ngha bi ng dng.

27. Declare Function SetWindowLong Lib "user32" Alias "SetWindowLongA" (ByVal hwnd As Long, ByVal nIndex As Long, ByVal dwNewLong As Long) As Long

Cng dng: Thit t thng tin trong cu trc ca s. Tr tr v: Integer - Tr trc ca d kin cn t gi tr. Tham s km: HWnd Cn ca ca s t thng tin. NIndex Thng tin cn t. Xem hm trn. DwNewLong Tr mi cn t.

28. Declare Function GetWindowText Lib "user32" Alias "GetWindowTextA" (ByVal hwnd As Long, ByVal lpString As String, ByVal cch As Long) As Long

Cng dng: Ly tiu ca ca s hay ni dung ca iu khin. Tr tr v: Integer - chiu di chui c ly khng tnh k t null ng cui. Tham s km: HWnd Cn ca ca s cn ly. LpString Bin lu kt qu l tn chui cn ly. Phi khai bo ti thiu aint+1. Dng cng thc sau ly tn chui: Chui = Left (lpString, len (trim(lpString)). Aint Chiu di chui lpString

29. Declare Function GetWindowTextLength Lib "user32" Alias "GetWindowTextLengthA" (ByVal hwnd As Long) As Long

Cng dng: Ly chiu di ca tiu ca s hay ni dung ca mt iu khin. Tr tr v: Chiu di chui ca s.. Tham s km: HWnd Cn ca ca s cn ly.

30. Declare Function GetWindowWord Lib "user32" Alias "GetWindowWord" (ByVal hwnd As Long, ByVal nIndex As Long) As Integer

Cng dng: Ly thng tin t cu trc ca ca s ch nh. Tr tr v: Theo yu cu. Tham s km: HWnd Cn ca ca s cn ly. NIndex Thng tin cn ly, ph thuc vo mt trong cc hng: GWW_HINSTANCE: Cn ca ch ca s. GWW_HWNDPARENT: Cn ca s cha (Mc Parent) n. GWW_ID: S ID ca ca s con (Mc Child) bn trong khung i thoi.

31. Declare Function SetWindowWord Lib "user32" Alias "SetWindowWord" (ByVal hwnd As Long, ByVal nIndex As Long, ByVal wNewWord As Long) As Long

Cng dng: t thng tin trong cu trc ca s. Tr tr v: Integer - Tr trc khi t ca d liu cn thay. Tham s km: HWnd Cn ca ca s cn t. NIndex Nh hm trn. DwNewWord - Tr mi cn t.

32. Declare Function InflateRect Lib "user32" Alias "InflateRect" (lpRect As RECT, ByVal x As Long, ByVal y As Long) As Long

Cng dng: Thay i kch thc ca hnh ch nht. Tham s km: LpRect Cu trc hnh ch nht cn iu chnh X Chiu rng c tng ln hay gim i. Y Chiu cao tng ln hay gim i.

33. Declare Function IntersectRect Lib "user32" Alias "IntersectRect" (lpDestRect As RECT, lpSrc1Rect As RECT, lpSrc2Rect As RECT) As Long

Cng dng: Np vo hnh ch nht ch phn chung ca 2 hnh ch nht n. Tr tr v: Integer (Khc zero)- Nu hnh ch nht ch khng rng. Zero nu rng. Tham s km: LpDestRect - Hnh ch nht ch. LpScr1Rect, lpSrc2Rect: Hai hnh ch nht giao nhau.

34. Declare Function InvalidateRect Lib "user32" Alias "InvalidateRect" (ByVal hwnd As Long, lpRect As RECT, ByVal bErase As Long) As Long

Cng dng: Lm sai bt hp l tt c hay mt phn vng lm vic ca mt ca s. v li ng lc, ng ch. Tham s km: HWnd Cn ca ca s cn lm mt hp l. LpRect hnh ch nht m t phn khng hp l. BErase Cho v True (Khc zero) xo vng ch nh trc khi v li.

35. Declare Function IsChild Lib "user32" Alias "IsChild" (ByVal hWndParent As Long, ByVal hwnd As Long) As Long

Cng dng: Xc nh ca s cn xt c phi ca s con (Mc Child) thuc nhnh ca s khc. Tr tr v: Integer - True (Khc zero) nu HWnd l ca s con (Mc Child) hay hu du ca HWndParent Tham s km: HWnd Cn ca ca s cn kim tra HWndParent Cn ca ca s cha (Mc Parent).

36. Declare Function IsIconic Lib "user32" Alias "IsIconic" (ByVal hwnd As Long) As Long

Cng dng: Kim tra ca s c phi thu nh thnh biu tng khng. Tr tr v: Integer - True (Khc zero) nu b thu nh Tham s km: HWnd Cn ca ca s cn kim tra.o0o--truongphu--o0o

.........Gh thm:Chuyn Linh Tinhu trang

truongphu VIP

Bi vit: 4737Ngy tham gia: CN 04/11/2007 10:57 amn t: Cam c, Khnh haHasthanked: 13 timeBeenthanked: 488 time55 hm API lin quan n ca s Trch dn Gi bigi bi truongphu T.Su 20/03/2009 4:11 pm 37. Declare Function IsRectEmpty Lib "user32" Alias "IsRectEmpty" (lpRect As RECT) As Long

Cng dng: Kim tra xem hnh ch nht c rng khng. Tr tr v: Integer - True (Khc zero) nu rng. Zero nu khng rng. Tham s km: LpRect Hnh ch nht cn kim tra.

38. Declare Function IsWindow Lib "user32" Alias "IsWindow" (ByVal hwnd As Long) As Long

Cng dng: Xc nh xem c phi l cn ca s khng.Tr tr v: Integer - True (Khc zero) nu ng l cn ca s. Tham s km: HWnd Cn cn kim tra.

39. Declare Function IsWindowEnabled Lib "user32" Alias "IsWindowEnabled" (ByVal hwnd As Long) As Long

Cng dng: Kim tra ca s c hiu lc (enabled) khng. Tr tr v: Integer - True (Khc zero) nu c hiu lc. Tham s km: HWnd Cn ca ca s cn kim tra

40. Declare Function IsWindowVisible Lib "user32" Alias "IsWindowVisible" (ByVal hwnd As Long) As Long

Cng dng: Kim tra xem ca s xem c th nhn thy n trn mn hnh, k c ca s b ca s khc xp chng ln trn. Tr tr v: Integer - True (Khc zero) nu nhn thy c. Tham s km: HWnd Cn ca ca s cn kim tra.

41. Declare Function IsZoomed Lib "user32" Alias "IsZoomed" (ByVal hwnd As Long) As Long

Cng dng: Kim tra xem ca s xem c phng to ton mn hnh khng. Tr tr v: Integer - True (Khc zero) nu phng ton mn hnh. Tham s km: HWnd Cn ca ca s cn kim tra.

42. Declare Function LockWindowUpdate Lib "user32" Alias "LockWindowUpdate" (ByVal hwndLock As Long) As Long

Cng dng: Kho ca s, khng cho cp nht. Mi ln ch c 1 ca s b kho. Tr tr v: Integer - True (Khc zero) nu thnh cng. Zero nu c ca s khc b kho. Tham s km: HWndLock Cn ca ca s cn kho.

43. Declare Function MapWindowPoints Lib "user32" Alias "MapWindowPoints" (ByVal hwndFrom As Long, ByVal hwndTo As Long, lppt As Any, ByVal cPoints As Long) As Long

Cng dng: Chuyn i cc im theo cc to s dng (client) ca mt ca s sang cc to cu ca s khc. Tham s km: HWndFrom, HWndTo Cn ca ca s ngun v ch. Nu mt cn l to theo mn hnh th chn cn l cn ca Desktop. Lppt im cht POINTAPI ca mng chuyn i. CPoints S im chuyn i.

44. Declare Function MoveWindow Lib "user32" Alias "MoveWindow" (ByVal hwnd As Long, ByVal x As Long, ByVal y As Long, ByVal nWidth As Long, ByVal nHeight As Long, ByVal bRepaint As Long) As Long

Cng dng: Di chuyn v nh li kch thc ca s. Tham s km: HWnd Cn ca ca s cn di chuyn. X,y To mi ca nh tri ca s. NWidth, nHeight Chiu rng v chiu cao mi ca ca s. BRepaint Integer - True (Khc zero) nu mun ca s v li t ng sau khi di chuyn. False (zero) nu ng dng t v li.

45. Declare Function OffsetRect Lib "user32" Alias "OffsetRect" (lpRect As RECT, ByVal x As Long, ByVal y As Long) As Long

Cng dng: Di chuyn v thay i kch thc mt vng hnh ch nht. Lu Cc chiu kch thc mi khng qu 72767 n v. Tham s km: LpRect - Hnh ch nht cn di chuyn v thay i kch thc. X - Khong cch dch chuyn cho gc tri trn hnh ch nht. Y - Khong cch dch chuyn cho gc phi di hnh ch nht.

46. Declare Function PostMessage Lib "user32" Alias "PostMessageA" (ByVal hwnd As Long, ByVal wMsg As Long, ByVal wParam As Long, ByVal lParam As Long) As Long

Cng dng: Gi mt ch lnh vo hng i message queue ca mt ca s. Cc ch lnh ny s c x l theo tun t. Tr tr v: Integer - True (Khc zero) nu thnh cng. Tham s km: HWnd Cn ca ca s nhn ch lnh. WMsg Hng s ID ca ch lnh. (Xin tra cng dng ca cc hng bng khc) WParam, lParam Cc tham s tu thuc vo ch lnh.

47. Declare Function PtInRect Lib "user32" Alias "PtInRect" (lpRect As RECT, pt As POINTAPI) As Long

Cng dng: Kim tra im c nm trong hnh ch nht khng. Tr tr v: Integer - True (Khc zero)nu nm trong. Zero nu ngoi. Tham s km: LpRect Hnh ch nht kim tra. pt DDieemr cn kim tra.

48. Declare Function RedrawWindow Lib "user32" Alias "RedrawWindow" (ByVal hwnd As Long, lprcUpdate As RECT, ByVal hrgnUpdate As Long, ByVal fuRedraw As Long) As Long

Cng dng: V li ca s. Tr tr v: Integer - True (Khc zero)nu thnh cng. Zero nu tht bi. Tham s km: HWnd Cn ca ca s v li. LprcUpdate - Hnh ch nht bn trong ca s cn v li. HrgnUpdate - Cn ca min m t khu vc cn v li. FuRedraw - C yu cu v li, l mt trong cc hng sau: RDW_ERASE - Nn phn v li phi xo trc khi v. RDW_FRAME - Cp nht khung v li, nu khung v trm ln tiu , thc n, dng trng thi.... RDW_INTERNALPAINT - Gi ch lnh WM_PAINT cho ca s. RDW_INVALIDATE - Yu cu v li khu vc khung HrgnUpdate. RDW_NOERASE - Khng xo nn ca khung cn v li. RDW_NOFRAME - Khng cp nht nu khung v li trm ln tiu , thc n, dng trng thi. RDW_NOINTERNALPAINT - Cm cc ch lnh WM_PAINT i vi ca s. RDW_VALIDATE - Tha nhn khung v li hp l. RDW_ERASENOW - Xo ngay khung v li. RDW_UPDATENOW - Cp nht ngay khung v li. RDW_ALLCHIDREN - Thao tc v li thc hin lun trn c cc ca s con (Mc Child) nm trong khung v li. RDW_NOCHIDREN - Khng v li cc ca s con (Mc Child), nu n nm trong khung v li.

49. Declare Function ScreenToClient Lib "user32" Alias "ScreenToClient" (ByVal hwnd As Long, lpPoint As POINTAPI) As Long

Cng dng: Chuyn to mt im trn mn hnh thnh to tng i ca ca s. Tham s km: HWnd Cn ca ca s lm cn c to . LpPoint im cn chuyn

50. Declare Function ShowWindow Lib "user32" Alias "ShowWindow" (ByVal hwnd As Long, ByVal nCmdShow As Long) As Long

Cng dng: iu khin hin ca s.Tr tr v: Integer - Nu cr c nhn thy trc . Zero nu ngc li. Tham s km: HWnd Cn ca ca s cn iu khin. NCmdShow - Integer - L cc ch lnh hng sau:

SW_HIDE: Giu ca s. SW_MINIMIZE: Thu nh thnh biu tng. SW_RESTORE: Hin li nh lc ban u, kch hot. SW_SHOW: Hin li nh lc cha giu, kch hot SW_SHOWMAXIMIZED: Hin m rng ti a, kch hot. SW_SHOWMINIMIZED: Hin nh biu tng, kch hot. SW_SHOWMINNOACTIVE: Thu nh ca s, khng lm thay i ca s ang kch hot. SW_SHOWNA: Hin mt ca s kch thc v v tr hin ti, khng lm thay i ca s ang kch hot. SW_SHOWNOACTIVE: Hin ca s nh trc khi giu, khng lm thay i ca s ang kch hot. SW_SHOWNORMAL: Hin ra bnh thng.

51. Declare Function SubtractRect Lib "user32" Alias "SubtractRect" (lprcDst As RECT, lprcSrc1 As RECT, lprcSrc2 As RECT) As Long

Cng dng: Np vo ca s ch phn tr ca 2 ca s khc. Tr tr v: Integer - True (Khc zero) nu thnh cng. Zero nu tht bi. Tham s km: LpDestRect - Hnh ch nht ch. lprcSrc1, lprcSrc2: Hai hnh ch nht ngun tr nhau.

52. Declare Function UnionRect Lib "user32" Alias "UnionRect" (lpDestRect As RECT, lpSrc1Rect As RECT, lpSrc2Rect As RECT) As Long

Cng dng: Np vo ca s ch phn cng ca 2 ca s khc. Tr tr v: Integer - True (Khc zero) nu thnh cng. Zero nu tht bi. Tham s km: LpDestRect - Hnh ch nht ch. lprcSrc1Rect, lprcSrc2Rect: Hai hnh ch nht ngun cn cng.

53. Declare Function UpdateWindow Lib "user32" Alias "UpdateWindow" (ByVal hwnd As Long) As Long

Cng dng: Cp nht ngay ca s. Tham s km: HWnd Cn ca ca s cn cp nht.

54. Declare Function ValidateRect Lib "user32" Alias "ValidateRect" (ByVal hwnd As Long, lpRect As RECT) As Long

Cng dng: Hp l ho ca s, khng cn v li. Tham s km: HWnd Cn ca ca s cn hp l ho. LpRect - Hnh ch nht cn hp l ho. Nu t zero th hp l ton b ca s.

55. Declare Function WindowFromPoint Lib "user32" Alias "WindowFromPoint" (ByVal xPoint As Long, ByVal yPoint As Long) As Long

Cng dng: Ly cn ca s cha (Mc Parent) im cn khai bo. Tr tr v: Integer - Cn ca ca s cha (Mc Parent) im. Zero nu khng c ca s no. Tham s km: XPoint, Ypoint: im theo to mn hnh.o0o--truongphu--o0o

.........Gh thm:Chuyn Linh Tinhu trang

truongphu VIP

Bi vit: 4737Ngy tham gia: CN 04/11/2007 10:57 amn t: Cam c, Khnh haHasthanked: 13 timeBeenthanked: 488 timeWINDOWS API Trch dn Gi bigi bi truongphu T.Su 20/03/2009 4:21 pm WINDOWS API Khm ph t A n Z

Bn cht ca Windows API.(Bi sau y l Copy t a ch trn)

Trong lp trnh Visual Basic c lp hoc Visual Basic for Application, Microsoft cung cp cho chng ta mt b cc hm lp sn, hng trm hm API (Aplication Programming Interface) c lu trong cc tp th vin lin kt ng (Tp ui *.DLL - Dynamic Link Library). l cng c tuyt vi cho php bn pht trin ng dng cc mnh, ti sao bn li b qua v khng s dng n?Ti s cng bn khm ph nhng g m Microsoft cung cp cc hm Windows API trong b Visual Studio. Tuy nhin v khun kh cng nh kch thc ca bi vit, ta ch i vo cc nt chnh cn bn nht, bn c th tham kho trong Help hoc cc bi vit ca Nguyn H Thin ng, Nguyn Th Thanh Phng ti WebsiteLH.

I. Hm API - Nhn t gc ngi t c iu kin hc Tin hc

Nu bn cha tng lp trnh nhng chng trnh ln, bn s pht hong khi c khai bo (rc ri v k cc!!!) ca API:M: Chn ht1. Private Declare Function CallNextHookEx Lib "user32" Alias "CallNextHookEx" (ByVal hHook As Long, ByVal ncode As Long, ByVal wParam As Long, lParam As Any) As Long

Tuy nhin bn c th chp phn khai bo trn tht n gin bng Text API Viewer. Theo cc chuyn gia v Tin hc th ng bao gi s dng thng hm API trong th tc thit k chnh ca mnh. Thay vo ta thit k mt hm hay th tc Visual Basic thay th hm API n gin ho (Gi l wrapper - Ti khng tm c t ting Vit tng ng ni bn cht ca n.)V d mt wrapper sau:M: Chn ht1. Public Sub ThoatVaTatMay ()2. 'Thot v tt my3. Dim thoat4. Thoat = ExitWindowsE 2,0)5. End Sub

Khi , trong chng trnh Visual Basic ca ta khi cn thot v tt my ch vic gi:M: Chn ht1. ThoatVaTatMay

hocM: Chn ht1. Call ThoatVaTatMay

L my tnh thc hin thot v tt my. Chnh v th, khi hc vin dn tc c hc ph cp API ti Trung tm Dy ngh v Ph cp Tin hc Min ni ABC ca chng ti gi chc nng to Wrapper chng khc dn nhn Ting Vit cho tng loi thuc ty API vy. Nn khi lp trnh ta nn to cc Wrapper tng ng vi cc chc nng m mnh mun s dng. cng l li khuyn ca Bill Gate cho chng ta. to cc wrapper bn hy chn mt Module vo Project. Nu my ca bn khng ci Visual Basic th bn phi copy hay nh tht chnh xc nhng dng khai bo dng nh khai bo trn, tht kh s nu nh phn ting Anh ca bn khng tho lm, v mt sai st nh c th dn ti li nng cho my. Nu my c ci Visual Basic th qu tt, ch vic khi ng API Viewer hin bng giao tip nh th ny:Bn phi m cc tp TXT trong th mc API ca th mc ci Visual Basic trong my bn. V d tp Win32api.TXT. My s hi c chuyn thnh dng c s d liu khng, th hy chn c s dng API thun li v nhanh chng hn. Khi copy vo clipboard, bn c th dn vo module ca mnh. N s thnh dng tng t nh th ny:M: Chn ht1. Declare Function CallNextHookEx Lib "user32" Alias "CallNextHookEx" (ByVal hHook As Long, ByVal ncode As Long, ByVal wParam As Long, lParam As Any) As Long

Bn phi nh thm vo trc khai bo trn cm t Private c:M: Chn ht1. Private Declare Function CallNextHookEx Lib "user32" Alias "CallNextHookEx" (ByVal hHook As Long, ByVal ncode As Long, ByVal wParam As Long, lParam As Any) As Long

Ti xin php c nhc li 2 t kho khai bo trong Visual Basic l Private v Public.Private - Khai bo dng ring trong Module. C ngha l bn ch s dng c n trong Module ny. Nu chn Module khc s khng s dng c n.Public - Khai bo dng chung, bn c th dng n bt c Module no.Bn bit y, ta khai bo cc hm API th li dng Private, cn khai bo cc Wrapper li dng Public. chnh l mo m chng ta hc trm c ca Microsoft trnh li h thng.

Cc hm m ta thit k trong Visual Basic c iu khc vi cc hm API. Ti sao? V hm ta thit k (Tm gi l hm Visual Basic) thng ch c mt kt qu tr v ca hm lm cn c x l. Cn hm API khng phi ch c mt kt qu tr v m n cn tr v tip cc gi tr vo cc bin m ta truyn cho n. Ngha l c gi n l hm th bn cht n l mt th tc, ta gi hm thc hin v kim tra xem th tc trong hm c thc hin c thnh cng hay khng m thi.iu ny ch hi ging nh khi bn lp trnh vi hm Visual Basic m bn khai bo Public Static - Bin tnh dng chung, lm bin i n trong hm ca bn. Ta nghin cu mt cch tng qut nh sau hiu cn k:Gi s mt Wrapper bn dng cng thc:M: Chn ht1. TENBIEN=TEN_HAM_API(Bien1, Bien2, Bien3)

Thc ra y l mt th tc. Nu TENBIEN0 th th tc ny thnh cng.Khi cc Bien1, Bien2, Bien3 truyn vo, s c mt gi tr mi. Lp trnh API lc ny khng ch x l TENBIEN, m bn c th x l cc Bien1, Bien2, Bien3. mi thc s l sc mnh ca API.Bn cht lp trnh ca bin l mt vng cc nh trong RAM c t tn tin s dng. Ti mt thi im bin ch c mt gi tr duy nht. Ngi ta c th dng bin ny lm gi tr nh v hoc kch thc lu tr cho bin kia. Cc hm API c th c gi nhiu ln s dng kt qu tr v ca cc bin truyn Bien1, Bien2, Bien3 x l theo quy lut xc nh no .

II. Xc nh mc ch khi s dng WinAPI.

Trong lp trnh API c th phn lm nhiu mc ch s dng, ti cha tng c hc Tin hc mt cch chnh thng, nn c th kh nng phn tch v tng hp nhng bi vit trn INTERNET ca Microsoft khc vi nhng bi hc ca nhng hc vin hc Tin hc chnh quy. Nhng ti ngh chng ta nm bn cht ca vn mi l iu quan trng.C 3 vn chnh khi s dng v khai thc WinAPI l:a. K thut Subclass: ci t cc i tng Visual Basic.b. K thut Hook: Cu mc t chng trnh Visual Basic vi cc chng trnh khc. Ly gi tr nhp vo cc chng trnh khc ca ngi s dng a vo chng trnh ca mnh x l.c. K thut Multicasting: Dng mt i tng to lp theo di, chi phi cc i tng khc ca Visual Basic.Bn c th s dng tng K thut hoc c 3. Tuy nhin bc u cha tho, bn hy thc hin tng K thut mt cho thnh tho. Sau khi kim sot c kh nng ca mnh, bn s trnh s dng WinAPI ci t Windows v my tnh.Xin c tt c cc bi vit ca Nguyn H Thin ng, Nguyn Th Thanh Phng v Nguyn Phng Tho v lp trnh Visual Basic trn WebsiteLH.

Khi nm r bn cht ca Windows API lp trnh su vi h thng, ta cng cn hiu bit s b v H iu hnh Windows cch thc iu khin ca H iu hnh i vi ng dng c th can thip nh b sung chc nng thm ch bin i n, bt thc hin theo hng ca mnh, ngay c khi hng ny ngc hn vi cng dng truyn thng !!!Cc chng trnh ng dng trong Windows c th c nhiu ca s phc v cho n. Ca s c th l Form thm ch l Dialog. Mi ca s ny u c mt handle (Cn) h thng nhn bit do chnh h iu hnh Windows to ra. Cn ca s ny l ch s duy nht.

H iu hnh v chng trnh ng dng u duy tr cc hng i cc ch lnh cn thc hin. Mi ng dng u c hng i (Message Queue). Khi ngi s dng ra lnh hoc c mt bin c, cc chng trnh iu khin thit b nhp (INPUT) s chuyn cc thng tin vo thnh ch lnh v t ch lnh ny vo hng i h thng (System Message Queue). H iu hnh ly ln lt cc ch lnh trong hng i h thng kim tra xc nh ca s no s tip nhn thi s t vo hng i ca n (thread message) mt ch lnh tng ng. Cc chng trnh ng dng cn c vo ch lnh ny thc hin cng nh x l chng.Cc ca s ging nh mt ng c t ng chy theo mt vng lp. Tip "nhin liu" cho cc "ng c" ny l h iu hnh Windows. H iu hnh Windows nhn cc ch lnh (message) t hng i ca h iu hnh, dng mt hm dng API (Nh k 1 - Hm ny bn cht l mt th tc) cung cp ch lnh ti ca s thng qua cn (handle) ca ca s.C ngha l bn thn trong mi ca s lun c mt hm gi l WinProc (i khi gi l WinMain()). Hm ny l ct li x l ca ca s. Trong hm, n lp i lp li lin min 2 dng lnh sau thng qua cu trc:Do While 0 GetMessage (message, 0, 0,0)TranslateMessage messageDispatchMessage messageLoop

Trong message l ch lnh m H iu hnh cung cp, thng qua cn (handle) ca ca s. ng nhin, nu ch lnh c gi tr WM_QUIT th hm WinProc trong ca s chm dt vng lp.Cn nu ch lnh message khc gi tr trn, th 2 dng lnh trn s thc hin. C th:TranslateMessage message -> Dch ch lnh thnh dng d liu khc t kt qu ny vo hng i ca ng dng. DispatchMessage message ->Nhn ch lnh t hm GetMessage v gi cho h thng. H thng s a ch lnh cho ng dng.Windows c hng ngn ch lnh khc nhau l cc hng dng WM_* (Windows t tn cho tin gi thi, v bn cht cc hng ny l mt con s - Rt kh nh. Nu phn tch chi tit ra, nhng con s ny li l dy s 0 v 1, tc l bt tt y m). Mt hm WinProc lun nhn vo trong n cc bin theo khun mu sau x l:M: Chn ht1. Function WinProc(hwnd as Long, wc as WNDCLASSEX, message as MSG, wParam as Long, lparam as Long)

Nu hm WinProc khng x l cc ch lnh, n phi a tr ch lnh cho h iu hnh x l thng qua hm DefWindowProc. Hm DefWindowProc gi li ch lnh WM_CLOSE cho WinProc. Hm WinProc s li gi tr WM_CLOSE cho DefWindowProc mt ln na nh m t trn.Bn c th thy, kt qu v c ch x l rt lng nhng. Ta c th tm li s b nh sau:

Cc ch lnh a ti ngn ch trn thng thng t cc ngun sau:1. H thng t vo2. Chng trnh khc t vo3. Chnh chng trnh ca mnh t vo thng qua cc hm SendMessage() v PostMessage().Tuy nhin nu bn chn s dng hm SendMessage() th sau khi ch lnh c WinProc ly ra x l th chng trnh mi tip tc chy tip lnh k sau. Cn bn dng PostMessage() ch c tc dng t ch lnh vo hng i v thc hin ngay lnh k tip.T y ta nhn thy vic x l h thng ca Windows thng qua c ch trn th gin n i rt nhiu. Ta s c cc hng gii quyt tip theo nh sau:1. Nu ta thit k mt hm WinProc() mi, V d NewWinProc(), thay th hm WinProc() truyn thng- Ri ta i a ch ca WinProc() gc sang a ch ca WinProc() m ta thit k. Trong th tc ny s dng cu trc Select Case tu vo ch lnh message m x l theo mnh. - Trng hp ch lnh message no khng th vit c th tc thi hnh (Khng cn thay i hoc kh qu) th ta gi th tc DefWinProc() ca Windows x l. (Tc l d th lm, kh tr li y m). y chnh l K thut Subclass.- Tuy nhin nu nh hm WinProc() c, x l tt mt s tnh nng no th ta c th tn dng th tc bng cch gi li bng hm CallWindowProc().- Thm ch ta c th lng WinProc() vo trong NewWinProc() x l(Xem cc bi v d ca Nguyn Phng Tho c s dng API).2. Trng hp khng th thay c hm WinProc() bng NewWinProc() (V d nh bn lp trnh vi cc chng trnh ng dng khc nh Winword, Excel...) bn phi chn cc ch lnh trc khi n c ly ra khi hng i. chnh l K thut Hooking, mt K thut cc k mnh lm vic vi Windows.Trc khi ch lnh c hm SendMessage() ly t hng i gi i, hoc cng c th ch lnh c ly bng hm PickMessage() hay GetMessage(), ta c th ng k vi Windows s dng b lc HookFilter. Khi nhng ch lnh cn x l ng k, u qua HOOK Filter. Ta ch vic vit mt th tc dng hm WinProc ly ch lnh t HOOK Filter x l. (Xem bi vit chn cc th tc in v nhp d liu ca Nguyn Phng Tho).3. Cc c im ca lp ca s:- Mi ng dng c th to ra nhiu ca s, thng thng cc ca s ny c nhng c im ging nhau v c phn theo tng lp CLASS. Khi lp trnh, bao gi ta cng ng k lp vi h thng thng qua mt hm l RegisterClassEx(). Khi lp c ng k (Ch 1 ln) th cc thng tin window v a ch hm WinProc s c lu trong sut thi gian m n tn ti.- Ta c th thay i cc thng tin trong b ng k lp, khi n s nh hng n ton b ca s trong lp ny. Bn thn mn! Nh vy bn nm chc v c ch lm vic ca Windows v cc th tc h thng ca n. Hi vng bn hy c tht k v hiu r v n, nhng bi vit sau chng ta s m x gii phu t nhng hm API c s c d dng hn.o0o--truongphu--o0o

.........Gh thm:Chuyn Linh Tinhu trang

truongphu VIP

Bi vit: 4737Ngy tham gia: CN 04/11/2007 10:57 amn t: Cam c, Khnh haHasthanked: 13 timeBeenthanked: 488 timeX l ca API khi lm vic vi phn cng v h thng Trch dn Gi bigi bi truongphu T.Su 20/03/2009 4:34 pm (Bi sau y l Copy t a ch trn)

Bn thn mn! thun li cng nh mi ngi cng hc tp v tham gia xy dng n "Xy dng b g ting Vit tng tc" chng ta hy lm quen vi cc hm API lin quan n vn ny. Mong rng y s l c s c bn chng ta cng tip cn tm hiu c ch xy dng mt b g ting Vit n gin ti Website L Hon. Bn c th xem cc hm lin quan n UNICODE hoc cc bi hc c bn ban u Visual Basic ti trang http://www.bangden.com/soncuoc. Chi tit v v d cc hm bn c th tm trang ny.

1. Cc hm vi chut, con tr

Visual Basic cung cp s ym tr cho chut v tr chut (Tr chu s tc ng ca chut thng iu khin) cng nh tr thanh (Tr chu tc ng ca bn phm thng nhp liu), ti mt thi im ch c duy nht mt tr chut v mt tr thanh. Theo ngm nh, v tr ca tr chut v tr thanh tnh theo to ca mn hnh.Windows cung cp kh nng hn ch con chut vo mt vng khai bo trn mn hnh gi l clipping. C hai hm c bn l:

1. Declare Function ClipCursor Lib "user32" Alias "ClipCursor" (lpRect As Any) As Long

Cng dng: Gii hn tr chut i vi vng ch nh.Tham s km: LpREct - Vng tr chut nh v.

2. Declare Function GetClipCursor Lib "user32" Alias "GetClipCursor" (lprc As RECT) As Long

Cng dng: Nhn hnh ch nht lm vng lm vic cho tr chut.Tham s km: Lprc - Hnh ch nht nhn vng lm vic.

nhn v tr tr chut, hay t tr chut vo mt v tr ta s dng hai hm:

3. Declare Function GetCursorPos Lib "user32" Alias "GetCursorPos" (lpPoint As POINTAPI) As Long

Cng dng: Xc nh v tr hin ti ca con tr chut.Tham s km: LpPoint - Cu trc tip nhn to con tr trn mn hnh.

4. Declare Function SetCursorPos Lib "user32" Alias "SetCursorPos" (ByVal x As Long, ByVal y As Long) As Long

Cng dng: t con tr chut vo mt v tr.Tham s km: X, Y To mn hnh cn t v tr.

Cc con tr theo mun c th c to t cp bitmap n sc, kch thc c th ti 32x32 pixel, n c mt cn 16 bit qun l.Khi mt v tr no , ta thao tc chut nh click, d-click, hoc drag. Cc thao tc ny s nh hng n mt ca s X no . Ngay sau ca s X ny s c nhn focus ngay c khi trc n mt focus. V vy, ca s ny cn c gi l capture (Hay ca s n chn hay ca s chp).

1. Cc hm lin quan n tr chut c bn gm:

5. Declare Function CopyCursor Lib "user32" Alias "CopyCursor" (ByVal hcur As Long) As Long

Cng dng: Copy thm mt tr chut. Tham s km: hCur Cn ca tr chut cn sao chp.

6. Declare Function GetCapture Lib "user32" Alias "GetCapture" () As Long

Cng dng: Xc nh ca s n chn cc tnh hung chut.Tr tr v: Integer - Cn ca s chn tnh hung chut. Zero nu khng c ca s no.

7. Declare Function GetCursor Lib "user32" Alias "GetCursor" () As Long

Cng dng: Nhn cn ca tr chut hin ti.Tr tr v: Integer cn ca tr chut hin ti. Zero nu khng c tr chut hin ti.

8. Declare Function GetDoubleClickTime Lib "user32" Alias "GetDoubleClickTime" () As Long

Cng dng: Xc nh thi gian 2 ln nhy ca th tc Dclick.Tr tr v: Thi gian tnh theo mili giy.

9. Declare Function LoadCursor Lib "user32" Alias "LoadCursorA" (ByVal hInstance As Long, ByVal lpCursorName As String) As Long

Cng dng: Ti mt tr chut.Tham s km: HInstance Cn ca chng trnh m t tr chutLpCursorName - Ch s ID ngun. Cn c vo ch s ny m tr s c hnh dng khc nhau. y l nhng hnh dng ngm nh ca h thng.IDC_APPSTARTING - Tr khi mt ng dng khi ngIDC_NO - Tr khi khng thc hin vic no.IDC_SIZE - Tr khi thay i c mt i tng.IDC_SIZEALL - Tr khi thay i tt c c ca cc i tngIDC_SIZENESW - Tr l hnh mi tn 2 chiu cho gc xung dcIDC_SIZENS - Tr l hnh mi tn 2 chiu dc.IDC_SIZENWSE - Tr l hnh mi tn 2 chiu cho ln dcIDC_SIZEWE - Tr l hnh mi tn 2 chiu ngangIDC_UPARROW - Tr l hnh mi tn lnIDC_WAIT - Tr l ng h ctIDC_ARROW: Tr hnh mi tn.IDC_CROSS: Tr hnh du thp.IDC_IBEAM: Tr hnh thanh ch IIDC_ICON: Biu tng rng.

10. Declare Function LoadCursorFromFile Lib "user32" Alias "LoadCursorFromFileA" (ByVal lpFileName As String) As Long

Cng dng: Ti mt hnh dng tr chut t tp bn ngoi c khai boTr tr v: Integer - Zero nu thnh cng.Tham s km: LpFileName - Cn ca tp m t hnh dng tr.

11. Declare Function ReleaseCapture Lib "user32" Alias "ReleaseCapture" () As Long

Cng dng: Ti b vic chn i vi chut.

12. Declare Function SetCapture Lib "user32" Alias "SetCapture" (ByVal hwnd As Long) As Long

Cng dng: Thit lp vic chn con chut i vi ca s.Tr tr v: Integer l cn ca ca s trc ang chn chut. Zero nu khng c ca s no chn trc .Tham s km: hwnd - Cn ca ca s cn thit lp chn.

13. Declare Function SetCursor Lib "user32" Alias "SetCursor" (ByVal hCursor As Long) As Long

Cng dng: t con tr hin ti.Tr tr v: Integer - Tr s m t tr trc .Tham s km: HCursor - Cn ca con tr cn t lm hin ti.

14. Declare Function SetDoubleClickTime Lib "user32" Alias "SetDoubleClickTime" (ByVal wCount As Long) As Long

Cng dng: t thi gian gia hai ln bm ca thao tc Dclick.Tham s km: WCount - Thi gian cn t, tnh theo miligiy.

15. Declare Function ShowCursor Lib "user32" Alias "ShowCursor" (ByVal bShow As Long) As Long

Cng dng: Hin hay giu con tr trn mn hnh.Tr tr v: S nguyn DP bo s ln hin th. Mi ln s dng hm ny hin tr DP s c cng 1. Mi ln giu i DP s tr 1. Nu DP m tr khng c hin.Tham s km: BShow - Tr s iu khin. Nu dng, hin. S 0 du.

16. Declare Function SwapMouseButton Lib "user32" Alias "SwapMouseButton" (ByVal bSwap As Long) As Long

Cng dng: Kim tra s tro i chc nng 2 phm chut.Tr tr v: Integer - True nu b hon i. False nu vn cha b i.Tham s km: BSwap - t l True i. t l False khng i.

2. Cc m qut v phm o:

Cc phm trn bn phm to ra cc m qut (scan code) tu thuc vo v tr ca chng. Khi ta tc ng vo phm, bn phm s gi m qut ca phm cho my tnh. Do c nhiu loi bn phm khc nhau nn Windows a ra khi nim phm o (virtual key) l phm khng ph thuc vo v tr ca tng loi bn phm, gip cho vic thng nht x l. V nh bn nhn phm Enter, bt c bn phm no, v tr no vn l phm , ch khng lin quan n v tr nh m qut.Do ta c th hiu vn ny nh sau:Khi mt phm c nhn, Windows s nhn c tn hiu v chuyn i thng tin m qut ca bn phm thnh mt m phm o. Phn x l phm o s chu trch nhim chuyn tip hnh nh ca k t c nhn, sau khi cn c vo trng thi ca phm Shift.

Cc hm x l bn phm bao gm:

17. Declare Function GetAsyncKeyState Lib "user32" Alias "GetAsyncKeyState" (ByVal vKey As Long) As Integer

Cng dng: Nhn tnh trng ca phm o c khai bo.Tr tr v: Integer - Bit 0 l 1 nu phm c nhn k t ln gi hm ny gn y nht. Ngc li l Zero. Bit 15 l 1 nu phm ang nhn xung, hay zero nu th ra.Tham s km: VKey M ca phm cn kim tra (Xem bng m key code cc phm)

18. Declare Function GetKBCodePage Lib "user32" Alias "GetKBCodePage" () As Long

Cng dng: Nhn trang m Windows cn chuyn i gia cc b k t.Tr tr v: Integer - L cc tr s ch trang m.

19. Declare Function GetKeyboardState Lib "user32" Alias "GetKeyboardState" (pbKeyState As Byte) As Long

Cng dng: Nhn trng thi phm o ca bn phm.Tr tr v: c trng thi ghi vo bin cn lu.Tham s km: PbKeyState - Bin dng byte (L chui c chiu di c th lu tr 256 k t) nhm lu gi tr nhn tnh trng cc phm. Gi tr ny phi c hiu l nh phn, cn c vo bit 0 ca cc on tng ng vi cc phm Caplock, NumLock, Scroll Lock, nu l 1 s l ang bt, cn bit 7 cc phm thng, nu nhn xung l 1, gi tr 0 l th ra.

20. Declare Function GetKeyboardType Lib "user32" Alias "GetKeyboardType" (ByVal nTypeFlag As Long) As Long

Cng dng: Nhn kiu bn phm ang dng.Tr tr v: Integer - Zero nu c li. Cc s khc ch loi bn phm ng k.Nu c bng 0, tr tr v:1 - Tng ng bn phm 83 phm2 - Tng ng 102 phm3 - Tng ng 84 phm4 - Tng ng 101 -102 phm (IBM)5 - Tng ng Nokia 10506 - Tng ng Nokia 91407 - Tng ng ting Nht.Nu c bng 1, tr tr v tu thuc hng sn xut.Nu c bng 2, tr tr v:1, 3, 5 - Tng ng bn phm 10 phm chc nng.2 - Tng ng bn phm 12 hoc 18 phm chc nng.4 - Tng ng bn phm 12 phm chc nng.6 - Tng ng bn phm 24 phm chc nng.7 - Do hng sn xut quy nh.Tham s km: NTypeFlag - C xc nh kiu d liu cn ly.

21. Declare Function GetKeyNameText Lib "user32" Alias "GetKeyNameTextA" (ByVal lParam As Long, ByVal lpBuffer As String, ByVal nSize As Long) As Long

Cng dng: Nhn tn ca phm.Tr tr v: Chiu di ca tn phm nhn c trong lpBufferTham s km: LParam L mt s m bit t 0 - 5 t l 0. Bt 16 - 23 t m qut ca phm cn xc nh tn, bt 24 - Bt m rng trn nhng bn phm nng cao. Bit 25 - Khi gn bng 1, b qua s khc bit gia cc phm tri, phi.LpBuffer Chui c gn trc nhn tn phm. Nn c nSize + 1 bytes.NSize Chiu di ti a ca chui.

22. Declare Function GetKeyState Lib "user32" Alias "GetKeyState" (ByVal nVirtKey As Long) As Integer

Cng dng: Nhn trng thi phm o.Tr tr v: Bit 0 l 1 khi cc phm nh Caplock, NumLock, ScrollLock l bt, nu bit 0 l 0, cc phm ny tt.Bit 15 l 1, nu phm ang b nhn, bit 15 l 0 nu va nh.Tham s km: NVirtKey - M phm o kim tra

23. Declare Function MapVirtualKey Lib "user32" Alias "MapVirtualKeyA" (ByVal wCode As Long, ByVal wMapType As Long) As Long

Cng dng: Thc hin nhng s chuyn i m qut v k t tu thuc vo kiu nh x cung cp.Tr tr v: Tu thuc vo kiu nh x yu cu, tr tr v theo bng sauWCode lGi tr ca VMapType012M phm oM qut tng ng

M qut

M phm o tng ng

M phm o

Tr ASCII tng ng.

Tham s km: WCode - Gi tr ngun cn chuyn i.WMapType - iu khin kiu chuyn i.

24. Declare Function MapVirtualKeyEx Lib "user32" Alias "MapVirtualKeyExA" (ByVal uCode As Long, ByVal uMapType As Long, ByVal dwhkl As Long) As Long

Cng dng Hm dch m phm o thnh mt m qut hoc gi tr k t, hoc dch mt m qut thnh m phm o. Chc nng dch cc m dng cho ngn ng nhp v nh dng v tr.Tham s km:Parameters

uCodeM phm o hoc m qut ca mt phm. Gi tr ny phi tng ng vi uMapType. uMapType[in] Kiu d liu cn dch. Gi tr ny phi ph hp vi tham s uCode trn.Cc gi tr 0, 1, 2 nh bng trn.Ring gi tr bng 3 ch s dng cho Windows NT/2000 tr ln: uCode l mt m qut v c dch thnh m phm o phn bit gia nhng phm bn tay tri v nhng phm bn tay phi. Nu iu ny khng dch, hm tr v 0

dwhkl[in] nh v v tr nhp s dng cho vic dch cc m c bit. Tham s ny c th l bt k gi tr nh v v tr trc m nhn c t hm LoadKeyboardLayoutTr tr v

Hoc l mt qut, mt m phm o hoc mt gi tr k t tu thuc vo uCode v uMapType. Nu iu ny khng c dch, hm tr v zero.Mt ng dng c th dng MapVirtualKeyEx dch cc m qut thnh cc hng m phm o nh VK_SHIFT, VK_CONTROL, v VK_MENU, v ngc li. Qu trnh dch khng do not phn bit gia cc phm tr hay phi ca cc phm SHIFT, CTRL, hoc ALT. Cn Windows NT/2000 tr ln th phn bit, n s chuyn c thnh cc hng m phm o nh:VK_LSHIFTVK_RSHIFTVK_LCONTROLVK_RCONTROLVK_LMENUVK_RMENUS phn bit ny nh hng ti cc hm GetKeyboardState, SetKeyboardState, GetAsyncKeyState, GetKeyState, MapVirtualKey, v chnh MapVirtualKeyEx .Xin xem bng m phm o Virtual-Key Codes.

25. Declare Function OemKeyScan Lib "user32" Alias "OemKeyScan" (ByVal wOemChar As Long) As Long

Cng dng: Nhn m qut v trng thi Shift i vi mt k t ASCII trong b k t OEM.Tr tr v: T thp cha m qut. T cao a ra cc c hiu thng qua cc bit. Bit 0 nu bng 1, phm Shift b nhn. Bit 1 l 1 cho bit Ctrl b nhn.Tham s km: WOemChar - Gi tr ASCII ca k t cn chuyn i.

26. Declare Function SetKeyboardState Lib "user32" Alias "SetKeyboardState" (lppbKeyState As Byte) As Long

Cng dng: t trng thi phm o. Thng s dng t trng thi phm CaspLock, NumLock, ScrollLock.Tham s km: lppbKeyState - Bin con tr 256 byte cha trng thi bn phm.

27. Declare Function ToAscii Lib "user32" Alias "ToAscii" (ByVal uVirtKey As Long, ByVal uScanCode As Long, lpbKeyState As Byte, lpwTransKey As Long, ByVal fuState As Long) As Long

Cng dng: Xc nh tr ASCII ca mt phm o da trn cc trng thi phm Shift v phm iu khin.Tr tr v: Nu phm cn kim tra l phm cht, gi tr tr v l s m. Trng hp khc l mt trong cc gi tr sau:0 - Phm o cn kim tra khng c dch trong trng thi hin hnh ca bn phm.1 - Mt k t c copy vo buffer2 - Hai k t c copy vo bufer, trng hp ny xy ra khi mt phm nhn cht, v g mt phm khc.Tham s km: UVirtKey - Phm o cn chuyn i.UScanCode - M qut ca phm hoc phm cn chuyn i. Bit cao ca gi tr c thit lp nu phm nh.LpbKeyState - Bin tr ti mng 256 byte ch trng thi bn phm hin ti. Mi byte trong mng cha trng thi ca mt phm. Nu bit cao ca mt byte c thit lp l phm c nhn xung. Vi bit thp c thit lp, tn hiu c o l ON. Trng hp ny ch dng cho CAPSLOCK. Cn SCROLLOCK v NUMLOCK b b qua.LpwTransKey - Bin con tr ch ti buffer m nhn gi tr kt qu sau khi dch.FuState - C hiu, trng thi thc n c kch hot. Nu l 1 l c kch hot, ngc li 0.28. Declare Function ToAsciiEx Lib "user32" Alias "ToAsciiEx" (ByVal uVirtKey As Long, ByVal uScanCode As Long, lpKeyState As Byte, lpChar As Integer, ByVal uFlags As Long, ByVal dwhkl As Long) As LongNh trn ring dwhkl dng nh v tr nhp, dng cho chuyn m.Tham s ny nhn c bt c v tr nh v no trc c tr v t hm LoadKeyboardLayout

29. Declare Function VkKeyScan Lib "user32" Alias "VkKeyScanA" (ByVal cChar As Byte) As Integer

Cng dng: Dch k t phm o ty thuc trng thi phm shift hin ti.Tr tr v: Nu hm thnh cng, byte thp ca gi tr tr v cha m phm o, v byte cao cha trng thi Shift, cn c vo bng sauBitNgha l1Bt c SHIFT key b nhn2Bt c CTRL key b nhn.4Bt c ALT key b nhn.8The Hankaku key b nhn16Dnh ring (c nh ngha bi driver).32Dnh ring (c nh ngha bi driver).

Nu hm khng tm thy phm no dch th b qua m k tc hai byte thp v cao u cha 1.

30. Declare Function VkKeyScanEx Lib "user32" Alias "VkKeyScanExA" (ByVal ch As Byte, ByVal dwhkl As Long) As Integer

Nh trn ring dwhkl dng nh v tr nhp, dng cho chuyn m.Tham s ny nhn c bt c v tr nh v no trc c tr v t hm LoadKeyboardLayout

3. Tip theo l cc hm iu khin nhp liu:

31. Declare Function GetInputState Lib "user32" Alias "GetInputState" () As Long

Cng dng: Nhn trng thi nhp liu, kim tra xem c tnh hung chut hoc bn phm ang ch x l khng.Tr tr v: True - Nu c trng hp cn x l ang ch.

32. Declare Function GetQueueStatus Lib "user32" Alias "GetQueueStatus" (ByVal fuFlags As Long) As Long

Cng dng: Nhn loi ch lnh cn x l trong hng i i ng dng.Tr tr v: T cao l tp c 16 bit, khai bo cc ch lnh hng i. T thp cho bit cc loi ch lnh c thm vo.Tham s km: FUFlags - Tp c yu cu cn kim tra ch lnh l mt t thng qua cc bit. L mt trong cc hng s sau:QS_ALLEVENTS = Tt c cc mc (QS_INPUT hoc QS_POSTMESSAGE hoc QS_TIMER hoc QS_PAINT hoc QS_HOTKEY)QS_ALLINPUT = T c phn nhp liu (QS_SENDMESSAGE hoc QS_PAINT hoc QS_TIMER hoc QS_POSTMESSAGE Hoc QS_MOUSEBUTTON Hoc QS_MOUSEMOVE Hoc QS_HOTKEY Hoc QS_KEY)QS_HOTKEY - Phm nng.QS_INPUT - Phn nhp (QS_MOUSE Hoc QS_KEY)QS_KEY - Cc ch lnh phm.QS_MOUSE = Cc ch lnh chut (QS_MOUSEMOVE Hoc QS_MOUSEBUTTON)QS_MOUSEBUTTON - Ch lnh lin quan n nt chut.QS_MOUSEMOVE - Di chuyn bng chutQS_PAINT - Ch lnh v.QS_POSTMESSAGE - Ch lnh c pht i.QS_SENDMESSAGE - Ch lnh c chuyn t ng dng khc.QS_TIMER - Timer.

33. Declare Function GetQueuedCompletionStatus Lib "kernel32" Alias "GetQueuedCompletionStatus" (ByVal CompletionPort As Long, lpNumberOfBytesTransferred As Long, lpCompletionKey As Long, lpOverlapped As Long, ByVal dwMilliseconds As Long) As Long

Cng dng: Nhn trng thi ch lnh hon thnh xp hng trong hng i h thngTr tr v: @Tham s km: CompletionPort - Cn cng hon thnh. to mt cng hon thnh s dng hm CreateIoCompletionPortLpNumberOfBytesTransferred - Bin con tr ch vo mt bin nhn v s byte trao i trong tc v vo ra hon thnh.LpCompletionKey - Bin con tr ch vo bin nhn v phm hon thnh tc v vo ra. Mt phm hon thnh l mt gi tr nhn t hm CreateIoCompletionPortLpOverlapped - Bin con tr ch ti bin ghi li v tr ca a ch cu trc OVERLAPPED c thit lapaj khi tc v hon thnh c bt u.DwMilliseconds - S mili giy gi ch cho tc v hon thnh.

34. Declare Function IsDBCSLeadByte Lib "kernel32" Alias "IsDBCSLeadByte" (ByVal bTestChar As Byte) As LongDeclare

35. Function IsDBCSLeadByte Lib "kernel32" Alias "IsDBCSLeadByte" (ByVal TestChar As Byte) As Long

Cng dng: Kim tra xem c phi l k t u tin trong b k t 2 byte.Tr tr v: True nu l byte u ca k t thuc b k t 2 byte.Tham s km: BTestChar - K t cn kim tra.o0o--truongphu--o0o

.........Gh thm:Chuyn Linh Tinhu trang

truongphu VIP

Bi vit: 4737Ngy tham gia: CN 04/11/2007 10:57 amn t: Cam c, Khnh haHasthanked: 13 timeBeenthanked: 488 timeCa s - Khi nim m m ca Windows API Trch dn Gi bigi bi truongphu T.Su 20/03/2009 4:44 pm Ca s - Khi nim m m ca Windows API

(Bi sau y l copy t a ch trn, c lc b phn u)(Bi API vi Registry ti cng lc b)

Tht k quc khi chnh Microsoft a ra khi nim Window khi lp trnh API, m l ra phi gi l cc Object hoc Control. Khi ni n ca s xin bn lu n khng ch l Form, m cn c th l bt c mt i tng c lp no trong hp Tool Box nh cc thanh cun (Scroll Bar), cc hp Text Box... ngay c chnh cc biu tng Icon cng c Win API coi l cc ca s (!?!). Ngoi ra cn c loi ca s m thm m khng nhn thy trn mn hnh.Tt c cc ca s kiu trn u thuc vo cc lp. Mi lp u c cc tnh cht ring. C ngha l khi ta i v tr ca mt ca s t lp ny sang lp khc ngoi cc tnh cht ring c th ca n, cn cc tnh cht chung theo lp n s c tip nhn ngay cc tnh nng ca lp mi v gi t nhng tnh cht ca lp c m n ph thuc.Tm hiu cc lp h thng thng c s dng v c sn trong Windows (Xin lu tn lp khng c du cch)Tn lpM tBUTTONDng cho cc nt lnh (Command button), nt chn (Option button), nt kim tra (Check box)COMBOBOXDng cho hp Combo boxEDITDng cho cc Edit ControlLISTBOXDng cho cc List BoxSCROLLBARDng cho cc thanh cunSTATICDng cho cc ca s hin th vn bnMDICLIENTDng cho cc ca s giao din nhiu ti liu MDI

Xin quan st cc tnh cht ca mi lp: Tnh chtCng dngClass Style (Kiu lp)Thit t cc thuc tnh mu ca mi loi ca s trong lp. Class Function (Hm lp)Cc hm mc nh ca lp.Instance (Th hin)M t phin bn s hu lp. Thng l lp h thng hoc th vin.Icon (Biu tng)M t biu tng mc nhin trn Desktop khi ca s ca lp ny thu nh Minimize.Cursor (Con tr)M t con tr mc nhin khi chut c nh v trn ca s lp ny.Background (Nn)M t mu nn mc nhin i vi cc ca s trong lp ny.Menu (Thc n)M t thc n mc nhin i vi ca s thuc lp ny.

Bn c th thay i cc tnh cht ca mt lp trong chng trnh ca bn khi chng trnh thi hnh. Bn c th iu chnh cc tnh cht ny. Cc gi tr tnh cht ban u ca lp s phc hi li tu thuc vo thi im bn unload b lp m bn iu chnh. Xem s sau:Thi im bn Unload b lp m bn thay i tu thuc vo lp b thay i bi ng dng, th bn nn khi phc n v ban u. Cn cc lp do DLL nh ngha th thng c unload khi cc ng dng s dng DLL kt thc. Khi Windows np n s a v cc lp v tnh trng ban u.

Subclassing

Xin bn xem li bi vit API khm ph t A n Z phn 2, ti ni r vic x l ca cc hm Window. Mi lp c hm Window mc nhin s dng cho mi ca s trong lp. Mt ca s khng nht thit phi s dng hm mc nhin ny, ta c th to mt lp con (Subclassing) ca mt ca s. Xy dng cc tnh cht mi trn lp con ny. Hm lp mi c th trc tip x l mt s ch lnh v chuyn giao cc ch lnh message cho lp hin c.Ngha l tt c cc ca s c to trn lp mi ny s c hm Window mc nhin cng vi cc chc nng mi c to ra bi lp con.i vi K thut Subclassing mt Window chn tt c cc ch lnh gi n n c th chn cc phng n: Kim tra message bit Can thip vo message trc khi n n ch. By mt message sau khi Window gc x l, thay i kt qu n tr v cho ng dng gi hay h iu hnh. Can thip mt message, t x l n. Khng a n cho Window gc. Thay Window gc lm mi vic. mt th tc kt hp vi mi Window v x l tt c cc ch lnh message n ta thng dng hm SendMessage hay PostMessage. Ta xt v d sau hiu r v API, ta khng xt v lp trnh thng thng Visual Basic m ch xt n bn cht API qua v d nh ny thi.

Gi s bn to mt form con nh sau: C Text Box vi Name =TxtPass, Nt lnh 1 c Name =CmdOK, nt lnh 2 c Name=CmdCancel.Ta vit lnh tm nhanh chng chui bn trong hp TxtPass.M: Chn ht1. Option Explicit2. 'Khai bo3. Public Const LB_FINDSTRINGEXACT = &H1A24. Declare Function GetFocus Lib "user32" Alias "GetFocus" () As Long5. Declare Function SendMessage Lib "user32" Alias "SendMessageA" (ByVal hwnd As Long, ByVal wMsg As Long, ByVal wParam As Long, lParam As Any) As Long6. Sub cmdCancel_Click()7. End8. End Sub9. Sub CmdOK_Click()10. Dim hw%, chuoitrave&11. TxtPass.SetForcus12. hw=txtPass.hwnd13. chuoitrave&=SendMessage(hw%, LB_FINDSTRINGEXACT,0,0)14. 'Cc lnh x l chui tr v15. End Sub

T VB5 n VB6 K thut subclassing c ngh thng qua t kha a ch AddressOf. Thng thng s dng ta phi lm cc bc:1. Chun b th tc thay th th tc Window.2. Ghi nh a ch c bng hm SetWindowLong, ng thi t a ch mi vo a ch ca th tc thay th.M: Chn ht1. DiaChiCu= SetWindowLong(hWnd, GWL_WNDPROC, AddressOf Tn_Th_tc_Thay_Th)

S c bn hi AddressOf Tn_Th_tc_Thay_Th l g? iu ny ta khng quan tm v khi np vo RAM, h thng s t in v thay th gip cho chng ta, l gi tr tu theo my cng nh tu theo chng trnh ca mnh, th mi hay ch.Hm ny c khai bo chun nh sau:M: Chn ht1. Declare Function SetWindowLong Lib "user32" Alias "SetWindowLongA" (ByVal hwnd As Long, ByVal nIndex As Long, ByVal dwNewLong As Long) As Long

Trong :Hwnd - Cn ca Window cn i thuc tnhnIndex chn mt trong cc hng sau tu theo mc ch:Const GWL_HINSTANCE = (-6) - Handle ca minh ho lm ch WindowConst GWL_EXSTYLE = (-20) - Kiu m rng ca WindowConst GWL_STYLE = (-16) - Kiu WindowConst GWL_ID = (-12) - ID ca mt Window con trong mt hp thoiConst GWL_USERDATA = (-21) - c nh ngha bi ng dngConst GWL_HWNDPARENT = (-8) - Cn ca Window cha.Const GWL_WNDPROC = (-4) - a ch ca th tc WindowConst DWL_DLGPROC = 4 - a ch hm Dialog ca WindowConst DWL_MSGRESULT = 0 - Gi tr tr v ca thng ip c x l trong hm DialogConst DWL_USER = 8 - c nh ngha bi ng dng.

i vi tnh cht GWL_WNDPROC, hm SetWindowLong khng ch t mt gi tr mi m cn tr v a ch trc ca mc . Ta lu a ch c khi hi phc li khi kt thc bng chnh hm ny.SetWindowLong hWnd, GWL_WNDPROC, DiaChiCuNhng ch lnh message gi n cho Window n s a vo cho th tc thay th ca bn. Nu th tc thay th ca bn mun th tc c thc hin th dng hm gi th tc c CallWindowProc nh sau:ViecChoCuLam = CallWindowProc(DiaChiCu, hwnd, uMsg, wParam, lParam)Trong bin ViecChoCuLam l bn kha ra vic gi hm thc hin cho thun li.Xin lu vic khi phc a ch phi c thc hin trnh qun v phi t trc lnh End. Nu khng s treo v dn ti nguy him.Cc v d chuyn su v SubClassing xin download t Web L Hon.Chc cc bn t c nguyn mong mun.

Ht Copy. Cc phn lc b, xin xem a ch gcChiu th 6 20/3o0o--truongphu--o0o

.........Gh thm:Chuyn Linh Tinhu trang

truongphu VIP

Bi vit: 4737Ngy tham gia: CN 04/11/2007 10:57 amn t: Cam c, Khnh haHasthanked: 13 timeBeenthanked: 488 timeHn 60 hm API lin qua ca s Trch dn Gi bigi bi truongphu CN 22/03/2009 9:08 am B sung56. Hm AnimateWindow

Hm AnimateWindow cho php Bn thc hin cc hiu ng c bit khi m hoc ng mt ca s ng dng. C 3 kiu hiu ng l : roll, slide, v hiu ng pha trn (alpha-blended fade).Yu cu: Windows 2000, Windows 98 tr ln.

Dec:Declare Function AnimateWindow Lib "user32" (ByVal hwnd As Long, ByVal dwTime As Long, ByVal dwFlags As Long) As Boolean

Tham s:

hwnd[in] Handle ca s cn to hiu ng v vic gi hiu ng phi trong chnh ca s ny.

dwTime[in] Xc nh thi gian thc hin hiu ng (bng mili giy). Thng thng l 200.

dwFlags[in] Xc nh kiu hiu ng. Tham s ny c th gm mt hay nhiu gi tr sau:

AW_SLIDES dng hiu ng slide. Mc nh hiu ng roll s c s dng. Gi tr ny s c b qua nu s dng AW_CENTER.

AW_ACTIVATEKch hot window. Khng dng gi tr ny cng vi AW_HIDE.

AW_BLENDS dng hiu ng fade. Gi tr ny c dng ch khi hwnd l top-level window.

AW_HIDEn window. Mc nh l ca s c show.

AW_CENTERTo window xut hin vi hiu ng thu vn tng mnh nh vo trong nu AW_HIDE c dng hoc m rng ra ngoi nu khng dng AW_HIDE.

AW_HOR_POSITIVETo hiu ng hot hnh cho window t tri sang phi. Gi tr ny c th c dng vi hiu ng roll hoc slide v n b b qua khi s dng vi AW_CENTER hoc AW_BLEND.

AW_HOR_NEGATIVETng t nh AW_HOR_POSITIVE nhng t phi sang tri.

AW_VER_POSITIVETng t nh AW_HOR_POSITIVE nhng t trn xung di.

AW_VER_NEGATIVETng t nh AW_VER_NEGATIVE nhng t di ln trn.

Gi tr tr v:Nu thnh cng gi tr khc khng (nonzero) s c tr v v ngc li.Hm s thc hin khng thnh cng trong cc trng hp sau:{/i} Ca s s dng window region; hoc visible v Bn ang c gng show n ln; hoc window hidden v Bn ang hide n mt ln na. c thm thng tin v cc li hy gi hm GetLastError.{/i}

V d vi VB6:M: Chn ht1. Const AW_HOR_POSITIVE = &H1 2. Const AW_HOR_NEGATIVE = &H2 3. Const AW_VER_POSITIVE = &H4 4. Const AW_VER_NEGATIVE = &H8 5. Const AW_CENTER = &H10 6. Const AW_HIDE = &H10000 7. Const AW_ACTIVATE = &H20000 8. Const AW_SLIDE = &H40000 9. Const AW_BLEND = &H80000 10. 11. Private Declare Function AnimateWindow Lib "user32" (ByVal hwnd As Long, ByVal dwTime As Long, ByVal dwFlags As Long) As Boolean12. Private Sub Form_Load()13. 'Set the graphic mode to persistent14. Me.AutoRedraw = True15. Me.Print "Unload me"16. End Sub17. Private Sub Form_Unload(Cancel As Integer)18. 'Animate the window19. AnimateWindow Me.hwnd, 200, AW_VER_POSITIVE Or AW_HOR_NEGATIVE Or AW_HIDE20. 'Unload our form completely21. Set Form1 = Nothing22. End Sub

5. ( c)Hm BeginDeferWindowPos

Hm BeginDeferWindowPos s cp pht b nh cho mt multiple-window- position structure v ly handle tr v structure .Yu cu: Windows NT 3.1, Windows 95

Dec:Declare Function BeginDeferWindowPos Lib "user32" Alias "BeginDeferWindowPos" (ByVal nNumWindows As Long) As Long

Tham s:

nNumWindowsXc nh initial number ca windows dng lu tr tng tin v position. Hm DeferWindowPos lm tng thm kch thc ca structure, nu cn.

Gi tr tr v:Nu thnh cng, gi tr tr v s xc nh the multiple-window - position structure. Nu khng ti nguyn h thng cp pht, gi tr NULL s c tr v.

V d bng VB6:M: Chn ht1. Const WS_BORDER = &H8000002. Const WS_DLGFRAME = &H4000003. Const WS_THICKFRAME = &H400004. Const WS_CAPTION = &HC00000 ' WS_BORDER Or WS_DLGFRAME5. Const HWND_BOTTOM = 16. Const HWND_TOP = 07. Const HWND_TOPMOST = -18. Const HWND_NOTOPMOST = -29. Const SWP_SHOWWINDOW = &H4010. Private Type RECT11. Left As Long12. Top As Long13. Right As Long14. Bottom As Long15. End Type16. Private Declare Function AdjustWindowRect Lib "user32" (lpRect As RECT, ByVal dwStyle As Long, ByVal bMenu As Long) As Long17. Private Declare Function BeginDeferWindowPos Lib "user32" (ByVal nNumWindows As Long) As Long18. Private Declare Function DeferWindowPos Lib "user32" (ByVal hWinPosInfo As Long, ByVal hwnd As Long, ByVal hWndInsertAfter As Long, ByVal x As Long, ByVal y As Long, ByVal cx As Long, ByVal cy As Long, ByVal wFlags As Long) As Long19. Private Declare Function EndDeferWindowPos Lib "user32" (ByVal hWinPosInfo As Long) As Long20. Private Sub Form_Load()21. Dim R As RECT, hDWP As Long22. R.Left = 3023. R.Top = 3024. R.Bottom = 20025. R.Right = 12026. AdjustWindowRect R, WS_THICKFRAME Or WS_CAPTION, False27. hDWP = BeginDeferWindowPos(1)28. DeferWindowPos hDWP, Me.hwnd, HWND_TOP, R.Left, R.Top, R.Right - R.Left, R.Bottom - R.Top, SWP_SHOWWINDOW29. EndDeferWindowPos hDWP30. End Sub

6. ( c trn)Hm DeferWindowPos

Hm DeferWindowPos cp nht multiple-window-position structure c xc nh trc cho mt ca s c ch nh. Hm ny sau s tr v handle ca structure c update. Hm EndDeferWindowPos s dng cc thng tin trong structure ny thay i ng thi v tr (position) v kch thc (size) ca ca s. Hm BeginDeferWindowPos s to structure ny.Yu cu: Windows NT 3.1, Windows 95 tr ln.

Dec:Declare Function DeferWindowPos Lib "user32" Alias "DeferWindowPos" (ByVal hWinPosInfo As Long, ByVal hwnd As Long, ByVal hWndInsertAfter As Long, ByVal x As Long, ByVal y As Long, ByVal cx As Long, ByVal cy As Long, ByVal wFlags As Long) As Long

Tham s:

hWinPosInfoXc nh mt multiple-window - position structure cha thng tin v kch thc v v tr ca mt hoc nhiu windows. Structure ny c tr v bi hm BeginDeferWindowPos hoc va mi gi bng hm DeferWindowPos.

hWndXc nh window c lu tr trong structure c update thng tin.

hWndInsertAfterIdentifies the window that precedes the positioned window in the Z order. Tham s ny phi l mt handle ca s hoc mt trong cc gi tr sau:

HWND_BOTTOMt window xung y (bottom) ca Z order. Nu tham s hWnd xc nh mt window v tr cao nht th window s mt v tr v c thay th vo v tr bottom ca tt c cc windows khc.

HWND_NOTOPMOSTt window trn tt c cc non-topmost windows (iu ny c ngha l ng sau tt c cc topmost windows). Gi tr ny s khng c tc dng nu window l mt non-topmost window.

HWND_TOPt window vo v tr cao nht ca Z order.

HWND_TOPMOSTt window trn tt c non-topmost windows. Window s gi v tr topmost ny ca n ngay c khi n b deactive. Tham s ny s b b qua nu SWP_NOZORDER c thit lp trong tham s uFlags.

xXc nh x-coordinate ca gc tri bn trn ca ca s.

yXc nh y-coordinate ca gc tri bn trn ca ca s.

cxXc nh b rng mi ca window, bng pixels.

cyXc nh chiu cao mi ca window, bng pixels.

uFlagsXc nh mt s kt hp ca cc gi tr sau v s tc ng n kch thc v v tr ca window:

SWP_DRAWFRAMEV mt frame (c nh ngha trong phn m t class ca window) xung quanh window.SWP_FRAMECHANGEDGi thng ip WM_NCCALCSIZE n window, ngay c trong trng hp khi kch thc ca window khng b thay i. Nu tham s ny khng c xc nh, WM_NCCALCSIZE s ch c gi khi kch thc ca window b thay i.SWP_HIDEWINDOWHides the window.SWP_NOACTIVATEKhng kch hot (activate) window. Nu tham s ny khng c thit lp, window s c kch hot v c chuyn ln thnh top ca cc topmost hoc non-topmost group khc (ty thuc v thit lp ca hWndInsertAfter parameter).SWP_NOCOPYBITSDiscards the entire contents of the client area. Nu tham s ny not specified, contents hp l ca cc client area s c lu tr v dc copy vo trong client area sau khi window b thay i kch thc hoc v tr.SWP_NOMOVEGi li v tr hin ti (b qua tham s X v Y).SWP_NOOWNERZORDERKhng thay i v tr ca chnh window trong Z order.SWP_NOREDRAWKhng redraw li cc thay i. Nu tham s ny khng c set, no repainting of any kind occurs. iu ny tc ng n client area, cc nonclient area (bao gm c title bar v scroll bars), v bt k phn no ca parent window uncovered nh kt qu tc ng khi window c moved. Khi tham s ny c thit lp, ng dng phi c explicitly invalidate hoc redraw any parts of the window and parent window cn c redrawing.SWP_NOREPOSITIONTng t nh SWP_NOOWNERZORDER.SWP_NOSENDCHANGINGNgn nga window nhn thng ip WM_WINDOWPOSCHANGING.SWP_NOSIZELu gi li kch thc hin ti (b qua tham s cx v cy).SWP_NOZORDERLu gi li Z order hin ti (b qua tham s hWndInsertAfter).SWP_SHOWWINDOWDisplays the window.

Gi tr tr v:Gi tr tr v xc nh multiple-window - position structure c cph nht. Th handle c tr v bng hm ny c th khc vi th handle gi n n. Th handle mi m hm ny tr v s c dng trong ln gi tip theo n hm DeferWindowPos hoc hm EndDeferWindowPos. Nu ti nguyn h thng khng cn thc hin, gi tr tr v s l NULL.

V d VB6M: Chn ht1. Const WS_BORDER = &H8000002. Const WS_DLGFRAME = &H4000003. Const WS_THICKFRAME = &H400004. Const WS_CAPTION = &HC00000 ' WS_BORDER Or WS_DLGFRAME5. Const HWND_BOTTOM = 16. Const HWND_TOP = 07. Const HWND_TOPMOST = -18. Const HWND_NOTOPMOST = -29. Const SWP_SHOWWINDOW = &H4010. Private Type RECT11. Left As Long12. Top As Long13. Right As Long14. Bottom As Long15. End Type16. Private Declare Function AdjustWindowRect Lib "user32" (lpRect As RECT, ByVal dwStyle As Long, ByVal bMenu As Long) As Long17. Private Declare Function BeginDeferWindowPos Lib "user32" (ByVal nNumWindows As Long) As Long18. Private Declare Function DeferWindowPos Lib "user32" (ByVal hWinPosInfo As Long, ByVal hwnd As Long, ByVal hWndInsertAfter As Long, ByVal x As Long, ByVal y As Long, ByVal cx As Long, ByVal cy As Long, ByVal wFlags As Long) As Long19. Private Declare Function EndDeferWindowPos Lib "user32" (ByVal hWinPosInfo As Long) As Long20. Private Sub Form_Load()21. Dim R As RECT, hDWP As Long22. R.Left = 3023. R.Top = 3024. R.Bottom = 20025. R.Right = 12026. AdjustWindowRect R, WS_THICKFRAME Or WS_CAPTION, False27. hDWP = BeginDeferWindowPos(1)28. DeferWindowPos hDWP, Me.hwnd, HWND_TOP, R.Left, R.Top, R.Right - R.Left, R.Bottom - R.Top, SWP_SHOWWINDOW29. EndDeferWindowPos hDWP30. End Subo0o--truongphu--o0o

.........Gh thm:Chuyn Linh Tinhu trang

truongphu VIP

Bi vit: 4737Ngy tham gia: CN 04/11/2007 10:57 amn t: Cam c, Khnh haHasthanked: 13 timeBeenthanked: 488 timeHn 60 hm API lin qua ca s Trch dn Gi bigi bi truongphu CN 22/03/2009 9:15 am 13. c trnHm CloseWindow

Hm CloseWindow s thu nh nhng khng destroy ca s c xc nh.Yu cu: Windows NT 3.1, Windows 95 tr ln.

Dec:Declare Function CloseWindow Lib "user32" Alias "CloseWindow" (ByVal hwnd As Long) As Long

Tham s: hWndhandle ca s cn thu nh.

Gi tr tr v:Nonzero: nu thnh cng, v zero nu ngc li.Gi hm GetLastError c thm thng tin li.

V d VB6M: Chn ht1. Private Declare Function CloseWindow Lib "user32" (ByVal hwnd As Long) As Long2. Private Sub Form_Load()3. CloseWindow Me.hwnd4. End Sub

16. c tren

Hm EnableWindow

Hm EnableWindow s enables hoc disables cc tc ng ca mouse v keyboard ln window hoc control xc nh. Khi disabled, window s khng nhn bt k tc ng no nh click chut hoc nhn phm, v khi enabled th ngc li.Yu cu: Windows NT 3.1; Windows 95 tr ln.

Dec:Declare Function EnableWindow Lib "user32" Alias "EnableWindow" (ByVal hwnd As Long, ByVal fEnable As Long) As Long

Tham s: hWnd Xc nh window s c enabled hoc disabled.

bEnable Nu tham s ny l TRUE th window s enabled v ngc li.

Gi tr tr v:nonzero nu thc hin thnh cng, zero: khng. Gi hm GetLastError bit chi tit li.

V d VB6M: Chn ht1. {i}'This project needs two command buttons{/i}2. Private Declare Function IsWindowEnabled Lib "user32" (ByVal hwnd As Long) As Long3. Private Declare Function EnableWindow Lib "user32" (ByVal hwnd As Long, ByVal fEnable As Long) As Long4. Private Sub Command2_Click()5. ' Reverse the enabled status of Command1. If the window is6. ' disabled, enable it; if it is enabled, disable it.7. Dim wasenabled As Long ' receives enabled/disabled status of Command18. Dim retval As Long ' return value9. ' Determine if the window Command1 is currently enabled or not.10. wasenabled = IsWindowEnabled(Command1.hwnd)11. If wasenabled = 0 Then ' if not enabled, enable it12. retval = EnableWindow(Command1.hwnd, 1)13. Else ' if enabled, disable