lotus domino c developpement web

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