http://alpha-thema-online.uv.ro
Fa-ti si tu propriul forum, pe www.myforum.ro!
Pagina de start a forumului http://alpha-thema-online.uv.ro Autentificare Inregistrare FAQ Membri Cautare

Pagina de start a forumului http://alpha-thema-online.uv.ro » Visual Studio » Introducere in Win32 API cu VB
Creaza un subiect nou  Raspunde la subiect Subiectul anterior :: Subiectul urmator 
Introducere in Win32 API cu VB
MesajTrimis: 19/07/2007 17:22 Raspunde cu citat (quote)
Ad_Infinitum
Administrator
Administrator
Ad_Infinitum
Data inscrierii: 23/Iun/2007
Mesaje: 212




Windows (Win32) API este o cumplit de mare colectie de functii disponibile in librariile Windows-ului, pe care le puteti folosi direct in VB. Numarul lor este extrem de mare, de ordinul miilor, si fiecare din aceaste functii sint bune la ceva.

Acesta este doar un compact articol introductiv care va arata cum puteti folosi aceste functii Win API direct in VB.

Instructiunea de care aveti nevoie este Declare:

[Public | Private] Declare Function name Lib "libname" [Alias "aliasname"] [([arglist])] [As type]

De regula folositi cu Public in module *.bas si Private in forme. Unde libname este numele dll-ului, arlist e lista parametrilor in echivalentul lor VB, type este valoarea returnata, cind e cazul (poate lipsi), iar Alias este numele original al functiei.

Pentru usurarea declaratiilor functiilor API siin plus a constantelor si altor modele de date o sa folositi modest add-in-ul din Visual Studio din meniul Add-Ins -> Add-In Manager ... -> VB 6 API Viewer. Dupa incarcare ii dati drumul din maniul Add-Ins. Trebuie incarcat fisierul cu declaratii (din folderul VB-ului in Program Files). Datile urmatoare calea catre fisier o sa fie acolo, in File. Dupa incarcare puteti alege intre functii, constante si feluri de date, cautati functia o copiati in clipboard si apoi paste in cod cu ctrl-V. Sau direct o inserati in cod.

O sa dau aici un mic exemplu de exploatat API Windows cu functia Sleep. Aceasta este in kernell32.dll (functie system de baza). Va dati seama ca la apelul ei programul asteapta un nr. specificat de milisecunde.

Codul este urmatorul (pus intr-o forma):

Cod:
Private Declare Sub Sleep Lib "kernel32" (ByVal dwMilliseconds As Long)

Private Sub Form_Load()
Dim i As Long
For i = 1 To 10
Debug.Print "i=" & i & "; time= " & Time
Next
For i = 1 To 10
Sleep 1000
Debug.Print "i=" & i & "; time= " & Time
Next
End Sub


Dupa executie apasati CTRL-G sa vedeti fereastra de debug unde o sa vedeti practic acelasi timp pt. primele 10 valori si incrementat la fiecare 1 sec (=1000 ms) pt. urmatoarele 10 valori.

Problema cu aceste functii API este ca VB-ul are alte tipuri de date decit cele din C++ in care au fost scrise functiile. Diferentele cele mai mari constau in lipsa pointerilor si alt fel de stringuri. Aici intervin improvizatiile, care insa se pot rezolva de regula.

Sa dau un exemplu de lucru cu stringuri. Problema e sa se afiseze nume computerului pe care lucrati, folosind functia API GetComputerName()

Cod:
Private Declare Function GetComputerName Lib "kernel32" Alias "GetComputerNameA" _
(ByVal sBuffer As String, lSize As Long) As Long

Private Sub Form_Load()
Dim strString As String
strString = String(255, Chr$(0))
GetComputerName strString, 255
strString = Left$(strString, InStr(1, strString, Chr$(0)) - 1)
MsgBox strString
End Sub



Dupa cum vedeti trebuie creat un buffer initializat cu Chr(0) unde o sa primiti rezultatul functiei. Treaba e ca se pot folosi doar stringuri de mărime fixa (255 caractere aici), nu sint stringuri naturale VB (care pot avea orice lungime). Eventual le puteti declara cu String * 255 (pt. acest caz).
Dupa apelul functiei trebuie extras stringul pina la întâiul Chr(0), pt. ca stringul VB nu este la fel cu cel C++.

Cam asta e pe scurt cu aceasta introducere. Vor mai urma si alte articole in care sa ne propunem sa realizam lucruri mai complicate folosind API Windows, unele din aceste lcururi neputind fi realizate altfel in VB decit cu API.
Vezi profilul utilizatorului Trimite mesaj privat

Introducere in Win32 API cu VB
 Pagina de start a forumului http://alpha-thema-online.uv.ro » Visual Studio
Nu puteti crea un subiect nou in acest forum
Nu puteti raspunde in subiectele acestui forum
Nu puteti modifica mesajele proprii din acest forum
Nu puteti sterge mesajele proprii din acest forum
Nu puteti vota in chestionarele din acest forum
Ora este GMT + 3 ore  
Pagina 1 din 1  

  
  
 Creaza un subiect nou  Raspunde la subiect  


Fa-ti si tu propriul forum GRATUIT, pe www.myforum.ro
    Powered by phpBB © 2001-2004 phpBB Group. phpBB Skin by Vjacheslav Trushkin.