Stò cominciando a studiare la programmazione con le API di Windows, e la mia domanda non riguarda una API in particolare ma è un pò più generica, vorrei sapere: dato che di solito le API sono una structure che immagazina variabili di formati molto diversi tra di loro, ma l'API stessa viene trattata a sua volta come una variabile lei stessa.
Le api sono funzioni del sistema operativo! quindi ad esempio l'api GetPixel sarà una funzione della libreria gdi32.
Detto questo la domanda è: esiste una funzione che in qualche modo mi permetta di accedere ad uno solo dei parametri della API dichiarata? Ad esempio usando questa API: WM_DEVICECHANGE, per accedere solo al wParam che è uno dei parametri, come faccio? In questo caso particolare tale parametro non è altro che un numero esadecimale, ma come lo estraggo?
Luso della windows procedure in vb6 sarà l'apice dello studio delle api e non l'inizio!Quindi ti consiglio di iniziare da qualcosa di piu semplice
Inoltre, la seconda domanda: come vedete molti dei parametri o variabili usati dalle API sono formati mai visti: HWND, UINT, WPARAM, LPARAM.... come faccio a convertirli in un comune formato interpretabile dal Visual Basic tipo Int o Double? Ho l'impressione che questi ultimi formati siano a loro volta precedentemente definiti da altri API e siano anche questi ultimi delle struct, e quindi la domanda si ripete medesima: Dove scopro quale struct definisce il mio tipo wParam e come faccio a "derubricare" tale struct usando una sola delle sue variabili?
Dato che sei agli inizi ti conviene usare l'utilissimo ApiTextViewer che è nella cartella:visualstudio6/visualstudio6tool/
Li trovi già tutte le dichiarazioni delle funzioni api,le strutture e le costanti.
HWND e compagnia bella sono tipi definiti in c/c++ per farti comprendere:
LINGUAGGIO C:
typedef int HWND;
in questo modo tutte le variabili dichiarate HWND sono delle variabili int,quindi puoi semplicemente mettere long come tipo di parametro.
La traduzione delle api dal c a vb è una cosa complessa quindi continuo a consigliarti di usare ApiTextViewer!
Inoltre se una API restituisce un puntatore ad una struttura, per accedere ai dati di tale struttura devo trattare il puntatore come un comune riferimento e accedo ai miei dati con:
In vb non si possono usare i puntatori,anche se ho scritto un articolo per usarli nella sezione
tips sarebbe buona norma non usarli!
Le api non restituiscono mai un puntatore ma sempre un codice di successo o meno o un valore long,ma invece gli verrà passato la struttura per riferimento e i dati saranno salvati li:
Public Type POINTAPI
x As Long
y As Long
End Type
Public Declare Function GetCursorPos Lib "user32" Alias "GetCursorPos" (lpPoint As POINTAPI) As Long
...
...
...
dim cp as POINTAPI
GetCursorPos cp
msgbox "mouse pos x=" & cp.x & " y=" & cp.y
Per ulteriori chiarimenti sono qui