You are on page 1of 86

Cc hm API lin quan n ca s

Trc khi tm hiu tip phn tip theo ca API, ti xin php c gi ti cc bn cng dng ca cc hm API thng dng, sau chng ta s tip tc nghin cu cch s dng n. 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: HWnd Cn 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 s 1. 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. 2. 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. 3. 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. 4. 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. 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. 5. 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: 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)

LParamTr chuyn n cho s kin EnumWindows ca Custom Control trong lc lit k. ngha ca tr ny do lp trnh vin xc nh. 6. 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. 7. 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. 8. 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. 9. Declare Function FlashWindow Lib "user32" Alias "FlashWindow" (ByVal hwnd As Long, ByVal bInvert As Long) As Long Cng dng: Chiu sng c 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 10. 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. 11. Declare Function GetClassInfo Lib "user32" Alias "GetClassInfoA" (ByVal hInstance As Long, ByVal lpClassName As String, lpWndClass As WNDCLASS) As Long Cng 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. 12. 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). 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. 2. 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. 3. 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. 4. 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. 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. 5. 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:

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) LParamTr chuyn n cho s kin EnumWindows ca Custom Control trong lc lit k. ngha ca tr ny do lp trnh vin xc nh. 6. 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. 7. 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. 8. 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. 9. Declare Function FlashWindow Lib "user32" Alias "FlashWindow" (ByVal hwnd As Long, ByVal bInvert As Long) As Long Cng dng: Chiu sng c 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 10. 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. 11. Declare Function GetClassInfo Lib "user32" Alias "GetClassInfoA" (ByVal hInstance As Long, ByVal lpClassName As String, lpWndClass As WNDCLASS) As Long Cng 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. 12. 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). . 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. 2. 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. 3. 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 4. 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. 5. 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. 6. 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. 7. 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. 8. 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. 9. 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. 10. 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). 11. 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. 12. 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. 1. 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. 2. 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 3. 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. 4. 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. 5. 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. 6. 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. CPointsS im chuyn i. 7. 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. 8. 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.

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. 10. Declare Function PtInRect Lib "user32" Alias "PtInRect" (lpRect As RECT, pt As POINTAPI) As Long Cng dng: K im 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. 11. 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. 12. 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 1. 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. 2. Declare Function IsWindowEnabled Lib "user32" Alias "IsWindowEnabled" (ByVal hwnd As Long) As Long Cng dng: Kim tra ca s c hiu lc (enabled) khng.

9.

Tr tr v: Integer - True (Khc zero) nu c hiu lc. Tham s km: HWnd Cn ca ca s cn kim tra 3. 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. 4. 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. 5. 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. 6. 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. CPointsS im chuyn i. 7. 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. 8. 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. 9. 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. 10. Declare Function PtInRect Lib "user32" Alias "PtInRect" (lpRect As RECT, pt As POINTAPI) As Long Cng dng: K im 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. 11. 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. 12. 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 1. 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. 2. 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. 3. 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. 4. 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. 5. 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. 6. 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.

WINDOWS API Khm ph t A n Z


Bn cht ca Windows API.

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: 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: Public Sub ThoatVaTatMay () 'Thot v tt my Dim thoat Thoat = ExitWindowsEX(2,0) End Sub Khi , trong chng trnh Visual Basic ca ta khi cn thot v tt my ch vic gi: ThoatVaTatMay hoc 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: 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: 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: TENBIEN=TEN_HAM_API(Bien1, Bien2, Bien3) Thc ra y l mt th tc. Nu TENBIEN<>0 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 message DispatchMessage message Loop 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: 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 vo 2. Chng trnh khc t vo 3. 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.

API vi Registry

I. S lc v Registry Registry l ni lu tr tt c cc cc loi cu trc d liu. Cu hnh h thng Windows, cu hnh phn cng my tnh, cu hnh thng tin v cc chng trnh ng dng da trn Win32, v cc thit lp ngi dng khc u c lu trong Registry. V d, bt c mt phn cng my tnh no thay i u lm chc nng Plug and Play (Cm v chy) khi to ngay v lm thay i lun cu hnh trong Registry. Registry lu tr tt c cc thit lp v cu trc b nh, phn cng, thit b ngoi vi, v cc thnh phn lin quan n mng. Bn s tm thy nhiu hn nhng thit lp cn thit trong cc tp khi to ban u T Win98 v sau, Windows c s dng Registry Checker t qut Registry, nu khng thy g, n t lu backup mt ln trong ngy, nu tm thy li s sa... c th sa bng cch thay th bn Registry backup gn nht cn tt. Registry Checker ti u ho v nn file backup thnh cng mi ln khi ng my. N cn lm mt lot cc vic linh tinh nh loi b nhng khong trng khng dng trong Registry, ti u ho...

Cc tp Registry ca Windows. Registry hin ti bao gm 3 tp chnh: 1. Tp USER.DAT Dng lu tr nhng xc lp ngi s dng i vi cc phn mm. 2. Tp SYSTEM.DAT Dng lu tr nhng xc lp lin quan ti my tnh v phn cng. 3. Tp Policy.pol System policies c thit k chun b cho vic ghi bt c thit lp c cha trong 2 thnh phn registry khc nhau. System policies c th cha d liu b sung c trng ti mng hay mi trng t hp nh c ci t bi network administrator. Bn thn System policies cng c cha trong tp Policy.pol. Khng nh SYSTEM.DAT v USER.DAT, Policy.pol khng phi l thnh phn bt buc ca phn ci t Windows. Li khuyn ca Microsoft v nhng cng c x l registry Phng php Control Panel System Policy Editor Cc chng trnh tin ch th 3 Thit lp Phn ln thit lp h thng SYSTEM. V d bn s dng Display Properties sa cc thnh phn ca mc appearance Thit lp ngi dng, vi thit lp h thng. Thit lp chi tit ng dng

Bn c th s dng Registry Editor thay i Registry bng tay. Ti thng dng Norton Registry Editor v n cn c thm chc nng khc, v d nh tm v thay th i vi cc thnh phn ca Registry. T cc phn mm Registry Editor trn, ta nhn thy registry c b tr thnh cc nhnh ln. Ti mi nhnh c cc kho SUBKEY. Ti cc SUBKEY d liu c lu cc dng: 1. String (Dng chui) 2. Numeric (Dng s) 3. Binary (Dng nh phn) 4. Expanded String (Dng chui m rng) 5. MultiString (Dng chui tng hp) (Nu bn dng Registry Editor - REGEDIT. EXE th s gi tn khc l DWORD) Ta hy nghin cu s m Microsoft v (T a MSDN) v Registry: Nhn s ta nhn thy: Nu mi trng Windows l sn khu th Registry ging nh mt cun s tay ca o din. Trong cc thit lp lin quan n phn cng th hu nh khng thay i (Nu ta khng thay phn cng phn tch ca Windows nhn ra). Nu thay i phn cng, phn tch ny s bt bn phi i m iu khin i vi tng thit b. Xin ni thm phn ny k hn mt cht v ti nhn c rt nhiu th hi ca cc bn v nhng vn lin quan n phn cng v DRIVER. Mt s ng bn cha hiu r cch thc lm vic ca Windows nn ngay c nhng li rt n gin nh mn hnh ch c 16 mu (Khng chn c 256 mu hay cao hn nh High Color, True Color) cng khng bit cch gii quyt. Khi my tnh ca bn c nhng thit b g, h iu hnh Windows khi ci t hoc khi tch thit b n s yu cu bn phi a ra cc tp DRIVER ca thit b . DRIVER l g ? ! N ch l tp m iu khin thit b. Ging nh s cng tc ca thit b no . Khi my tnh c cng vic lin quan n iu khin thit b, h iu hnh Windows s tra trong Registry xem tp m n l tp no. Tp m s c np vo RAM mt phn hay ton b, mt v tr no . Cn c vo lnh a ti t chng trnh, H iu hnh s a lnh ti a ch phn m iu khin ny. Phn m iu khin s ch tip cho con tr ti v tr ca lnh cn thc hin nm trong phn m, tng ng vi m lnh a ti. Khi cng vic c thc hin chnh xc v phn m ng vi thit b. Nu thit b mt kiu, m DRIVER khc vi kiu c lp vo my, th chng khc g bn a ra mt s my khc vi my ang s dng. Khi s c xung t, trng hp ny Windows s t chuyn sang chc nng phn ngm nh i vi cc kho, v nh vy bn s thy Windows khng th hin ng vi thc t ca mnh. Bn c th vo Control Panel chn mc System kim tra, nu thy du ? cnh tn m thit b phn no th chn Update i m. Cc kho v m phn cng u c lu trong tp SYSTEM.DAT. Do phn ny t thay i, v li chc nng Plug and Play ca Windows qu siu, nn ta s tm gc nghin cu n phn ny. Sau ny ti s ngh mt chng trnh kho thit b bng phn mm nhng chng sau.

