API C/C++

API Windows et API C/C Domino:
Le + puissant mais aussi le plus technique. Cela permet de faire énormément de choses...
Le but n'est pas d'utiliser uniquement les API windows ou API C/C++ Domino, mais de les utiliser au mieux.
- Création de menu popup
- Espace disponible sur le disque
Menu popup

Ce code permet de créer un menu popup sur un bouton (et sur tout code associable à du lotusscript).
- Le code doit s'exécuter uniquement sur Windows.
Pour cela, créer un bouton dans un masque, et copier-coller le code suivant:
Section (Declarations)
Type RECT
Left As Long
Top As Long
Right As Long
Bottom As Long
End Type
Type POINTAPI
x As Long
y As Long
End Type
Type MSG
hwnd As Long
message As Long
wParam As Long
lParam As Long
time As Long
pt As POINTAPI
End Type
Declare Function GetCursorPos Lib "user32" Alias "GetCursorPos" (lpPoint As POINTAPI) As Long
Declare Function CreatePopupMenu Lib "user32" Alias "CreatePopupMenu" () As Long
Declare Function AppendMenu Lib "user32" Alias "AppendMenuA" (Byval hMenu As Long, Byval wFlags As Long,
Byval wIDNewItem As Integer, Byval lpNewItem As Any) As Long
Declare Function TrackPopupMenu Lib "user32" Alias "TrackPopupMenu" (Byval hMenu As Long, Byval wFlags As Long,
Byval x As Long, Byval y As Long, Byval nReserved As Long, Byval hwnd As Long, lprc As Rect) As Long
Declare Function DestroyMenu Lib "user32" Alias "DestroyMenu" (Byval hMenu As Long) As Long
Declare Function GetMessage Lib "user32" Alias "GetMessageA" (lpMsg As MSG, Byval hwnd As Long,
Byval wMsgFilterMin As Long, Byval wMsgFilterMax As Long) As Long
Declare Function GetActiveWindow Lib "user32" Alias "GetActiveWindow" () As Long
Section Click
Sub Click(Source As Button)
Select Case PopMenu("Ligne 1;Ligne 2;Ligne 3",0,0)
Case 1
Msgbox( "Ligne 1")
Case 2
Msgbox( "Ligne 2")
Case 3
Msgbox( "Ligne 3")
End Select
End Sub
Ajout de la fonction suivante
Function PopMenu (pstrItem As String, mx As Long, my As Long) As Long
Const MF_ENABLED = &H0
Const TPM_LEFTALIGN = &H0
Const MF_SEPARATOR = &H800
Const SEP = ";"
Dim msgdata As MSG
Dim rectdata As RECT
Dim Cursor As POINTAPI
Redim strItem(1 To 20) As String
Dim i As Long
Dim j As Long
Dim last As Long
Dim hMenu As Long
Dim id As Integer
Dim junk As Long
If Right$(pstrItem, 1) <> SEP Then pstrItem = pstrItem + SEP
j = 1
Do
i = Instr(j, pstrItem, SEP)
If i Then
last = last + 1
strItem(last) = Mid$(pstrItem, j, i - j)
j = i + 1
End If
Loop Until i = 0
hMenu = CreatePopupMenu()
id = 1
For i = 1 To last
If strItem(i) <> "-" Then
junk = AppendMenu(hMenu, MF_ENABLED, id, strItem(i))
id = id + 1
Else
junk = AppendMenu(hMenu, MF_SEPARATOR, 0, "")
End If
Next
If mx = 0 And my = 0 Then
Call GetCursorPos(Cursor)
mx = Cursor.x
my = Cursor.y
End If
junk = TrackPopupMenu(hMenu, TPM_LEFTALIGN, mx, my, 0, GetActiveWindow(), rectdata)
junk = GetMessage(msgdata, GetActiveWindow(), 0, 0)
i = Abs(msgdata.wparam)
If msgdata.message = 273 Then
PopMenu = i
End If
Call DestroyMenu(hMenu)
End Function
Espace disque disponible
Ce code permet de savoir l'espace disque disponible sur un micro-utilisateur ou sur un serveur domino.
Declare Function GetDiskFreeSpace Lib "Kernel32" Alias _
"GetDiskFreeSpaceA" (Byval lpRootPathName As String, _
lpSectorsPerCluster As Long, lpBytesPerSector As Long, _
lpNumberOfFreeClusters As Long, lpTtoalNumberOfClusters _
As Long) As Long
Sub Initialize
Dim drv As String
Dim ret As Long
Dim sectors As Long
Dim bytes As Long
Dim free As Long
Dim total As Long
Dim lAff As Long
drv = "C:\" 'Disque à inspecter
ret = GetDiskFreeSpace(drv, sectors, bytes, free, total)
lAff = (sectors * bytes * (free/1000) ) / 1000
Messagebox Cstr(lAff) & " Mo disponibles sur le disque " & drv
lAff = (sectors * bytes * (total/1000) ) / 1000
Messagebox Cstr(lAff) & " Mo total sur le disque " & drv
lAff = (sectors * bytes * ((total - free)/1000) ) / 1000
Messagebox Cstr(lAff) & " Mo utilisés sur le disque " & drv
End Sub