Cc kho v phn mm thng l lu tr cc thit lp Option... ca tng phn mm ng dng ring. Ta c th nhn ra, trc y khi s dng Win 3.1 v trc, cc thit lp ny c lu trn a bng cc tp ui INI. Do Win32 khc xa v cu trc, nu dng cc tp INI s tng i bt tin, v d thc t dung lng b ph trn a cc ln, nn Microsoft tch hp vo cc tp Registry. Tuy nhin, cc tp WIN.INI, SYSTEM.INI vn cn c s dng c th lm vic vi cc ng dng c. Cc kho "mm" c th thay i thng xuyn khi ta s dng chc nng options t li. Ta nen la chn ti u ch ng th nghim v s c nhiu li khng ng c. B Norton Utilities c nhiu chc nng trong c Optimization Wizard (Ti u ho) cng sp xp v t chc li Registry. WinDoctor v System Check thng kim tra sai st hoc tha trong Registry x l. Nu bn bit cht t ting Anh, th l cng c thun tin i vi bn. 2. Lp trnh vi Registry Khi lp trnh i vi Registry, bn phi thc hin ht sc thn trng, sao lu cc tp ny thng xuyn trnh li ng tic, phi mt cng ci li th cng rt mt thi gian.S dng cc hm API i vi Registry cng xin ht sc thn trng. Ti a ra mt v d bn c th nghin cu r hn. l lp trnh vi Win API chnh trong VBA. V d ny s dng cch thit t cc tham s ca WINWORD. Bn c th cn c vo y vit ra cc ng dng khc tng t. Phn ny bn ch vic copy phn lp trnh nghin cu v chy th. 2.1 To Form to Macro bn hy to Form tng t nh sau: 'Form th nht (Name)=EditCnvOptionsForm Caption=Cc la chn sa cha Conversions 'Nhn 1 (Name)=lblConversion Caption= Conversion: 'Nhn2 (Name)=lblCnvOption Caption= La chn: 'Nhn 3 (Name)=lblSetting Caption= Thit lp: 'Cc hp b trng:

(Name)=cboConverters (Name)=lstOptions (Name)=txtSetting (Name)=OptYes (Name)=OptNo 'Cc nt lnh tu Caption (Name) =cmdSet (Name) =cmdOK (Name) =cmdHelp 'Vit lnh cho Form th nht: '---------------------------------------------------'--- Khi to combo box vi tn conveter --'---------------------------------------------------Public Function ControlsInit() As Boolean ' Lp y combo vi on text converters v graphics filters ListConverters hCnvExpKeyHandle, HKEY_LOCAL_MACHINE, _ strREG_TEXT_CNV_EXPORT, strREG_CNV_NAME ListConverters hCnvImpKeyHandle, HKEY_LOCAL_MACHINE, _ strREG_TEXT_CNV_IMPORT, strREG_CNV_NAME ListConverters hFltExpKeyHandle, HKEY_LOCAL_MACHINE, _ strREG_GRAPH_FLT_EXPORT, strREG_CNV_NAME ListConverters hFltImpKeyHandle, HKEY_LOCAL_MACHINE, _ strREG_GRAPH_FLT_IMPORT, strREG_CNV_NAME ' c bt c d liu no c c t registry? If clsCnvTable.ConverterCount = 0 Then

ControlsInit = False Exit Function End If ' lp y combo box vi tn converter names clsCnvTable.AddConverterNamesToCombo cboConverters ' Chn converter u tin trn combo cboConverters.ListIndex = 0 ControlsInit = True End Function Private Sub CommitChange(ByVal strNewString As String) Dim strValue As String Dim hHandleOptKey As Long Dim res& Dim strTemp As String Dim i As Integer ' Nu chn phn trn list box khc If ExtractOptionData(lstOptions.Value) <> strNewString Then ' trin khai chui Value string strValue = ExtractOptionValue(lstOptions.Value) ' Tm kho key handle ca converter trn combo hHandleOptKey = clsCnvTable.OptionsHandle(cboConverters.Value) ' Vit chui d liu mi Data string vo registry res& = RegSetValueExString(hHandleOptKey, strValue, 0&, REG_SZ, _ strNewString, Len(strNewString)) If res& <> ERROR_SUCCESS Then

GoTo FatalError End If ' Cp nht la chn vo list box i = lstOptions.ListIndex lstOptions.RemoveItem i ' b c lstOptions.AddItem strValue & strEQUALS_SIGN & strNewString, i ' Thm mi lstOptions.ListIndex = i ' chiu sng trng End If Exit Sub FatalError: ReportRegError res& End Sub '----------------------------------------' Khai trin d liu conversion option data ' T chui nh dng "Option=Data" '----------------------------------------Private Function ExtractOptionData(ByVal strDummy) As String ' Khai trin tng dng sau khi b bin thnh 0 ExtractOptionData = Right$(strDummy, _ Len(strDummy) - InStr(strDummy, strEQUALS_SIGN)) End Function '----------------------------------------' Khai trin gi tr la chn conversion ' t chui nh dng "Option=Data" '-----------------------------------------

Private Function ExtractOptionValue(ByVal strDummy As String) As String ' Khai trin tng dng sau khi bng 0 ExtractOptionValue = Left$(strDummy, InStr(strDummy, strEQUALS_SIGN) - 1) End Function '---------------------------------------------------------' Lit k tt c registered text converters v graphics filters '---------------------------------------------------------Private Sub ListConverters(keyHandleDummy As Long, _ ByVal lPredefRegKey As Long, _ ByVal strConverterDir As String, _ ByVal strWhatImLookingFor As String) ' V tr Dim subKeyHandle& Dim subSubKeyHandle& Dim strKeyName$, strClassName$ Dim keyLen&, classLen& Dim res& Dim i% ' Nhp RegEnumKeyEx temps Dim subKey As String * MAX_TEXT_BUFF ' tn converter Dim subSubKey As String * MAX_TEXT_BUFF ' options subkey Dim className As String * MAX_TEXT_BUFF Dim keyLastWritten As FILETIME ' RegOpenKeyEx temps Dim tempSubKey$

Dim tempAnotherSubKey$ ' RegQueryValueEx temps Dim strDataBuff As String * MAX_TEXT_BUFF Dim strDataBuffSub As String Dim lDataBuffSize As Long ' C nh hng Export/Import ' True=Export, False=Import Dim bExportImport As Boolean Dim strTemp As String ' khi to v v tr i% = 0 If ((strConverterDir = strREG_TEXT_CNV_IMPORT) Or _ (strConverterDir = strREG_GRAPH_FLT_IMPORT)) Then bExportImport = False Else bExportImport = True End If ' M on Converters\Import key res& = RegOpenKeyEx(lPredefRegKey, strConverterDir, _ 0, KEY_ALL_ACCESS, keyHandleDummy) If res& <> ERROR_SUCCESS Then ReportRegError res& Exit Sub End If ' m lit k tt c converters v tt nht l m cc kho keys

' cho mi converter subkey Do While RegEnumKeyEx(keyHandleDummy, i%, subKey, MAX_TEXT_BUFF, 0, _ className, MAX_TEXT_BUFF, keyLastWritten) = ERROR_SUCCESS ' M n res& = RegOpenKeyEx(keyHandleDummy, subKey, 0&, KEY_ALL_ACCESS, _ subKeyHandle&) ' Nu hng RegOpenKey th li 1 ln If res& <> ERROR_SUCCESS Then ReportRegError res& Exit Do Else ' M ni dung converter entries vi kho con Options subkey res& = RegOpenKeyEx(subKeyHandle&, strREG_CNV_OPTIONS, 0&, _ KEY_ALL_ACCESS, subSubKeyHandle&) lDataBuffSize = MAX_TEXT_BUFF If res& = ERROR_SUCCESS Then ' thm tng tn converter vo combo box res& = RegQueryValueEx(subKeyHandle&, strWhatImLookingFor, _ 0&, 0&, strDataBuff, lDataBuffSize) If res& = ERROR_SUCCESS Then ' Ngt trim v sa c ca chui string strDataBuffSub = Left$(strDataBuff, lDataBuffSize - 1) ' v bng table clsCnvTable.AddConverter strDataBuffSub, subSubKeyHandle&, bExportImport Else

'Thng bo li ReportRegError res& ' converter k tip vi kho Options key GoTo ResumeDoLoop End If Else GoTo ResumeDoLoop End If End If ResumeDoLoop: ' make sure everything's neat and tidy Call RegCloseKey(subKeyHandle&) i% = i% + 1 ' i%++ Loop ' R rng v ngn np... Call RegCloseKey(keyHandleDummy) Exit Sub FatalError: ' Dn dp xp t Set clsCnvTable = Nothing DisplayErrorMsg strERR_INIT_MESSED_UP End Sub '-----------------------------------------' Thit t radio buttons tu theo ' thit t trong list box '------------------------------------------

Private Sub SetRadioButtons(ByVal strDummy As String) ' Cc i s c th l "Yes" hoc "No" If strDummy = strOPT_YES Or strDummy = strOPT_NO Then ' Bt radio button bn phi ln If strDummy = strOPT_YES Then optYes.Value = True optNo.Value = False Else optYes.Value = False optNo.Value = True End If Else DisplayErrorMsg strERR_WRONG_STRING End If End Sub '------------------------------------' Cp nht ni dung trong list box '------------------------------------Private Sub UpdateOptions() Dim i As Integer Dim strListBoxEntry As String ' Cc bin RegEnumValue Dim hOptKey As Long ' Kho Options reg key Dim strValue As String * MAX_TEXT_BUFF Dim lValueSize As Long

Dim dwTypeCode As Long Dim strValueData As String * MAX_TEXT_BUFF Dim lValueDataSize As Long ' u tin nhn v b ni dung tn ti ' (Nu c bt c th g trong List box) If lstOptions.ListCount <> 0 Then lstOptions.Clear End If ' nhn key handle t bng table hOptKey = clsCnvTable.OptionsHandle(cboConverters.SelText) If hOptKey = 0 Then GoTo FatalError End If ' by gi nhn thit t dwTypeCode = 0& lValueSize = MAX_TEXT_BUFF lValueDataSize = MAX_TEXT_BUFF ' Thit t g? i=0 Do While RegEnumValue(hOptKey, i, strValue, lValueSize, 0&, dwTypeCode, _ strValueData, lValueDataSize) <> ERROR_NO_MORE_ITEMS ' B qua tt c khng phi chui (non-string) cc cp Value=Data If dwTypeCode <> REG_SZ Then GoTo ResumeDoLoop ' u tin ngt v sa cc c chui strListBoxEntry = Left$(strValue, lValueSize) & strEQUALS_SIGN & _

Left$(strValueData, lValueDataSize) ' ln lt thm vo list box lstOptions.AddItem strListBoxEntry lValueSize = MAX_TEXT_BUFF lValueDataSize = MAX_TEXT_BUFF ResumeDoLoop: i=i+1 Loop If lstOptions.ListCount > 0 Then lstOptions.ListIndex = 0 Else GoTo FatalError End If Exit Sub FatalError: DisplayErrorMsg strERR_UPDATE_OPTIONS End Sub '-------------------------------------' Ch thay i ni dung list box nu ' la chn mi khc '-------------------------------------Private Sub cboConverters_Change() UpdateOptions End Sub Private Sub cmdHelp_Click()

MsgBox strHLP_DLG_MSG1 & Chr(10) & Chr(13) & _ strHLP_DLG_MSG2 & Chr(10) & Chr(13) & _ strHLP_DLG_MSG3, _ vbOKOnly, strHLP_DLG_CAPTION End Sub Private Sub cmdOK_Click() ' Xo bng table Set clsCnvTable = Nothing Unload formEdOptions Exit Sub End Sub Private Sub cmdSet_Click() CommitChange txtSetting.Value End Sub '---------------------------------------------------' a ra radio buttons hoc thit lp edit box '---------------------------------------------------Private Sub lstOptions_Change() Dim strTemp As String If lstOptions.Value <> "" Then ' khai trin chui thc t ca option strTemp = ExtractOptionData(lstOptions.Value) 'N l "Yes" hay "No"? If strTemp = strOPT_YES Or strTemp = strOPT_NO Then ' Cho hin cc radio buttons, n edit box

't vo nt phi right button SetRadioButtons strTemp ' Nu edit box c hin? If txtSetting.Visible Then ' n n lblSetting.Visible = False txtSetting.Visible = False cmdSet.Visible = False ' Hin cc nt! optYes.Visible = True optNo.Visible = True End If ' N ch l mt chui string! Else ' Cho hin edit box, n cc radio buttons ' cp nht cc chui thit t txtSetting.Value = strTemp ' cc nt hin? If optYes.Visible Then 'n chng optYes.Visible = False optNo.Visible = False ' hin edit box lblSetting.Visible = True txtSetting.Visible = True

cmdSet.Visible = True End If End If End If End Sub Private Sub optNo_Click() CommitChange strOPT_NO End Sub Private Sub optYes_Click() CommitChange strOPT_YES End Sub ' Khi to dialog v control captions Private Sub UserForm_Initialize() ' dialog caption Caption = strMSG_CAPTION ' command buttons cmdOK.Caption = strCMD_OK cmdHelp.Caption = strCMD_HELP cmdSet.Caption = strCMD_SET ' radio buttons optYes.Caption = strOPT_YES optNo.Caption = strOPT_NO ' nhn labels lblConversion.Caption = strLBL_CONVERSION lblCnvOption.Caption = strLBL_CNV_OPTION

lblSetting.Caption = strLBL_SETTING ' lp y combo box If ControlsInit = False Then fEditInitSuccess = False DisplayErrorMsg strERR_NO_OPTIONS_FOUND Else fEditInitSuccess = True End If End Sub 2.2 Form th 2 c 1 nt lnh (Name)=RegOptionsForm Caption=Thit lp la chn trong Registry'hay mt tn khc tu (Name)=cmdClose 'Chn 2 Page l (Name)=Page1 (Name)=Page2 'Trang 1 c cc control, bn cn c vo tip u ng ca tn xc nh, ti b gii thch v qu di (Name)=lblWordOption (Name)=lstWordOpt (Name)=lblWordSetting (Name)=txtWordSet (Name)=lblWordOptDesc 'Trang 2 (Name)=lblEqOption (Name)=lstEqOpt

(Name)=lblEqSetting (Name)=txtEqSet (Name)=lblEqOptDesc 'Vit lnh cho form th 2 'Cc bin ly gi tr ra t ng dn phn ngm nh ca Word 2000 c vit bi Word khng vit ni dung ca chng vo Registry Dim iAutoSavePath, iDocPath, iPictPath, iProgPath, iStartPath, iToolsPath, iUserPath, iWkgrpPath As String Dim item__$(), List__$(), list2__$(), Key$, errortext$, sSection() Dim WItem__$(), EQItem__$(), EQlist__$(), WList__$(), Wkey$, EQKey$, help$, RegOptions$, notset$, errmsg1$, change, errchange$ Dim Space_$, sWordSet, sEqSet Dim LangList__$(), Lang__$(), CurLang$, NumLanguages, sLangLbl, sDictLbl, sEngLbl, sCancelMessage, sCancelTitle, sRegWord, sRegOpts, sRegProof, sRegEqDir, sRegEqGen '======================== ' Sub nh v '======================== Private Sub Localize() Dim HelpTitle$ errortext$ = "Mt li sy ra khi vit vo CSDL registration. C l l do ca trng hp ny l nh hng ca thuc tnh READ ONLY trong th mc Windows, hoc Windows ang chy ch Safe mode. Khi ng li Restart Windows trc khi chy li Macro ny." CurLang$ = "1033" ' s dng ngn ng u tin trong danh sch Space_$ = " " sCancelMessage = "Bn chn cancel. Tt c cc thay i s b mt. Bn c mun tip tc v khng ct nhng thay i m bn thit lp khng? Chn No ct nhng thay i." sCancelTitle = "Thi khng la chn Registry Options" sSection(0) = "Word 2000 Options" sSection(1) = "Equation Editor Options"

'-------Nhn cc ng dn ni b phn Built-in Default m khng vit vo Registry----iAutoSavePath = Application.Options.DefaultFilePath(wdAutoRecoverPath) iPictPath = Application.Options.DefaultFilePath(wdPicturesPath) iProgPath = Application.Options.DefaultFilePath(wdProgramPath) iStartPath = Application.Options.DefaultFilePath(wdStartupPath) iToolsPath = Application.Options.DefaultFilePath(wdToolsPath) iUserPath = Application.Options.DefaultFilePath(wdUserTemplatesPath) iWkgrpPath = Application.Options.DefaultFilePath(wdWorkgroupTemplatesPath) iDocPath = System.PrivateProfileString("", "HKEY_CURRENT_USER\Software\Microsoft\Office\9.0\Word\Options", "doc-path") If iDocPath = "" Then iDocPath = System.PrivateProfileString("", "HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Explorer\User Shell Folders", "Personal") End If '------------Word 2000 Options -------WItem__$(0, 2) = "t th mc ni m AutoRecovery nhp s ct cc tp vo. phn ngm nh s l th mc ..\<Windows>\Temp." WItem__$(1, 2) = "t phn ui Word lu backup. Thng thng phn s l .WBK." WItem__$(2, 2) = "t c ln nht ca cache ho Word bitmap(bng KB). Nu bn s dng nhiu ho trong vn bn m ln hn bitmap cache c th ci thin tc cun v v li. Khi t bng 1 Word s t ng iu chnh c bitmap cache." WItem__$(3, 2) = "t c ca cache tp Word file (bng KB). Bn c th ci thin tc I/O (Vo ra) i vi tp v cc tc v khc trong Word bng thay i c cache. Nh nht v phn c ca cache l 64K." WItem__$(4, 2) = "Thit lp phn nh dng ngy thng cho trng DATE. Chc nng ny ch s dng cho mc ch tng thch nhng phn trc. Word 2000 thng s dng." & Chr(10) & Chr(10) & Space_$ & "V d: MMMM d, yyyy." WItem__$(5, 2) = " phn ca tp s dng vn bn Word. phn l .DOC. Bn phi khi ng li Word th phn thit lp ny mi c tc dng." WItem__$(6, 2) = " phn th mc cha nhng vn bn Word." & Chr(10) & Chr(10) & Space_$ & " phn l: " & iDocPath

WItem__$(7, 2) = " phn tp mu Word templates. phn l .DOT. Bn phi khi ng li Word th phn thit lp ny mi c tc dng." WItem__$(8, 2) = "La chn ng dn ngi dng. Chc nng ny ch s dng cho mc ch tng thch nhng phn trc. Nh rng la chn ngi dng trong Word 2000 c ct Registry hay bn trong n." WItem__$(9, 2) = "Bt tt Disables/Enables danh sch Font s dng gn nht. Bn phi khi ng li Word th phn thit lp ny mi c tc dng. Vo s 0 hoc1:" & Chr(10) & Chr(10) & Space_$ & "0 - c danh sch gn nht Font." & Chr(10) & Space_$ & "1 - khng hin danh sch ny." WItem__$(10, 2) = "Vn bn mu theo danh ngha template, c s dng khi to mt i tng vn bn cha Word hay ng dng OLE khc." WItem__$(11, 2) = "Thit lp phn ng dn khi s dng Insert Picture. Bn phi khi ng li Word th phn thit lp ny mi c tc dng. Bn c th cng s dng Tools Options File Locations thit t." WItem__$(12, 2) = "Theo l thuyt ni m cc tp chng trnh Word c lu tr." & Chr(10) & Chr(10) & Space_$ & "ng dn phn: " & iProgPath WItem__$(13, 2) = "Cho php bn t bng ho bng vit bng mt chc nng v c bit ln mt vi my in Hewlett-Packard. S dng la chn ny khi in chm. nu my in khng h tr chc nng v c bit, th kho chuyn chng c tc dng. Vo 0 cho No, 1 cho Yes." WItem__$(14, 2) = "Thit lp ng dn khi ng cc tp Word startup, nh l templates v WLL's ti khi khi ng Word." & Chr(10) & Chr(10) & Space_$ & "ng dn phn ngm nh l: " & iStartPath WItem__$(15, 2) = "t phn nh dng thi gian cho trng TIME. Chc nng ny ch s dng cho mc ch tng thch nhng phn trc. Word 2000 s dng nh dng." & Chr(10) & Chr(10) & Space_$ & "V d: h:mm:ss" WItem__$(16, 2) = "Thit lp ni m Word s tm kim cng c proofing, lc filters, chuyn i converters, v cc cu thnh khc, trong trng hp ny chng c ng k ng n hoc khng tm thy trong cc th mc chun." WItem__$(17, 2) = "Theo l thuyt t in ngi dng cho kim tra chnh t s tng ng vi th t ca t in ngi dng trong danh sch Custom Dictionariestrong hp thoi Options ca tab Spelling." WItem__$(18, 2) = "ng dn cho tp mu ngi dng user templates. Nn nh rng khi thit lp thay i ny cho Word, n s nh hng n tt c cc ng dng Microsoft Office 2000 , nh hng ti Office Shortcut Bar." & Chr(10) & Chr(10) & Space_$ & "Ngm nh phn: " & iUserPath WItem__$(19, 2) = "ng dn cho nhm mu workgroup templates. Bn c th ch r ng dn UNC path, v d: " & Chr(10) & Chr(10) & Space_$ & "\\GROUP\USER\MYTMPLTS" EQItem__$(0, 2) = "Th mc chng trnh Equation Editor. Equation Editor phi c ci t v chy 1 ln cho chc nng ny v thit lp khc Equation Editor hin."

EQItem__$(1, 2) = "Thit lp Custom Zoom. Chc nng ny ch c tc dng khi Equation Editor c vo v tch ri ra 1 ca s theo ng thit lp ForceOpen." EQItem__$(2, 2) = "Forces Equation Editor m khi n t tch ri thnh 1 ca s. Vo 0 hoc 1:" & Chr(10) & Chr(10) & Space_$ & "0 - M trong cng 1 ni." & Chr(10) & Space_$ & "1 - M thnh ca s tch ri." EQItem__$(3, 2) = "Hin hoc n nhng k t khng in c non-printing ." EQItem__$(4, 2) = "Toolbar c ng k? 1 l yes, 0 l no." EQItem__$(5, 2) = "V tr ca toolbar n c ng k:" & Chr(10) & Chr(10) & Space_$ & "1 nh ca ca s EQ Editor." & Chr(10) & Space_$ & "2 - y ca ca s EQ Editor." EQItem__$(6, 2) = "Toolbar hin? 1 l yes, 0 l no." EQItem__$(7, 2) = "V tr ca toolbar khi n khng ng k, Theo l thuyt to X,Y vi gc tri trn. n v l pixel." EQItem__$(8, 2) = "S ca v sn Equation Editor." EQItem__$(9, 2) = "C phng chun trn View menu." help$ = " sa cha cc thit lp h thng lin quan n Word c lu tr Windows Registry chn mt mc t danh sch Section list, sau chn Option. Thay i thit lp trong hp Setting nh gi tr mi v chn Change. Xin hy cn thn." RegOptions$ = "Microsoft Word Registry Options" HelpTitle$ = "Microsoft Word RegOptions Help" notset$ = "S dng ngm nh" errmsg1$ = "Thit lp sai gi tr." errchange$ = "Mt vi thit lp Word lin quan n Registry, xin thot v khi ng li Word." End Sub Private Sub cmdClose_Click() Unload Me End Sub Private Sub lstWordOpt_Change() If Not IsNull(lstWordOpt.Value) Then i = lstWordOpt.ListIndex

' ngn chn khong trng trong textbox If WItem__$(i, 3) = " " Then txtWordSet.Text = "" Else txtWordSet.Text = WItem__$(i, 3) End If lblWordOptDesc = WItem__$(i, 2) End If End Sub Private Sub lstEqOpt_Change() If Not IsNull(lstEqOpt.Value) Then i = lstEqOpt.ListIndex txtEqSet.Text = EQItem__$(i, 3) lblEqOptDesc = EQItem__$(i, 2) End If End Sub Private Sub txtWordSet_Enter() sWordSet = txtWordSet.Value End Sub Private Sub txtWordSet_Exit(ByVal Cancel As MSForms.ReturnBoolean) If Not sWordSet = txtWordSet.Value Then i = lstWordOpt.ListIndex WItem__$(i, 3) = txtWordSet.Text If WItem__$(i, 3) = " " Then WItem__$(i, 3) = "" System.PrivateProfileString("", WItem__$(i, 0), WItem__$(i, 1)) = WItem__$(i, 3)

End If End Sub Private Sub txtEqSet_Enter() sEqSet = txtEqSet.Value End Sub Private Sub txtEqSet_Exit(ByVal Cancel As MSForms.ReturnBoolean) If Not sEqSet = txtEqSet.Value Then i = lstEqOpt.ListIndex EQItem__$(i, 3) = txtEqSet.Text If EQItem__$(i, 3) = " " Then EQItem__$(i, 3) = "" System.PrivateProfileString("", EQItem__$(i, 0), EQItem__$(i, 1)) = EQItem__$(i, 3) End If End Sub Private Sub UserForm_Initialize() ReDim item__$(0) ReDim List__$(32) ReDim sSection(6) ReDim WItem__$(0) ReDim EQItem__$(7) ReDim EQlist__$(9) ReDim WList__$(19) Dim i Dim x Key$ = "" errortext$ = ""

Wkey$ = "" EQKey$ = "" help$ = "" RegOptions$ = "" notset$ = "" errmsg1$ = "" change = 0 errchange$ = "" Space_$ = "" CurLang$ = "" NumLanguages = 0 ReDim List__$(51), list2__$(51) ReDim WItem__$(19, 3), EQItem__$(9, 3) sRegWord = "HKEY_CURRENT_USER\Software\Microsoft\Office\9.0\Word" sRegOpts = "HKEY_CURRENT_USER\Software\Microsoft\Office\9.0\Word\Options" sRegEqDir = "HKEY_CURRENT_USER\Software\Microsoft\Equation Editor\3.0\Options\Directories" sRegEqGen = "HKEY_CURRENT_USER\Software\Microsoft\Equation Editor\3.0\Options\General" Localize mulMainForm.Pages.Item(0).Caption = sSection(0) mulMainForm.Pages.Item(1).Caption = sSection(1) mulMainForm.Value = 0 '------------ Word 7.0 Options --------WItem__$(0, 0) = sRegOpts WItem__$(0, 1) = "AutoSave-Path" WItem__$(1, 0) = sRegOpts

WItem__$(1, 1) = "Bak-Extension" WItem__$(2, 0) = sRegOpts WItem__$(2, 1) = "BitMapMemory" WItem__$(3, 0) = sRegOpts WItem__$(3, 1) = "CacheSize" WItem__$(4, 0) = sRegOpts WItem__$(4, 1) = "DateFormat" WItem__$(5, 0) = sRegOpts WItem__$(5, 1) = "DOC-Extension" WItem__$(6, 0) = sRegOpts WItem__$(6, 1) = "DOC-Path" WItem__$(7, 0) = sRegOpts WItem__$(7, 1) = "DOT-Extension" WItem__$(8, 0) = sRegOpts WItem__$(8, 1) = "INI-Path" WItem__$(9, 0) = sRegOpts WItem__$(9, 1) = "NoFontMRUList" WItem__$(10, 0) = sRegOpts WItem__$(10, 1) = "OLEDOT" WItem__$(11, 0) = sRegOpts WItem__$(11, 1) = "Picture-Path" WItem__$(12, 0) = sRegOpts WItem__$(12, 1) = "ProgramDir" WItem__$(13, 0) = sRegOpts WItem__$(13, 1) = "SlowShading"

WItem__$(14, 0) = sRegOpts WItem__$(14, 1) = "Startup-Path" WItem__$(15, 0) = sRegOpts WItem__$(15, 1) = "TimeFormat" WItem__$(16, 0) = sRegOpts WItem__$(16, 1) = "Tools-Path" WItem__$(17, 0) = sRegOpts WItem__$(17, 1) = "UpdateDictonaryNumber" WItem__$(18, 0) = sRegOpts WItem__$(18, 1) = "User-Dot-Path" WItem__$(19, 0) = sRegOpts WItem__$(19, 1) = "Workgroup-Dot-Path" '-------------EQEdit '--Cc th mc EQItem__$(0, 0) = sRegEqDir EQItem__$(0, 1) = "Appdir" '--General EQItem__$(1, 0) = sRegEqGen EQItem__$(1, 1) = "CustomZoom" EQItem__$(2, 0) = sRegEqGen EQItem__$(2, 1) = "ForceOpen" EQItem__$(3, 0) = sRegEqGen EQItem__$(3, 1) = "ShowAll" EQItem__$(4, 0) = sRegEqGen EQItem__$(4, 1) = "ToolBarDocked"

EQItem__$(5, 0) = sRegEqGen EQItem__$(5, 1) = "ToolBarDockPos" EQItem__$(6, 0) = sRegEqGen EQItem__$(6, 1) = "ToolBarShown" EQItem__$(7, 0) = sRegEqGen EQItem__$(7, 1) = "ToolBarWinPos" EQItem__$(8, 0) = sRegEqGen EQItem__$(8, 1) = "Version" EQItem__$(9, 0) = sRegEqGen EQItem__$(9, 1) = "Zoom" '------------------------For i = 0 To 19 WItem__$(i, 3) = System.PrivateProfileString("", WItem__$(i, 0), WItem__$(i, 1)) If WItem__$(i, 3) = "" Then WItem__$(i, 3) = " " WList__$(i) = WItem__$(i, 1) Next '-------------------For i = 0 To 9 EQItem__$(i, 3) = System.PrivateProfileString("", EQItem__$(i, 0), EQItem__$(i, 1)) If EQItem__$(i, 3) = "" Then EQItem__$(i, 3) = " " EQlist__$(i) = EQItem__$(i, 1) Next '----------------------lstWordOpt.List() = WItem__$ txtWordSet.Text = WItem__$(0, 3)

lblWordOptDesc.Caption = WItem__$(0, 2) lstWordOpt.ColumnWidths = "0;-1" lstEqOpt.List() = EQItem__$ txtEqSet.Text = EQItem__$(0, 3) lblEqOptDesc.Caption = EQItem__$(0, 2) lstEqOpt.ColumnWidths = "0;-1" End Sub ============= '2.3 Chn mt Module bng INSERT MODULE 'Module COMMON Option Explicit ' Khai bo bin ' V tr kho Key Registry Public strRegSettingsKey As String ' C Public fEditInitSuccess As Boolean 'true Khi hp Edit Conv Options 'c khi to ' Forms Public formEdOptions As EditCnvOptionsForm 'Options dialog ' Khc Public clsCnvTable As CConverterTable ' i tng bng converter/filter Public Sub EditConversionOptions() ' Bng converter/filter Set clsCnvTable = New CConverterTable If clsCnvTable Is Nothing Then GoTo FatalError

End If ' Khi to dialog box Set formEdOptions = New EditCnvOptionsForm If formEdOptions Is Nothing Then ' Xo bng Set clsCnvTable = Nothing GoTo FatalError End If If fEditInitSuccess = True Then formEdOptions.Show End If Exit Sub FatalError: DisplayErrorMsg strERR_INIT_OPTIONSFORM End Sub ' Tr v gi tr c lu trong kho registry key strId Public Function StrFetchPref(strId As String) As String On Error GoTo LReturnNull StrFetchPref = System.PrivateProfileString("", strRegSettingsKey, strId) Exit Function LReturnNull: StrFetchPref = "" End Function ' a ra strValue trong registry key strId 'Public Sub StorePref(strId As String, strValue As String)

Dim strTemp As String ' If string is empty, store "~" as placeholder If (Len(strValue) = 0) Then strTemp = "~" Else strTemp = strValue End If System.PrivateProfileString("", strRegSettingsKey, strId) = strTemp End Sub ' Tr v chui c lu trong strId. Nu rng, tr v strDefault Public Function StrRestorePref(strId As String, strDefault As String) As String Dim strTemp As String strTemp = StrFetchPref(strId) ' Nu chiu di bng 0 n khng c trong regsistry, Nn s dng gi tr phn If Len(strTemp) = 0 Then strTemp = strDefault ' "~" l chng c cho php tr v chui rng ElseIf strTemp = "~" Then strTemp = "" End If StrRestorePref = strTemp End Function ' a ra iVal trong registry key strId nh mt chui string Public Sub StoreValPref(strId As String, iVal As Integer) StorePref strId, LTrim$(str$(iVal))

End Sub ' Tr v gi tr c lu trong kho key strId ' Nu sai tr v iDefault. Public Function FRestorePref(strId As String, fDefault As Boolean) As Boolean Dim strVal As String strVal = StrFetchPref(strId) If Len(strVal) = 0 Then FRestorePref = fDefault Else FRestorePref = Val(strVal) End If End Function ' Tr v gi tr c lu trong kho key strId ' Nu sai tr v iDefault. Public Function IRestorePref(strId As String, iDefault As Integer) As Integer Dim strVal As String strVal = StrFetchPref(strId) If Len(strVal) = 0 Then IRestorePref = iDefault Else IRestorePref = Val(strVal) End If End Function ' Hin li nhc li bng mt balloon nu s dng tn thuyt minh Assistant ' hay hin hp thoi khi ang ch dng dialog.

Public Sub DisplayErrorMsg(strErrMsg As String) MsgBox strErrMsg, vbExclamation + vbOKOnly + vbApplicationModal Err.Clear End Sub ================= '2.4 Chn mt MODULE CLASS bng INSERT MODULE CLASS 'Module CCONVERTERTABLE - CLASS '------------------------------------------------------------' Class Name: CConverterTable ' M t: Lp Class cha tn v kho reg bng tay ca on text chuyn v lc ho. '------------------------------------------------------------Option Explicit Option Compare Text ' Hng dn cha trong converter/filter data Private Type CNV_FLT_ELEMENT strCnvName As String ' Tn ca converter/filter hOptKey As Long 'La chn reg key bng tay iNext As Integer ' ch s index ca phn t k tip trong danh sch ni kt End Type ' K t VBA khng c cc pointers, bng ny s dng mt bng v trng ln gi v mt danh sch ni kt '----------' Cc hng constants '----------' Khi to c bng Private Const iINIT_TBL_SIZE = 10

' C bc nhy (s gia tng) Private Const iINC_STEP = 5 'Gi tr trng.iNext ca phn t cui cng trong danh sch ni kt Private Const iLAST_ELMNT = -1 '---------------------' Nhng thnh vin ring '---------------------'Chnh bng Private m_arrCnvTable() As CNV_FLT_ELEMENT ' C hin ti ca bng Private m_iCurrTblSize As Integer ' S hin ti ca cc chuyn i Private m_iCurrNumCnv As Integer ' Ch s ca phn chuyn u tin trong dnh sch Private m_iFirst As Integer '-----------------------------------------------'--- Thm vo phn thm ca chuyn i, ng thi chui handle ca n --'--------- ti kho Options key vo bng --------'-----------------------------------------------Public Sub AddConverter(ByVal strCnvNameDummy As String, _ ByVal hOptKeyDummy As Long, _ ByVal bExportImportFlag As Boolean) Dim i, j As Integer Dim bExpImpOn As Boolean Dim strTempOld As String

Dim strTempNew As String Dim iPrev As Integer ' Phn t c trc c so snh vi phn t mi Dim iFoll As Integer ' phn t theo sau c so snh vi phn t mi Dim iCurr As Integer ' Phn t hin ti c thm vo danh sch Dim iCompRes As Integer ' Kt qu chui string so snh bExpImpOn = False ' nh li c bng nu cn thit If m_iCurrNumCnv = m_iCurrTblSize Then ' C gia tng m_iCurrTblSize = m_iCurrTblSize + iINC_STEP ' nh li c ReDim Preserve m_arrCnvTable(m_iCurrTblSize) As CNV_FLT_ELEMENT End If ' True=Export, False=Import ' Kim tra trng tn trong bng c ri For i = 0 To m_iCurrNumCnv - 1 If m_arrCnvTable(i).strCnvName = strCnvNameDummy Then bExpImpOn = True Exit For End If Next ' Nu c mt tn trng th thm hu t If bExpImpOn = True Then ' Ni thm hu t Export/Import ti tn chuyn If bExportImportFlag = True Then ' currently called from Exports

' Phn c phi Imports strTempOld = m_arrCnvTable(i).strCnvName & strREG_IMPORT m_arrCnvTable(i).strCnvName = strTempOld strTempNew = strCnvNameDummy & strREG_EXPORT Else ' Phn c t Exports th a vo Import strTempOld = m_arrCnvTable(i).strCnvName & strREG_EXPORT m_arrCnvTable(i).strCnvName = strTempOld strTempNew = strCnvNameDummy & strREG_IMPORT End If End If ' Thm tn chuyn vo bng ' b m s gia tng m_iCurrNumCnv = m_iCurrNumCnv + 1 ' Vo tn chuyn i v kho cn Options key handle With m_arrCnvTable(m_iCurrNumCnv - 1) If bExpImpOn = False Then .strCnvName = strCnvNameDummy .hOptKey = hOptKeyDummy Else .strCnvName = strTempNew .hOptKey = hOptKeyDummy End If End With ' Xp theo ch s

' danh sch rng? If m_iCurrNumCnv = 1 Then m_iFirst = 0 m_arrCnvTable(0).iNext = iLAST_ELMNT Else 'Khi to con tr pointers v ch s iPrev = m_iFirst iFoll = m_iFirst iCurr = m_iCurrNumCnv - 1 ' Lin kt n vi du vt Do ' So snh nu mi hn th thm phn t vo sau iCompRes = StrComp(m_arrCnvTable(iCurr).strCnvName, _ m_arrCnvTable(iFoll).strCnvName) ' Chn vo y If iCompRes = -1 Then m_arrCnvTable(iCurr).iNext = iFoll If iFoll = m_iFirst Then m_iFirst = iCurr Else m_arrCnvTable(iPrev).iNext = iCurr End If Exit Do ' Mang i tm kim Else

iPrev = iFoll ' Ci tin nu n khng phi phn t cui cng., ' Trng hp khc loi b n, lp ti cui cng bng mi cch If Not (m_arrCnvTable(iFoll).iNext = iLAST_ELMNT) Then iFoll = m_arrCnvTable(iFoll).iNext End If End If Loop Until (m_arrCnvTable(iFoll).iNext = iLAST_ELMNT) ' Ti xung tng bc vi ton b danh sch? If m_arrCnvTable(iFoll).iNext = iLAST_ELMNT Then ' to mt con tr theo sau cnh n. m_arrCnvTable(iFoll).iNext = iCurr 'To n cui cng m_arrCnvTable(iCurr).iNext = iLAST_ELMNT End If End If Exit Sub End Sub Public Sub AddConverterNamesToCombo(ByRef cboCombo As Object) Dim iIndex As Integer iIndex = m_iFirst While Not (iIndex = iLAST_ELMNT) cboCombo.AddItem m_arrCnvTable(iIndex).strCnvName iIndex = m_arrCnvTable(iIndex).iNext Wend

End Sub Public Property Get ConverterCount() As Integer ' tr v s trong danh sch chuyn i hay lc ConverterCount = m_iCurrNumCnv End Property '---------------------------------------'--- B qua tn converter/filter, --'---- tr v Options key handle ca n ----'---------------------------------------Public Property Get OptionsHandle(ByVal strCnvNameDummy As String) As Long Dim i As Integer ' Tm th m n chuyn thnh For i = 0 To m_iCurrNumCnv - 1 If m_arrCnvTable(i).strCnvName = strCnvNameDummy Then Exit For End If Next 'kim tra theo quy cch If m_arrCnvTable(i).hOptKey = 0 Then GoTo FatalError End If ' Tr v Options handle ca n OptionsHandle = m_arrCnvTable(i).hOptKey Exit Property FatalError:

DisplayErrorMsg strERR_UPDATE_OPTIONS End Property '---------------------------'--- Khi to bng --'---------------------------Private Sub Class_Initialize() ' Thit lp c bng khi to m_iCurrTblSize = iINIT_TBL_SIZE ' Khi to bng vi n ReDim m_arrCnvTable(m_iCurrTblSize) As CNV_FLT_ELEMENT ' cha thm phn chn m_iCurrNumCnv = 0 ' Hoc khng hiu i vi phn t u tin m_iFirst = -1 End Sub '----------------------------'--- Dn dp registry --'----------------------------Private Sub Class_Terminate() Dim i As Integer ' ng tt c kho Option reg keys For i = 0 To m_iCurrNumCnv - 1 Call RegCloseKey(m_arrCnvTable(i).hOptKey) Next End Sub

=========== '2.5 Chn mt Module bng INSERT MODULE 'MODULE: EditOptCommon '--------------------------------------' Khai bo hng dng chung '--------------------------------------Option Explicit ' Phn bao trm ' Hp thoi v tiu li nhc Global Const strMSG_CAPTION = "Sa son Converter v Filter Options" ' Nhn li nhc khi c li Global Const strERR_LIST_CONVERTERS = "ListConverters" ' Li nhc v li Global Const strERR_NO_OPTIONS_FOUND = "Khng c la chn tm thy trong registry." Global Const strERR_CANNOT_OPEN_REG = "Khng th m c registry." Global Const strERR_CANNOT_OPEN_REGKEY = "Khng th m c kho registry key." Global Const strERR_CANNOT_ADD_NAME = "Khng th thm tn vo danh sch chuyn i converter list." Global Const strERR_INIT_MESSED_UP = "Khi to quy trnh ngt v b qua." Global Const strERR_WRONG_STRING = "Chui sai quy cch." Global Const strERR_UPDATE_OPTIONS = "L chn khng th cp nht ng n." Global Const strERR_INIT_OPTIONSFORM = "Li khi to Edit Conversion Options form." Global Const strERR_INTERNAL = "Macro khng th tip tc v c mt li xy ra." Global Const strERR_PATH_TOO_LONG = "ng dn th mc qu di." ' Li nhc li Registry Global Const strREG_ERR_CAPTION = "Registry hng."

Global Const strREG_ERR_BAD_DB = "C s d liu sai." Global Const strREG_ERR_BAD_KEY = "Sai kho key." Global Const strREG_ERR_CANT_OPEN = "Khng th m registry." Global Const strREG_ERR_CANT_READ = "Khng c c registry." Global Const strREG_ERR_CANT_WRITE = "Khng vit vo c registry." Global Const strREG_ERR_OUT_OF_MEMORY = "B nh trn." Global Const strREG_ERR_INVALID_PARAMETER = "Sai tham s." Global Const strREG_ERR_ACCESS_DENIED = "Reigstry b t chi truy xut." Global Const strREG_ERR_INVALID_PARAMETERS = "Sai cc tham s." Global Const strREG_ERR_NO_MORE_ITEMS = "Khng th nhiu khon trong kho key ny." Global Const strREG_ERR_BAD_ACCESS = "Truy nhp registry hng." ' Chui tr gip Help Global Const strHLP_DLG_CAPTION = "Edit Conversion Options Help" Global Const strHLP_DLG_MSG1 = "Hp la chn Edit Converter and Filter" Global Const strHLP_DLG_MSG2 = " cho php bn t thit lp duy nht." Global Const strHLP_DLG_MSG3 = " cho vn bn chuyn v lc ho." ' Nhn cc nt radio Global Const strOPT_YES = "Yes" Global Const strOPT_NO = "No" ' Nhn cc nt lnh comand Global Const strCMD_OK = "OK" Global Const strCMD_CANCEL = "Cancel" Global Const strCMD_HELP = "Help" Global Const strCMD_SET = "Set" ' Nhn hp label

Global Const strLBL_CONVERSION = "Conversion:" Global Const strLBL_CNV_OPTION = "Conversion Option:" Global Const strLBL_SETTING = "Setting:" ' Chn nt th mc text Global Const strSEL_FLD_BUTTON_TEXT = "Select" '--------------------------------------------------------------'********** ng khoanh vng CODE pha sau im ny ********* '--------------------------------------------------------------Global Const strEQUALS_SIGN = "=" ' Hng Registry v keys Global Const REG_SZ As Long = 1 Global Const REG_DWORD As Long = 4 Global Const HKEY_CURRENT_USER = &H80000001 Global Const HKEY_LOCAL_MACHINE = &H80000002 Global Const ERROR_SUCCESS = 0& Global Const ERROR_BAD_DB = 1& Global Const ERROR_BAD_KEY = 2& Global Const ERROR_CANT_OPEN = 3& Global Const ERROR_CANT_READ = 4& Global Const ERROR_CANT_WRITE = 5& Global Const ERROR_OUT_OF_MEMORY = 6& Global Const ERROR_INVALID_PARAMETER = 7& Global Const ERROR_ACCESS_DENIED = 8& Global Const ERROR_INVALID_PARAMETERS = 87& Global Const ERROR_NO_MORE_ITEMS = 259&

Global Const SYNCHRONIZE = &H100000 Global Const STANDARD_RIGHTS_READ = &H20000 Global Const STANDARD_RIGHTS_WRITE = &H20000 Global Const STANDARD_RIGHTS_EXECUTE = &H20000 Global Const STANDARD_RIGHTS_REQUIRED = &HF0000 Global Const STANDARD_RIGHTS_ALL = &H1F0000 Global Const KEY_QUERY_VALUE = &H1 Global Const KEY_SET_VALUE = &H2 Global Const KEY_CREATE_SUB_KEY = &H4 Global Const KEY_ENUMERATE_SUB_KEYS = &H8 Global Const KEY_NOTIFY = &H10 Global Const KEY_CREATE_LINK = &H20 Global Const KEY_READ = ((STANDARD_RIGHTS_READ Or KEY_QUERY_VALUE Or KEY_ENUMERATE_SUB_KEYS Or KEY_NOTIFY) And Not (SYNCHRONIZE)) Global Const KEY_WRITE = ((STANDARD_RIGHTS_WRITE Or KEY_SET_VALUE Or KEY_CREATE_SUB_KEY) And (Not SYNCHRONIZE)) Global Const KEY_EXECUTE = (KEY_READ) Global Const KEY_ALL_ACCESS = ((STANDARD_RIGHTS_ALL Or KEY_QUERY_VALUE Or KEY_SET_VALUE Or KEY_CREATE_SUB_KEY Or KEY_ENUMERATE_SUB_KEYS Or KEY_NOTIFY Or KEY_CREATE_LINK) And (Not SYNCHRONIZE)) Global Const REG_OPTION_NON_VOLATILE = 0 ' ng dn registry paths ti text converters v graphics filters Global Const strREG_TEXT_CNV_IMPORT = "SOFTWARE\Microsoft\Shared Tools\Text Converters\Import" Global Const strREG_TEXT_CNV_EXPORT = "SOFTWARE\Microsoft\Shared Tools\Text Converters\Export" Global Const strREG_GRAPH_FLT_IMPORT = "SOFTWARE\Microsoft\Shared Tools\Graphics Filters\Import" Global Const strREG_GRAPH_FLT_EXPORT = "SOFTWARE\Microsoft\Shared Tools\Graphics Filters\Export"

' ng dn registry ti User Shell Folders v thit lp Conversion Wizard Global Const strREG_PERFORM_BATCH = "Software\Microsoft\Office\9.0\Word\Wizards\Conversion Wizard" Global Const strREG_USER_SHELL_FOLDERS = "Software\Microsoft\Windows\CurrentVersion\Explorer\User Shell Folders" ' Vi tn gi tr v d liu Global Const strREG_ALWAYS_BATCH = "AlwaysBatch" Global Const strREG_YES = "Yes" Global Const strREG_NO = "No" Global Const strREG_PERSONAL = "Personal" Global Const strC_DIR = "C:\" Global Const strREG_CNV_NAME = "Name" Global Const strREG_CNV_OPTIONS = "Options" Global Const strREG_IMPORT = " (Import)" Global Const strREG_EXPORT = " (Export)" ' C ln nht ca mt text buffer Global Const THREE_CHARS = 4 Global Const MAX_TEXT_BUFF = 255 Global Const ONE_K_BUFF = 1024 ' Chn th mc tr v hng s Global Const lFILE_OPEN_SUCCESS = 0& Global Const lFILE_OPEN_ERROR = 99& ' Cc kho chuyn v lc registry keys Global hCnvImpKeyHandle As Long Global hCnvExpKeyHandle As Long Global hFltImpKeyHandle As Long Global hFltExpKeyHandle As Long

' FILETIME Type definition Type FILETIME dwLowDateTime As Long dwHighDateTime As Long End Type '--------------------------------' Cc hm API vi Registry '--------------------------------' M kho RegOpenKeyEx Declare Function RegOpenKeyEx Lib "advapi32.dll" Alias "RegOpenKeyExA" _ (ByVal HKey As Long, ByVal lpSubKey As String, ByVal ulOPTIONS As _ Long, ByVal samDesired As Long, phkResult As Long) As Long ' To kho RegCreateKeyEx Declare Function RegCreateKeyEx Lib "advapi32.dll" Alias _ "RegCreateKeyExA" (ByVal HKey As Long, ByVal lpSubKey As String, _ ByVal Reserved As Long, ByVal lpClass As String, ByVal dwOptions _ As Long, ByVal samDesired As Long, ByVal lpSecurityAttributes _ As Long, phkResult As Long, lpdwDisposition As Long) As Long ' ng kho RegCloseKey Declare Function RegCloseKey Lib "advapi32.dll" (ByVal HKey As Long) _ As Long ' Gi tr kho RegEnumKeyEx Declare Function RegEnumKeyEx Lib "advapi32.dll" Alias "RegEnumKeyExA" _ (ByVal HKey As Long, ByVal dwIndex As Long, ByVal lpname As String, _ lpcbName As Long, ByVal lpReserved As Long, ByVal lpClass As String, _

lpcbClass As Long, lpftLasrWriteTime As FILETIME) As Long ' Gi tr lc RegQueryValueEx Declare Function RegQueryValueEx Lib "advapi32.dll" Alias _ "RegQueryValueExA" (ByVal HKey As Long, ByVal lpValueName As String, _ ByVal lpReserved As Long, lpType As Long, ByVal lpData As String, _ lpcbData As Long) As Long ' Gi tr RegEnumValue Declare Function RegEnumValue Lib "advapi32.dll" Alias "RegEnumValueA" _ (ByVal HKey As Long, ByVal dwValueIndex As Long, ByVal lpValue As String, _ lpValueSize As Long, ByVal lpReserved As Long, lpTypeCode As Long, _ ByVal lpValueData As String, lpcbValueDataSize As Long) As Long ' t chui gi tr vo Registry Declare Function RegSetValueExString Lib "advapi32.dll" Alias _ "RegSetValueExA" (ByVal HKey As Long, ByVal lpValueName As String, _ ByVal lReserved As Long, ByVal dwValueType As Long, ByVal lpData As String, _ ByVal lcbDataSize As Long) As Long Public Sub ReportRegError(lErrNum As Long) Dim strMsg As String ' N l ci no? Select Case lErrNum Case ERROR_BAD_DB strMsg = strREG_ERR_BAD_DB Case ERROR_BAD_KEY strMsg = strREG_ERR_BAD_KEY Case ERROR_CANT_OPEN

strMsg = strREG_ERR_CANT_OPEN Case ERROR_CANT_READ strMsg = strREG_ERR_CANT_READ Case ERROR_CANT_WRITE strMsg = strREG_ERR_CANT_WRITE Case ERROR_OUT_OF_MEMORY strMsg = strREG_ERR_OUT_OF_MEMORY Case ERROR_INVALID_PARAMETER strMsg = strREG_ERR_INVALID_PARAMETER Case ERROR_ACCESS_DENIED strMsg = strREG_ERR_ACCESS_DENIED Case ERROR_INVALID_PARAMETERS strMsg = strREG_ERR_INVALID_PARAMETERS Case ERROR_NO_MORE_ITEMS strMsg = strREG_ERR_NO_MORE_ITEMS Case Else strMsg = strREG_ERR_BAD_ACCESS End Select ' hin n MsgBox strMsg, vbOKOnly, strREG_ERR_CAPTION End Sub =========== ' 2.6 Chn mt Module INSERT MODULE 'Module RegOptions Sub RegOptions()

RegOptionsForm.Show End Sub

Ni v cc bus, a ch b nh, lin kt...


Bn thn mn! Trc khi i su vo cc phn khc ca Windows API ti mun tm lc li mt s vn m chng ta cn phi thng nht d lm vic. u tin ti xin c trnh by s lc v lu tr v cc bus. Nhng vn ny, rt nhiu bn c hc v nghin cu ging ng i hc, nhng cng khng t bn vn cn m h. Ti xin php c trnh by theo phng php QTN (n gin ho), mt phng php m ti c hc v hin ti ang p dng ti Trung tm Tin hc ABC. Ti khng c hc Tin hc chnh quy nn nu thut ng khng ng nht vi bn xin c gp v ch bo. Trc tin v cng cm n chn thnh ti TS. Quch Tun Ngc (B Gio dc v o to), anh ng Minh Tun (Tc gi VietKey), anh Lu H Xuyn(Tc gi Vietspell), bn Nguyn H Thin ng (Thnh ph H Ch Minh), ch Do Tuyen (Trng i hc Los Angeles) v ng o cc bn hc sinh sinh vin v ngi hc trong nc v nc ngoi ng vin, gip , nh hng v cung cp ti liu c ting Vit v ting Anh ti hon thnh b bi vit ny. Xin lu : Tt c nhng g cp trong bi vit ca ti bn u c th DownLoad t cc kho ca Web L Hon v trn a CD do ca hng Duy Nghi cung cp. a ch c nhn: ngphthaovn@yahoo.com (Khng gii p Tin hc) a ch gii p Tin hc: fthaoabc@yahoo.com - Do Trung tm Tin hc ABC qun l. Cc bi vit v API c tham kho v bin son v hon thin t cc chng trnh m ti c gi tng: 1. B a CDROM: Microsoft Studio MSDN. 2. Website ca Microsoft. http://msdn.microsoft.com/ 3. a CDROM: Th gii Vi tnh. 4. Gio n My tnh v Lp trnh Windows ca Nguyn Cng - Trung tm Tin hc ABC 5. Cc gio n o to Tin hc ca Trng i hc Lt An gi lt (Hoa K), Trng i hc Ham buc (CHLB c), Trng i hc Tng hp Vc sa va (Ba Lan), Trng i hc Bch Khoa H Ni, Hc vin K thut Qun s (Vit Nam), Hc vin Hng Khng Jucopxki (Nga)... 6. Mt lot cc bi vit chuyn v tt nghip ca cc bn sinh vin v cc k s mi lnh vc... 7. K xo lp trnh Visual Basic ca L Hu t 8. Hng dn Lp trnh Visual Basic vi WIN API ca tp on SAMIS Bus v a ch cc nh

Cng vic ca my tnh cng ging nh mt cng vic lm hng ngy ca bn. Khi bn ra lnh cho my lm mt cng vic no th bn phi ni r cng vic cn phi lm nh th no. Ta hy nghin cu mt cng vic n gin d hiu. V d ra lnh n gin: - Mang sch n bn hc.

Ta thy cu lnh ny gm cc phn: - Lnh: Mang i - Trong tin hc n c a vo Bus lnh. - Mang g: Sch - Trong tin hc n c a vo Bus d liu. - Mang i u - Trong tin hc n c a vo Bus a ch. C ngha l mt lnh n gin thng bao hm 3 loi trn, ta tm gi n l cc d kin hon thnh mt lnh. C mt s lnh khng nht thit phi c 3 d kin trn nh: Tt in (2 d kin, lnh: tt, d liu: in) hay Thi (Ch mt d kin lnh: Thi).... Vn ra lnh nh trn ngi ta gi l ra lnh trc tip. Ra lnh trc tip c u im l my s thc hin rt nhanh nhng s kh khn i vi vic t chc thnh cc h thng cng vic dy chuyn hnh thnh nn chng trnh ng dng. Chnh v vy cc h iu hnh thng chia a ch b nh (RAM) ra thnh cc phn, ti mi phn to thnh cc ngn. C nhiu loi ngn phc v cho tng mc ch khc nhau. Ta thy c mt loi ngn nh th ny: S ch v tr A1 S ch v tr A2 ........ S ch v tr An Mt tp lnh dng COM, BIN, BAT hay EXE khi thi hnh s c np ton b hoc mt phn ln b nh RAM chim mt v tr trong b nh RAM ny. Khi np xong, n s bo a ch nm ca n ln mt ngn lu tr a ch dng trn. Khi c bin c tng ng, h iu hnh s tra trong ngn trn tm v tr lu cng vic phi lm. N s tm n mt dng ngn th 2. rng ca ngn ti v tr... S ch lnh thc hin S ch a ch S ch d liu Cc s khc nu c... ........... S ch v tr lnh tip Ti ngn ny n s bit c lnh phi thc hin l lnh g, v tr u v nhng d liu g km theo thc hin n. (3 dng d kin nh phn trn ti trnh by). Ti sao li l cc s ch ra mt v tr no ? y chnh l cc ngn ghi a ch ca cng vic cn tin hnh. Ngha l h iu hnh hoc bt k mt chng trnh no cng c mt ngn nh th ny, lu danh sch cc cng vic cn thc hin (a ch ca cng vic nm trn danh sch ny)

Cc ngn ny lin tc c b sung do chnh chng trnh ct li lin tc a vo tu thuc vo ngi s dng tc ng hay mt bin c pht sinh. T y ta li ni chuyn v cc hm API mt cch chung nht (V ring tng hm, ti u c nhng bi vit ring). Ta c th dng API nhn mt v tr ca mt lnh A no , tm n thay i hay copy d kin ca lnh . Nu thay i, ta s ch cho h iu hnh ra thi hnh mt lnh mi mt v tr m ta ch nh, thc hin xong lnh ny ta li ch v tr li cho h iu hnh quay v thc hin tip lnh A trn. y thc s l mt trong nhng tr m cc nh vit Virus thc hin. Nu copy d kin ca lnh th ta bit c v tr ca lnh A s thc hin, ta c th: - X l song song vi lnh A, bng lnh A' m ta chun b. - Thay i li mt phn d kin ca lnh A hoc nhng lnh sau lnh A t mt no . Ni chung trong cc k thut lp trnh ngi ta nhiu cch chn li nh: Chn t ngn gc, chn d chng ch yu l lm sao thun li khi a ra kt qu lnh. Cc hm API thng s dng khi thc hin nhng chc nng ny thng cc hm c ch u l Get... nhn, hm Set... t, hm Copy... copy, hm Send... hay Post... a i. Bn hy c k cc v d ca cc bi vit nm c hn cng nh ca tc gi. Cc bin hay a ch ca cc nh.

H iu hnh chc chn phi ginh nhng chuyn khu ghi gi tr cc bin trong tnh ton m chng trnh c s dng. Mt ngn chng trnh c th ghi tn bin vo ngn dng 1. Khi lm vic vi bin, h iu hnh s c tn bin, tm n v tr lu tr xem ln ca ch ghi gi tr v ly gi tr. Xong vic n s thc hin tip lnh k. Mi bin l mt vng cc nh. Nhng gi tr cn lu trung gian c th c a ti v tr khc, hay thm ch tm ra a trong mt th mc ng vai tr temp no (Tu theo thit lp ca phn mm v h iu hnh). Trong cc chng trnh c lp m ta xy dng bao gi cng c phn lm 2 loi chnh khi lin kt ly d liu hoc gi cc hm v chng trnh ngoi lai (Hm v chng trnh khng phi do mnh thit k, hoc ca Visual Basic). Lin kt tnh l lin kt khi ta thit k chng trnh. Lin kt ng xy ra trong khi chng trnh chy. Lin kt tnh c u im l thc hin d, nhng nu mt hm no s dng lp li nhiu ln th khi thi hnh n s chim c b nh tng y ln, gy nn s hao ph k c ging nh ct tng y nht bn phi chun b tng y con dao(!!!). Cn lin kt ng thng qua cc b th vin lin kt l cc tp tin dng *.DLL (Dynamic link library - Thng c to ra bng ngn ng C) hoc tp dng *.VBX (To ra bng ngn ng Visual Basic) hoc tp chun h thng ca Windows dng *.EXE th tn dng c k c to nn s mm do. Ca s - Khi nim m m ca Windows API

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 lp BUTTON COMBOBOX EDIT LISTBOX SCROLLBAR STATIC MDICLIENT M t Dng cho cc nt lnh (Command button), nt chn (Option button), nt kim tra (Check box) Dng cho hp Combo box Dng cho cc Edit Control Dng cho cc List Box Dng cho cc thanh cun Dng cho cc ca s hin th vn bn Dng cho cc ca s giao din nhiu ti liu MDI

Xin quan st cc tnh cht ca mi lp:

Tnh cht Class Style (Kiu lp) Class Function

Cng dng Thit t cc thuc tnh mu ca mi loi ca s trong lp.

Cc hm mc nh ca lp. (Hm lp) Instance (Th hin) Icon (Biu tng) Cursor (Con tr) M t phin bn s hu lp. Thng l lp h thng hoc th vin. M t biu tng mc nhin trn Desktop khi ca s ca lp ny thu nh Minimize. M t con tr mc nhin khi chut c nh v trn ca s lp ny.

Background (Nn) Menu (Thc n)

M t mu nn mc nhin i vi cc ca s trong lp ny. 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. Option Explicit 'Khai bo Public Const LB_FINDSTRINGEXACT = &H1A2 Declare Function GetFocus Lib "user32" Alias "GetFocus" () As Long Declare Function SendMessage Lib "user32" Alias "SendMessageA" (ByVal hwnd As Long, ByVal wMsg As Long, ByVal wParam As Long, lParam As Any) As Long Sub cmdCancel_Click() End End Sub Sub CmdOK_Click() Dim hw%, chuoitrave& TxtPass.SetForcus hw=txtPass.hwnd chuoitrave&=SendMessage(hw%, LB_FINDSTRINGEXACT,0,0) 'Cc lnh x l chui tr v 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. 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: 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 tnh nIndex chn mt trong cc hng sau tu theo mc ch: Const GWL_HINSTANCE = (-6) - Handle ca minh ho lm ch Window Const GWL_EXSTYLE = (-20) - Kiu m rng ca Window Const GWL_STYLE = (-16) - Kiu Window Const GWL_ID = (-12) - ID ca mt Window con trong mt hp thoi Const GWL_USERDATA = (-21) - c nh ngha bi ng dng Const GWL_HWNDPARENT = (-8) - Cn ca Window cha. Const GWL_WNDPROC = (-4) - a ch ca th tc Window Const DWL_DLGPROC = 4 - a ch hm Dialog ca Window Const DWL_MSGRESULT = 0 - Gi tr tr v ca thng ip c x l trong hm Dialog Const 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, DiaChiCu Nhng 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.

X l ca API khi lm vic vi phn cng v h thng


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 2. - Vng tr chut nh v. 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 4. - Cu trc tip nhn to con tr trn mn hnh. 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). 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 6. Cn ca tr chut cn sao chp. 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 chut

LpCursorName - 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 ng IDC_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 tng IDC_SIZENESW - Tr l hnh mi tn 2 chiu cho gc xung dc IDC_SIZENS - Tr l hnh mi tn 2 chiu dc. IDC_SIZENWSE - Tr l hnh mi tn 2 chiu cho ln dc IDC_SIZEWE - Tr l hnh mi tn 2 chiu ngang

IDC_UPARROW - Tr l hnh mi tn ln IDC_WAIT - Tr l ng h ct IDC_ARROW: Tr hnh mi tn. IDC_CROSS: Tr hnh du thp. IDC_IBEAM: Tr hnh thanh ch I IDC_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 bo Tr 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 phm 2 - Tng ng 102 phm 3 - Tng ng 84 phm 4 - Tng ng 101 -102 phm (IBM) 5 - Tng ng Nokia 1050 6 - Tng ng Nokia 9140 7 - 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 lpBuffer Tham 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 NSize Chui c gn trc nhn tn phm. Nn c nSize + 1 bytes. 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 sau Gi tr ca VMapType 0 1

WCode l

M phm o M qut M phm o

M qut tng ng M phm o tng ng 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 uCode M 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 LoadKeyboardLayout Tr 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_LSHIFT VK_RSHIFT VK_LCONTROL VK_RCONTROL VK_LMENU VK_RMENU S 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 (lppbKeyState As Byte) As Long Lib "user32" Alias "SetKeyboardState"

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 buffer 2 - 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 Long 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 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 sau Bit 1 2 4 8 16 32 Ngha l Bt c SHIFT key b nhn Bt c CTRL key b nhn. Bt c ALT key b nhn. The Hankaku key b nhn Dnh ring (c nh ngha bi driver). Dnh 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 chut QS_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 thng Tr tr v: @ Tham s km: CompletionPort - Cn cng hon thnh. to mt cng hon thnh s dng hm CreateIoCompletionPort LpNumberOfBytesTransferred - 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 CreateIoCompletionPort LpOverlapped - 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.

You might also like