Attic, box 4

Sorry, this entry is only available in French. For the sake of viewer convenience, the content is shown below in the alternative language. You may click the link to switch the active language.

Les articles ci-dessous ont été récupérés d’un site “WinDev API” (windevapi.free.fr) qui a disparu d’internet, et il y a du stock (plus de 3000 lignes de programmation) ! 

L’essentiel du code fait appel aux API Windows (de là le nom du site 😉 ) et a été développé à l’époque de Windows 95/98/XP.

Pour plus de détail sur les fonctions appelées, voir MSDN.

Merci à JL de nous avoir partagé son code via son site toutes ces années !

Composants et classes

Classe ToolTip
Une classe pour personnaliser vos Bulles d’Aide. Fichier d’aide inclus.
Modifications par rapport à la version 1.10 :

– L’affichage de la ligne d’une table ne tient plus compte des colonnes invisibles
– Ajout de la méthode TxEuro permettant de préciser le taux de change et la devise à afficher

Historique :
Version 1.10 – 22/12/2001 – Modifications par rapport à la version 1.01 :

Ajout d’une méthode pour la gestion du survol des tables. Vous pouvez afficher dans la bulle l’une des options suivantes :
– le texte de la cellule survolée
– le texte de la ligne survolée
– la valeur en euro d’un montant en franc
– la valeur en franc d’un montant en euro

La taille maxi du texte des bulles est passée de 1024 à 4096 caractères.

Développée et testée avec Windev 5.5 sous W98SE/NT4SP5/XP Pro.

Les bulles windev doivent être désactivées.
Info : La propriété ‘Visible dans bulle d’aide’ des champs monétaires windev + euro ne doit pas être activée sinon plantage de la fenêtre. Merci à Jean-Marc et Benoît.

Téléchargez la classe ici.

Composant API
Un composant à intégrer dans vos projets windev 7x

Ce composant comprend 2 fenêtres calendrier ainsi que plusieurs fonctions :
– Carte_Reseau_Info
– Disque_Numero_Serie
– Ping
– NomMachine_Ip
– Rep_Copie
– Rep_Supprime
– ExitWindow
– Erreur_Message
– Espace_Bureau_Change
– Espace_Bureau_Get
– Bureau_Active
– Icone_Fonte_Change
– Menu_Delay_Change
– Image_Bureau_Change
– Keyboard_Delay_Change
– Mouse_Speed_Change
– Veille_TimeOut_Change
– Etc…
Voir la description du composant pour avoir la liste complète des fonctions.

Développé et testé avec Windev 7.5 (75203m) sous XP Pro.

Téléchargez le composant ici.

Classe GdiPlus
Une classe Wd7.5 pour Charger, Sauvegarder, Redimensionner et effectuer des rotations sur des images au format jpg,bmp,gif,tiff,png. Voir le lisezmoi.txt

Téléchargez la classe ici.

Composant MD5
Composant Windev 7.5 (205s) permettant d’obtenir la signature, selon l’algorithme MD5, d’une chaine et/ou d’un fichier.
Le fichier “MD5.dll” doit se trouver dans le répertoire d’éxécution du projet.
Tout commentaire sera le bienvenu.
Le fichier “Signature MD5.zip” contient .WDI,.WDK,.WDO et MD5.dll
2 fonctions:
– SignatureChaine(ch)
– SignatureFichier(CheminFichier)
Voir documentation du composant pour les particularités.

Téléchargez le composant ici.

Windows

Écran de veille : désactiver

appeldll32("user32","SystemParametersInfoA",SPI_SETSCREENSAVEACTIVE,faux,0,0)

Écran de veille : activer

appeldll32("user32","SystemParametersInfoA",SPI_SETSCREENSAVEACTIVE,vrai,0,0)

Écran de veille : obtenir le délai

SPI_GETSCREENSAVETIMEOUT est un entier = 14
timeout est un entier 
appeldll32("user32","SystemParametersInfoA",SPI_GETSCREENSAVETIMEOUT,0,&timeout,0) 
info("Le délai de l'écran de veille est fixé à "+timeout+" secondes")

Écran de veille : modifier le délai

SPI_SETSCREENSAVETIMEOUT est un entier = 15 
timeout est un entier 
timeout=600    // nouveau délai 10 minutes 
appeldll32("user32","SystemParametersInfoA",SPI_SETSCREENSAVETIMEOUT,timeout,0,0)

Écran de veille : Savoir si il y en a un de configuré

SPI_GETSCREENSAVEACTIVE est un entier = 16 
SPI_SETSCREENSAVEACTIVE est un entier = 17 
screensave est un booleen 
 
appeldll32("user32","SystemParametersInfoA",SPI_GETSCREENSAVEACTIVE,0,&screensave,0) 
si screensave alors info("Un écran de veille est configuré")

Panneau de configuration : panneau d'affichage

appeldll32("kernel32.dll","WinExec","control.exe desk.cpl",5)

Panneau de configuration : clavier

appeldll32("kernel32.dll","WinExec","control.exe main.cpl clavier",5)

Panneau de configuration : paramètres régionaux

appeldll32("kernel32.dll","WinExec","control.exe intl.cpl",5)

Panneau de configuration : souris

appeldll32("kernel32.dll","WinExec","control.exe main.cpl",5)

Vider la poubelle

SHERB_NOCONFIRMATION est un entier long = 0x00000001 
SHERB_NOPROGRESSUI est un entier long = 0x00000002 
SHERB_NOSOUND est un entier long = 0x00000004 
 
// 0 pour la confirmation 
 
appeldll32( "shell32.dll" , "SHEmptyRecycleBinA" , handle() , null , 0 )

Récupérer l'état de la mémoire vive

mem est compose de 
    dwLength est un entier long 
    dwMemoryLoad est un entier long 
    dwTotalPhys est un entier long 
    dwAvailPhys est un entier long 
    dwTotalPageFile est un entier long 
    dwAvailPageFile est un entier long 
    dwTotalVirtual est un entier long 
    dwAvailVirtual est un entier long 
fin 
mem.dwLength=dimension(mem) 
 
appeldll32("kernel32" , "GlobalMemoryStatus" , &mem) 
 
info("% utilisé "+mem.dwMemoryLoad, "Mém. Totale "+mem.dwTotalPhys/1024, "Mém. Dispo. "+mem.dwAvailPhys/1024)

Récupérer la liste des variables d'environnement

str1 est une chaîne ASCIIZ de 1024 
res est un entier = API("kernel32","GetEnvironmentStrings") 
SI res ALORS 
  mem est un entier = res 
  BOUCLE 
    API("kernel32","RtlZeroMemory",&str1,1024) 
    len est un entier = API("kernel32","lstrlen",mem) 
    SI len=0 ALORS SORTIR 
      API("kernel32","RtlMoveMemory",&str1,mem,len) 
      mem += len+1 
      Trace(str1) 
  FIN 
  API("kernel32","FreeEnvironmentStringsA",res) 
FIN

Récupérer l'heure de lancement de windows

info( heureverschaine ( entierversheure ( AppelDLL32("kernel32" , "GetTickCount" )/10 )))

Récupérer la résolution vidéo

SM_CXSCREEN est un entier = 0 
SM_CYSCREEN est un entier = 1 
 
larg est un entier = AppelDLL32("user32","GetSystemMetrics" , 0) 
haut est un entier = AppelDLL32("user32","GetSystemMetrics" , 1) 
 
info("La résolution vidéo est de "+larg+" par "+haut)

Changer la résolution écran (de fabian)

// a ajouter dans le code du projet 
 
DEVMODEA est une classe 
dmDeviceName est une chaîne fixe sur 32 //Type C : BYTE 
dmSpecVersion est un entier sur 2 octets //Type C : WORD 
dmDriverVersion est un entier sur 2 octets //Type C : WORD 
dmSize est un entier sur 2 octets //Type C : WORD 
dmDriverExtra est un entier sur 2 octets //Type C : WORD 
dmFields est un entier //Type C : DWORD 
dmOrientation est un entier sur 2 octets //Type C : short 
dmPaperSize est un entier sur 2 octets //Type C : short 
dmPaperLength est un entier sur 2 octets //Type C : short 
dmPaperWidth est un entier sur 2 octets //Type C : short 
dmScale est un entier sur 2 octets //Type C : short 
dmCopies est un entier sur 2 octets //Type C : short 
dmDefaultSource est un entier sur 2 octets //Type C : short 
dmPrintQuality est un entier sur 2 octets //Type C : short 
dmColor est un entier sur 2 octets //Type C : short 
dmDuplex est un entier sur 2 octets //Type C : short 
dmYResolution est un entier sur 2 octets //Type C : short 
dmTTOption est un entier sur 2 octets //Type C : short 
dmCollate est un entier sur 2 octets //Type C : short 
dmFormName est une chaîne fixe sur 32 //Type C : BYTE 
dmLogPixels est un entier sur 2 octets //Type C : WORD 
dmBitsPerPel est un entier //Type C : DWORD 
dmPelsWidth est un entier //Type C : DWORD 
dmPelsHeight est un entier //Type C : DWORD 
dmDisplayFlags est un entier //Type C : DWORD 
dmDisplayFrequency est un entier //Type C : DWORD 
dmICMMethod est un entier //Type C : DWORD 
dmICMIntent est un entier //Type C : DWORD 
dmMediaType est un entier //Type C : DWORD 
dmDitherType est un entier //Type C : DWORD 
dmICCManufacturer est un entier //Type C : DWORD 
dmICCModel est un entier //Type C : DWORD 
dmPanningWidth est un entier //Type C : DWORD 
dmPanningHeight est un entier //Type C : DWORD	
FIN 
 
CONSTANTE DM_BITSPERPEL=262144 
CONSTANTE DM_PELSWIDTH=524288 
CONSTANTE DM_PELSHEIGHT=1048576 
CONSTANTE DM_DISPLAYFREQUENCY=4194304 
 
CONSTANTE CDS_TEST=2 
CONSTANTE CDS_UPDATEREGISTRY=1 
CONSTANTE CDS_TEMP=0 
 
// a mettre dans le code de la fenetre  pour avoir une résolution de : 1024*768 en 32 bits 60 Hertz : 
 
dmtemp est DEVMODEA 
dmtemp:dmBitsPerPel=_coul     // en general 32 bits 
dmtemp:dmPelsHeight=_y        // en general 768 
dmtemp:dmPelsWidth=_x         // en general 1024 
dmtemp:dmDisplayFrequency=_freq    // en general 60 hertz 
dmtemp:dmFields=OUBinaire(dmtemp:dmFields,::DM_BITSPERPEL) 
dmtemp:dmFields=OUBinaire(dmtemp:dmFields,::DM_PELSWIDTH) 
dmtemp:dmFields=OUBinaire(dmtemp:dmFields,::DM_PELSHEIGHT) 
dmtemp:dmFields=OUBinaire(dmtemp:dmFields,::DM_DISPLAYFREQUENCY) 
dmtemp:dmSize=Dimension(dmtemp) 
SI API("user32","ChangeDisplaySettingsA",&dmtemp, ::CDS_TEMP)<>0 ALORS	
   Erreur(ErreurInfo())	   
FIN

Lancer un programme

//Ex:la calculatrice 
 
SW_SHOWNORMAL est un entier long = 1 
hWnd est un entier long 
 
// vérification si elle est déjà lancée 
hWnd = appeldll32("user32","FindWindowA","SciCalc", NULL) 
si hWnd alors 
    appeldll32("user32","ShowWindow",hWnd,SW_SHOWNORMAL) 
    appeldll32("user32","SetForegroundWindow",hWnd)
sinon 
  appeldll32("shell32.dll","ShellExecuteA",NULL,NULL,"Calc.exe",NULL,NULL,SW_SHOWNORMAL) 
fin 
 
// explorateur windows 
SW_SHOWNORMAL est un entier long = 1 
hWnd est un entier long 
 
// vérification si il est déjà lancé 
hWnd = appeldll32("user32","FindWindowA","ExploreWClass", NULL) 
si hWnd alors 
    appeldll32("user32","ShowWindow",hWnd,SW_SHOWNORMAL) 
    appeldll32("user32","SetForegroundWindow",hWnd) 
sinon 
    appeldll32("shell32.dll","ShellExecuteA",NULL,NULL,"Explorer.exe",NULL,NULL,SW_SHOWNORMAL) 
fin 
 
// Lancer un programme et attendre la fin de son execution 
 
STARTF_USESHOWWINDOW est un entier long = 0x1 
STARTF_USESIZE est un entier long = 0x2 
STARTF_USEPOSITION est un entier long = 0x4 
STARTF_USECOUNTCHARS est un entier long = 0x8 
STARTF_USEFILLATTRIBUTE est un entier long = 0x10 
STARTF_RUNFULLSCREEN  est un entier long = 0x20 //  ignored for non-x86 platforms 
STARTF_FORCEONFEEDBACK est un entier long = 0x40 
STARTF_FORCEOFFFEEDBACK est un entier long = 0x80 
STARTF_USESTDHANDLES est un entier long = 0x100 
NORMAL_PRIORITY_CLASS est un entier long = 0x20 
IDLE_PRIORITY_CLASS est un entier long = 0x40 
HIGH_PRIORITY_CLASS est un entier long = 0x80 
REALTIME_PRIORITY_CLASS est un entier long = 0x100 
 
STARTUPINFO est une structure 
    cb est un entier long 
    lpReserved est un entier long 
    lpDesktop est un entier long 
    lpTitle est un entier long 
    dwX est un entier long 
    dwY est un entier long 
    dwXSize est un entier long 
    dwYSize est un entier long 
    dwXCountChars est un entier long 
    dwYCountChars est un entier long 
    dwFillAttribute est un entier long 
    dwFlags est un entier long 
    wShowWindow est un entier 
    cbReserved2 est un entier 
    lpReserved2 est un entier long 
    hStdInput est un entier long 
    hStdOutput est un entier long 
    hStdError est un entier long 
fin 
 
PROCESS_INFORMATION est une structure 
    hProcess est un entier long 
    hThread est un entier long 
    dwProcessId est un entier long 
    dwThreadId est un entier long 
fin 
 
sinf est un startupinfo 
proinf est un process_information 
 
sinf:cb=dimension(sinf) 
sinf:lpReserved=null 
sinf:lpDesktop=null 
sinf:lpTitle=null 
sinf:dwX=100 // colonne 100 
sinf:dwY=100 // ligne 100 
sinf:dwXsize=600 // largeur 
sinf:dwYSize=500 // hauteur 
sinf:wShowWindow=1 
sinf:cbReserved2=0 
sinf:lpReserved2=null 
sinf:dwFlags = STARTF_USEPOSITION + STARTF_USESIZE 
 
INFINITE est un entier long = 0xFFFF      // Infinite timeout 
lpApplicationName est une chaine asciiz de 128 
lpApplicationName="c:\windows\notepad.exe" 
 
si appeldll32("kernel32","CreateProcessA",null,&lpApplicationName,null,null,vrai,NORMAL_PRIORITY_CLASS,null,null,&sinf,&proinf) alors 
    appeldll32("Kernel32","WaitForSingleObject",proinf:hProcess,infinite) 
    appeldll32("kernel32","CloseHandle",proinf:hProcess) 
    appeldll32("kernel32","CloseHandle",proinf:hThread) 
FIN

Récupérer la version de Windows

Osv est compose de 
    dwOSVersionInfoSize est un entier long 
    dwMajorVersion est un entier long 
    dwMinorVersion est un entier long 
    dwBuildNumber est un entier long 
    dwPlatformId est un entier long 
    szCSDVersion est une chaine asciiz de 128 
fin 
Osv.dwOSVersionInfoSize=dimension(osv) 
 
wversion est une chaine 
 
AppelDLL32("kernel32" , "GetVersionExA" , &Osv) 
selon Osv.dwPlatformId 
    cas 0 : wversion="Windows 3.1" 
    cas 1 :   
        si Osv.dwMinorVersion alors 
            wversion="Windows 98" 
        sinon 
            wversion="Windows 95" 
        fin 
    cas 2 : 
        si osv.dwMajorVersion=3 alors 
            wversion="Windows NT 3.5" 
        fin 
        si osv.dwMajorVersion=4 alors 
            wversion="Windows NT 4" 
        fin 
        si osv.dwMajorVersion=5 alors 
            wversion="Windows 2000/XP" 
        fin 
fin

Récupérer les process en cours et la mémoire utilisée

PROCESS_TERMINATE est un entier = 0x0001   
PROCESS_CREATE_THREAD est un entier = 0x0002   
PROCESS_SET_SESSIONID est un entier = 0x0004   
PROCESS_VM_OPERATION est un entier = 0x0008   
PROCESS_VM_READ est un entier = 0x0010   
PROCESS_VM_WRITE est un entier = 0x0020   
PROCESS_DUP_HANDLE est un entier = 0x0040   
PROCESS_CREATE_PROCESS est un entier = 0x0080   
PROCESS_SET_QUOTA est un entier = 0x0100   
PROCESS_SET_INFORMATION est un entier = 0x0200   
PROCESS_QUERY_INFORMATION est un entier = 0x0400   
PROCESS_SUSPEND_RESUME est un entier = 0x0800 
 
hwndprocess est un entier 
nomprocess est une chaîne ASCIIZ de 1024 
nbprocess est un entier 
ind est un entier 
 
lpidProcess est un tableau  de 100 entiers 
cb est un entier = Dimension(lpidProcess) * 4 
cbNeeded est un entier 
 
PROCESS_MEMORY_COUNTERS est une structure 
  cb est un entier 
  PageFaultCount est un entier 
  PeakWorkingSetSize est un entier 
  WorkingSetSize est un entier   
  QuotaPeakPagedPoolUsage est un entier   
  QuotaPagedPoolUsage est un entier   
  QuotaPeakNonPagedPoolUsage est un entier   
  QuotaNonPagedPoolUsage est un entier   
  PagefileUsage est un entier   
  PeakPagefileUsage est un entier 
FIN 
 
p_m est un PROCESS_MEMORY_COUNTERS 
 
p_m:cb = Dimension(p_m) 
 
 
// énumération des différents process 
API ( "Psapi" , "EnumProcesses" , &lpidProcess , cb , &cbNeeded ) 
 
// nombre de process trouvés 
nbprocess  = cbNeeded / 4 
 
POUR ind = 1 A nbprocess 
 
  // accès au process 
  hwndprocess = API ( "kernel32" , "OpenProcess" , PROCESS_QUERY_INFORMATION , Faux , lpidProcess[ind] ) 
  SI hwndprocess ALORS 
 
    // on rempli la structure pour le process 
    API ( "Psapi" , "GetProcessMemoryInfo" , hwndprocess , &p_m , Dimension(p_m) ) 
 
    // on cherche le nom du process 
    API ( "Psapi" , "GetProcessImageFileNameA", hwndprocess , &nomprocess , 1024 ) 
 
    // on ferme l'accès au process 
    API ( "kernel32" , "CloseHandle" , hwndprocess ) 
 
    // on extrait le nom de la chaine retournée	
    nomprocess = ExtraitChaîne ( nomprocess , 1 , "\" , DepuisFin ) 
 
    // ajout dans la table mémoire 
    TableAjoute ( Table1 , nomprocess + TAB + p_m:WorkingSetSize/1024 ) 
 
  SINON 
 
    TableAjoute(Table1, erreurmessage() ) 
 
  FIN // si hwndprocess 
 
FIN // boucle ind = 1 a nbprocess

Pour récupérer seulement le process en cours, utilisez juste : hwndprocess = API ( “kernel32” , “GetCurrentProcess” ) et le code suivant le “si hwndprocess alors”

PROCEDURE erreurmessage() 
 
FORMAT_MESSAGE_IGNORE_INSERTS  est un entier = 0x00000200 
FORMAT_MESSAGE_FROM_SYSTEM     est un entier = 0x00001000 
 
message_erreur est une chaîne ASCIIZ sur 512 
 
API( "kernel32" , "FormatMessageA" , FORMAT_MESSAGE_FROM_SYSTEM + FORMAT_MESSAGE_IGNORE_INSERTS , ... 
Null , API( "kernel32" , "GetLastError" ) , 0 , &message_erreur , 512 , Null ) 
 
RENVOYER message_erreur

Documents Récents : ajouter

file est une chaine asciiz de 128 = "C:ClientsLettresReld501.txt" 
si pas appeldll32( "shell32.dll" , "SHAddToRecentDocs" , 2 , &file ) alors 
    erreur("Impossible de rajouter ce document.") 
fin

Documents Récents : supprimer la liste

appeldll32( "shell32.dll" , "SHAddToRecentDocs" , 2 , null )

Désactiver le 'Ctrl-Alt-Del' et le 'Alt-Tab'

appeldll32 ( "user32" , "SystemParametersInfoA" , 97 , 1 , 0 , 0 )
// 0 à la place de 1 pour réactiver les touches.

Code page en cours

oemcodepage est un entier sans signe = API("kernel32","GetOEMCP")

les différents résultats possibles :

437 MS-DOS United States
708 Arabic (ASMO 708)
709 Arabic (ASMO 449+, BCON V4)
710 Arabic (Transparent Arabic)
720 Arabic (Transparent ASMO)
737 Greek (formerly 437G)
775 Baltic
850 MS-DOS Multilingual (Latin I)
852 MS-DOS Slavic (Latin II)
855 IBM Cyrillic (primarily Russian)
857 IBM Turkish
860 MS-DOS Portuguese
861 MS-DOS Icelandic
862 Hebrew
863 MS-DOS Canadian-French
864 Arabic
865 MS-DOS Nordic
866 MS-DOS Russian
869 IBM Modern Greek
874 Thai
932 Japan
936 Chinese (PRC, Singapore)
949 Korean
950 Chinese (Taiwan; Hong Kong SAR, PRC)
1361 Korean (Johab)

Arrêter Windows

appeldll32("user32","ExitWindowsEx",1,0)

Redémarrer Windows

appeldll32("user32","ExitWindowsEx",2,0)

Déconnecter l'utilisateur (avec confirmation)

SendMessage( appeldll32("user32","FindWindowA", "Shell_TrayWnd" , NULL) , 0x111 , 402 , 0)

Afficher la boite d'arrêt de windows

SendMessage( appeldll32("user32","FindWindowA", "Shell_TrayWnd" , NULL) , 0x111 , 506 , 0)

Mettre en veille

SendMessage( appeldll32("user32","FindWindowA", "Shell_TrayWnd" , NULL) , 0x111 , 409 , 0)

Numéro de série Windows
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion
et ProductId
Vitesse du cpu (NT/2000/XP)
HKEY_LOCAL_MACHINE\Hardware\Description\System\CentralProcessor
Faire une copie d'écran

hwnd est un entier long=handle("im1") 
hdcScreen est un entier long = appeldll32("gdi32","CreateDCA" , "DISPLAY" , NULL , NULL , NULL) 
 
// résolution de l'écran 
HORZRES est un entier long=appeldll32("gdi32","GetDeviceCaps" , hdcScreen , 8) 
VERTRES est un entier long=appeldll32("gdi32","GetDeviceCaps" , hdcScreen , 10) 
 
// on donne au champ image im1 les mêmes dimensions que l'écran 
im1..ligne=0 
im1..colonne=0 
im1..largeur=horzres 
im1..hauteur=vertres 
 
dcim1 est un entier long=ddebutdessin("im1") 
appeldll32("gdi32","BitBlt", dcim1 , 0 , 0 , im1..largeur , im1..hauteur , hdcScreen , 0 , 0 , 0x00CC0020) 
 
dsauveimage("im1","copieecr.bmp") // sauvegarde de l'image sur le disque   
appeldll32("gdi32","DeleteDC",hdcScreen) 
dfindessin()

Pour faire une copie d’une fenêtre (ou d’un champ) , même principe que pour la totalité :

hwnd est un entier long=handle("im1") // handle du champ image 
hwndfen est un entier long=handle() // handle de la fenêtre ou du champ à copier 
 
hdcScreen est un entier long = appeldll32("user32","GetWindowDC" , hwndfen) 
 
rect est compose de 
    l est un entier long 
    t est un entier long 
    r est un entier long 
    b est un entier long 
fin 
appeldll32("user32","GetWindowRect" , hwndfen , &rect) 
 
HORZRES est un entier long = rect.r - rect.l 
VERTRES est un entier long = rect.b - rect.t 
im1..ligne=0 
im1..colonne=0 
im1..largeur=horzres 
im1..hauteur=vertres 
 
dcim1 est un entier long=ddebutdessin("im1") 
 
appeldll32("gdi32","BitBlt" , dcim1 , 0 , 0 , im1..largeur , im1..hauteur , hdcScreen , 0 , 0 , 0x00CC0020) 
dsauveimage("im1","copieecr.bmp") 
appeldll32("user32","ReleaseDC",hwndfen,hdcScreen) 
dfindessin()

Variables d'environnements : lire

variable est une chaine asciiz de 64="Poste" // ou "path" pour les chemins 
valeurv est une chaine asciiz de 256 
 
nbcarac est un entier long=appeldll32("kernel32","GetEnvironmentVariableA",&variable,&valeurv,256) 
si nbcarac<1 alors 
    info("erreur") 
sinon 
    info(valeurv)
fin

Variables d'environnements : modifier

// Modifier les variables d'environnements 
 
variable est une chaine asciiz de 32="Poste" 
valeurv est une chaine asciiz de 128="JL" 
 
si pas appeldll32("kernel32","SetEnvironmentVariableA",&variable,&valeurv) alors 
    info("erreur") 
FIN

Récupérer la Liste des logiciels installés
HKEY_LOCAL_MACHINE\Software\Microsoft\Windows\CurrentVersion\Uninstall
Désactiver le programme dans la liste des programmes actifs
L’executable de cette application ne soit pas dans la liste des programme actif qui s’affiche en appuyant sur ctrl+alt+suppr pour que l’utilisateur ne la désactive pas

API("kernel32","RegisterServiceProcess",Null,1)

Récupérer le nom de l'ordinateur

lpbuffer est une chaine asciiz de 32 
size est un entier=31 
si AppelDLL32("kernel32","GetComputerNameA" , &lpBuffer,&size) alors 
    info("Nom de l'ordinateur : "+lpbuffer) 
fin

Modifier le nom de l'ordinateur

lpbuffer est une chaine asciiz de 32="Nouveau_Nom" 
si appeldll32("kernel32","SetComputerNameA", &lpbuffer) 
    info("Changement effectué, vous devez redémarrer l'ordinateur.") 
fin

Récupérer le nom de l'utilisateur

lpbuffer est une chaine asciiz de 256 
size est un entier=255 
si AppelDLL32("advapi32.dll","GetUserNameA" , &lpBuffer, &Size) alors 
    info("L'utilisateur en cours est : "+lpbuffer) 
fin

Masquer/afficher la barre des tâches

AppelDLL32("User32", "ShowWindow", AppelDLL32("User32", "FindWindowA", "Shell_TrayWnd",null), Faux) // Vrai pour l'afficher

Masquer la barre de notification

hwndb est un entier long=AppelDLL32("User32", "FindWindowA", "Shell_TrayWnd",null) 
hwndbt est un entier long=appeldll32("user32","FindWindowExA",hwndb,null,"TrayNotifyWnd",null) 
appeldll32("user32","ShowWindow",hwndbt,0)

Masquer le bouton Démarrer

hwndb est un entier long=AppelDLL32("User32", "FindWindowA", "Shell_TrayWnd",null) 
hwndbt est un entier long=appeldll32("user32","FindWindowExA",hwndb,null,"Button",null) 
appeldll32("user32","ShowWindow",hwndbt,0)

Masquer l'horloge

hwndb est un entier long=AppelDLL32("User32", "FindWindowA", "Shell_TrayWnd",null) 
hwndbt est un entier long=appeldll32("user32","FindWindowExA",hwndb,null,"TrayNotifyWnd",null) 
hwndclock est un entier long=appeldll32("user32","FindWindowExA",hwndbt,null,"TrayClockWClass",null) 
appeldll32("user32","ShowWindow",hwndclock,0)

Masquer ou afficher la partie affichant les programmes en cours

hwndtray est un entier long=AppelDLL32("User32", "FindWindowA", "Shell_TrayWnd",null) 
hwndtraychild est un entier long=appeldll32("user32","FindWindowExA",hwndtray,null,"RebarWindow32",null) 
si hwndtraychild alors 
    hwndtraychild =appeldll32("user32","FindWindowExA",hwndtraychild ,null,"MSTaskSwWclass",null) 
    si hwndtraychild alors 
        hwndtraychild =appeldll32("user32","FindWindowExA",hwndtraychild ,null,"SysTabControl32",null) 
        si appeldll32("user32","IsWindowVisible",hwndtraychild) alors 
            appeldll32("user32","ShowWindow",hwndtraychild,0) 
        sinon 
            appeldll32("user32","ShowWindow",hwndtraychild,1) 
        fin 
    fin 
fin

Iconiser l'application dans le systray
A l’ouverture de la fenêtre

Global 
 
numev est un entier long 
 
IconeT est compose de 
    cbSize est un entier long 
    hWnd est un entier Long 
    uID est un entier long 
    uFlags est un entier long 
    uCallbackMessage est un entier long 
    Icon est un entier long 
    szTip est une chaine asciiz de 64 
fin 
 
HIcon est un entier long 
lpIconName est une chaine asciiz sur 100 
 
// ***************************************** 
lpIconName="c:WdprojetImpEcrampoule-.ico" 
// ***************************************** 
 
HIcon = AppelDLL32("user32","LoadImageA" ,instance(),&lpIconName,1,16,16,16) 
si hicon alors 
    IconeT.cbSize = dimension(iconet) 
    IconeT.hWnd = handle() 
    IconeT.uID = 50 
    IconeT.uFlags = 7 
    IconeT.uCallbackMessage = 0x8000 
    IconeT.Icon = hicon 
    IconeT.szTip = "Clic Droit pour afficher le Menu." 
 
    // creation icone dans systemtray 
    appeldll32("shell32.dll","Shell_NotifyIconA",0,&iconet) 
 
    // supprime l'icone charge en memoire 
    AppelDLL32("user32","DestroyIcon" , hIcon) 
 
    // rend la fenetre invisible apres avoir insérer l'icone 
    fenetat(fenencours(),invisible) 
sinon 
    info("hicon non valide") 
fin 
 
numev=evenement("clic_icone","",0x8000)

A la fermeture de la fenêtre

// supprime l'icone du systemtray 
appeldll32("shell32.dll","Shell_NotifyIconA",2,&iconet) 
 
// supprime gestion evenements 
finevenement(numev)
Procédure clic_icone() 
 
// Si vous voulez créer un menu et l'afficher, vous pouvez le faire içi.. 
si _EVE.lParam=0x204 alors // clic droit pour afficher la fenêtre 
    fenetat(fenencours(),actif) 
fin 
si _EVE.lParam=0x201 alors // clic gauche pour la rendre invisible 
    fenetat(fenencours(),invisible) 
fin

Changer l'image de fond du bureau

image est une chaine asciiz de 128="c:\windows\imagesvoilier.bmp" 
SPI_SETDESKWALLPAPER est un entier = 20 
AppelDLL32("user32","SystemParametersInfoA" , SPI_SETDESKWALLPAPER, 0, &image, 0)

Espace du bureau disponible pour les applications

SPI_GETWORKAREA est un entier = 48 
rect est compose de 
    l est un entier long 
    t est un entier long 
    r est un entier long 
    b est un entier long 
fin 
 
appeldll32("user32","SystemParametersInfoA",SPI_GETWORKAREA,0,&rect,0) 
 
info(rect.l+" "+rect.t+" "+rect.r+" "+rect.b)

Iconiser toutes les fenêtres

SendMessage( appeldll32("user32","FindWindowA", "Shell_TrayWnd" , NULL) , 0x111 , 419 , 0)

Masquer les icônes du bureau et le rendre inactif

progm est un entier long=AppelDLL32("User32", "FindWindowA", "Progman", "Program Manager") 
AppelDLL32("User32", "ShowWindow", progm, 0)

Récupérer les dimensions (et positions) de la barre de tâches

rect3 est compose de 
    l est un entier long 
    t est un entier long 
    r est un entier long 
    b est un entier long 
fin 
hwndshell est un entier long = appeldll32("user32","FindWindowA","Shell_TrayWnd", NULL) 
si hwndshell alors 
    appeldll32("user32","GetWindowRect",hwndshell,&rect3) 
fin 
message(rect3.l+" "+rect3.r+"     "+rect3.t+" "+rect3.b)

Réorganiser toutes les fenêtres en cascade

SendMessage( appeldll32("user32","FindWindowA", "Shell_TrayWnd" , NULL) , 0x111 , 403 , 0)

Réorganiser toutes les fenêtres en mosaique horizontale

SendMessage( appeldll32("user32","FindWindowA", "Shell_TrayWnd" , NULL) , 0x111 , 404 , 0)

Réorganiser toutes les fenêtres en mosaique verticale

SendMessage( appeldll32("user32","FindWindowA", "Shell_TrayWnd" , NULL) , 0x111 , 405 , 0)

Restaurer toutes les fenêtres

SendMessage( appeldll32("user32","FindWindowA", "Shell_TrayWnd" , NULL) , 0x111 , 416 , 0)

Fenêtres

Supprimer le menu système de la fenêtre

lpHandleMenu est un entier long = AppelDLL32("user32","GetSystemMenu",handle(),0) 
appeldll32("user32","DestroyMenu",lphandlemenu)

Boite de sélection d'un fichier

OPENFILENAME est composé de 
    lStructSize est un entier long 
    hwnd1Owner est un entier long 
    hInstance est un entier long 
    lpstrFilter est un entier long 
    lpstrCustomFilter est un entier long 
    nMaxCustFilter est un entier long 
    nFilterIndex est un entier long 
    lpstrFile est un entier long 
    nMaxFile est un entier long 
    lpstrFileTitle est un entier long 
    nMaxFileTitle est un entier long 
    lpstrInitialDir est un entier long 
    lpstrTitle est un entier long 
    Flags1 est un entier long 
    nFileOffset est un entier 
    nFileExtension est un entier 
    lpstrDefExt est un entier long 
    lCustData est un entier long 
    lpfnHook est un entier long 
    lpTemplateName est un entier long 
fin 
OFN_NODEREFERENCELINKS est un entier long = 0x100000 // pour avoir le lnk 
 
filter est une chaine asciiz de 258="Tous les fichiers (*.*)"+caract(0)+"*.*"+caract(0)+"Fichiers Textes (*.txt)"+caract(0)+"*.txt"+caract(0)+"Fichiers lnk (*.lnk)"+caract(0)+"*.lnk"+caract(0) 
sel est une chaine asciiz de 64 = "*.*" 
fic est une chaine asciiz de 128 
rep est une chaine asciiz de 128="c:\temp\" 
 
OPENFILENAME.lStructSize=dimension(OPENFILENAME) 
OPENFILENAME.lpstrFilter=&filter 
OPENFILENAME.nMaxFile = 257 
OPENFILENAME.Flags1 =  OFN_NODEREFERENCELINKS 
OPENFILENAME.lpstrFileTitle=&fic 
OPENFILENAME.lpstrInitialDir=&rep 
OPENFILENAME.lpstrFile=&sel 
OPENFILENAME.hwnd1Owner = handle() 
 
si appeldll32("comdlg32","GetOpenFileNameA",&OPENFILENAME) alors 
    message(sel) 
fin

Fenêtre rectangulaire avec coins arrondis

region est un entier long=appeldll32( "gdi32" , "CreateRoundRectRgn" , 20 , 20 , {fenencours()}..largeur-20 , {fenencours()}..hauteur-20 , 30 , 30 ) 
si region alors 
    appeldll32("user32","SetWindowRgn",handle(),region,1) 
    appeldll32("gdi32","DeleteObject",region) 
fin

Boîte de dialogue

Ex pour une 'boite' OK et Annuler : 
 
lptext est une chaîne ASCIIZ de 100 = "Texte du message"+RC+"Ligne 1"+RC+"Ligne 2"+RC+"etc....." 
lpCaption est une chaîne ASCIIZ de 100 = "Titre de la dialogue box" 
utype est un entier sans signe = 0x1000 // top_most 
wLanguageId est un entier = 0x040C // francais 
 
MB_OK est un entier sans signe = 0x00 
MB_OKCANCEL est un entier sans signe = 0x1 
MB_ABORTRETRYIGNORE est un entier sans signe = 0x2 
MB_YESNOCANCEL est un entier sans signe = 0x3 
MB_YESNO est un entier sans signe = 0x4 
MB_RETRYCANCEL est un entier sans signe = 0x5 
 
MB_ICONHAND est un entier sans signe = 0x10 
MB_ICONQUESTION est un entier sans signe = 0x20 
MB_ICONEXCLAMATION est un entier sans signe = 0x30 
MB_ICONASTERISK est un entier sans signe = 0x40 
 
MB_ICONINFORMATION est un entier sans signe = MB_ICONASTERISK 
MB_ICONSTOP est un entier sans signe = MB_ICONHAND 
 
ret est un entier =AppelDLL32("user32","MessageBoxExA" , Handle(), &lptext, &lpCaption, utype + MB_OKCANCEL + MB_ICONASTERISK , wLanguageId) 
 
Message(ret)

StatusBar

La procédure suivante affiche un barre de statuts divisée en 4 parties :
– La première pour afficher les messages
– La deuxième pour afficher les coordonnées de la souris
– La troisième pour afficher l’heure en cours
– La quatrième pour afficher l’état des touches Num et Maj

Procédure statusbar() 
 
dc est un entier long 
hwnd est un entier long   
CCS_TOP est un entier long = 0x1 // barre dans le haut de la fenêtre 
CCS_BOTTOM est un entier long = 0x3 // barre dans le bas de la fenêtre 
SBT_TOOLTIPS est un entier long = 0x800 
ws_child est un entier long = 0x40000000 
ws_visible est un entier long = 0x10000000 
style est un entier long = ws_child + ws_visible + ccs_bottom + sbt_tooltips 
 
hwnd = AppelDLL32("user32","CreateWindowExA", 0 , "msctls_statusbar32" , "", style , 0 , 0 , 0 , 0 , handle() , null , instance(), null) 
si hwnd alors 
    // police de caractère à utiliser 
    lpszFace est une chaine asciiz sur 32="Arial" 
    font=AppelDLL32("gdi32","CreateFontA" , -12, 0, 0, 0, 0, 0, 0, 0, 0, 0, 15, 0, 64, &lpszFace) 
    wm_setfont est un entier long=0x30 
    SendMessage(hwnd,wm_setfont,font,1) 
 
    // barre divisée en 4 parties 
    nbpart est un tableau de 4 entiers long 
    nbpart[1]=FenIntLarg()-220 
    nbpart[2]=FenIntLarg()-130 
    nbpart[3]=FenIntLarg()-70 
    nbpart[4]=FenIntLarg() 
    sendmessage(hwnd, WM_USER + 4 , 4 , &nbpart) 
 
    // texte affiché dans le première partie 
    txt est une chaine asciiz de 128="Exemple de statusbar." 
    sendmessage(hwnd , wm_user+1 , 0 , &txt) 
    // tooltip affiché si le texte est tronqué 
    sendmessage(hwnd , wm_user+16 , 0 , &txt) // tooltip 
 
    // hauteur de la barre 
    si hauteurb alors 
        sendmessage(hwnd , wm_user+8, hauteurb , 0) 
        sendmessage(hwnd , 0x5 , 0 , 0) 
    fin 
    // couleur de fond de la barre 
    // meme couleur que le fond de la fenêtre 
    dc = appeldll32("user32","GetDC",handle()) 
    color est un entier long=appeldll32("gdi32","GetPixel",dc,1,FenIntHaut()-(hauteurb+1)) 
    sendmessage(hwnd,0x2001,1,color) 
    appeldll32("user32","ReleaseDC",handle(),dc) 
 
    renvoyer hwnd 
fin 
renvoyer faux

A l’ouverture de la fenêtre :

global 
 
wm_user est un entier long = 0x400 
font est un entier long // fonte utilisée dans le statusbar 
hwndwb est un entier long // handle barre 
evensize est un entier long 
evenmouse est un entier long 
hauteurb est un entier = 25 //hauteur de la barre   
 
hwndwb=statusbar() 
 
evensize = evenement("tstatus","*.",0x5) // wm_size 
evenmouse = evenement("tstatus","*.",0x200) // wm_mousemove 
theure est un entier long = timersys("affheure",100)

A la fermeture de la fenêtre :

Appeldll32("user32","DestroyWindow", hwndwb) 
AppelDLL32("gdi32","DeleteObject", font) 
finevenement(evensize) 
finevenement(evenmouse) 
fintimersys(theure)

La procédure tstatus

Procédure tstatus() 
 
// si changement dimensions fenêtre modification taille barre 
si hwndwb et _eve.wmessage=0x5 alors //wm_size 
    appeldll32("user32","MoveWindow",hwndwb,0,FenInthaut(),FenIntLarg(),hauteurb,1) 
    // barre divisée en 4 parties 
    nbpart est un tableau de 4 entiers long 
    nbpart[1]=FenIntLarg()-220 
    nbpart[2]=FenIntLarg()-130 
    nbpart[3]=FenIntLarg()-70 
    nbpart[4]=FenIntLarg() 
    sendmessage(hwnd, WM_USER + 4 , 4 , &nbpart) 
FIN 
 
// affichage coordonnées souris dans la 2ème partie   
si hwndwb et _eve.wmessage=0x200 alors //wm_mousemove 
    posx est un entier = poidsfaible(_eve.lparam) 
    posy est un entier = poidsfort(_eve.lparam) 
    txt est une chaine asciiz de 128 
    txt="x : "+posx+" y : "+posy 
    sendmessage(hwndwb , wm_user+1 , 1 , &txt) 
FIN

La procédure affheure pour afficher l’heure dans la 3ème partie et l’état des touches Num et Maj dans la 4ème

Procédure affheure() 
 
si hwndwb alors 
    txt est une chaine asciiz de 64 = heureverschaine(heuresys())[[a 8]] 
    sendmessage(hwndwb , wm_user+1 , 2 , &txt) 
 
    touche est un tableau de 256 entiers courts 
    si appeldll32("user32","GetKeyboardState",&touche) alors 
        txt = ""   
        si touche[0x91]=1 alors txt = "Num"   
        si touche[0x15]=1 alors txt += " Maj"   
        sendmessage(hwndwb , wm_user+1 , 3 , &txt) 
    fin 
fin<pre>Pour récupérer le message d'aide des champs et l'afficher dans la nouvelle barre de status<pre lang="windev">// A l'initialisation de la fenêtre 
wmsetfocus est un entier long = evenement("setfocus","*.*",0x7)
Procédure setfocus() 
 
si fenencours()&lt;&gt;" alors 
    fen est une chaine = _eve.nom 
    si fen&lt;&gt;fenencours() alors 
        mes est une chaine asciiz de 128 = {fen}..message 
        sendmessage( hwndwb , wm_user+1 , 0 , &amp;mes)  // hwndwb = handle barre de status 
    fin 
fin

Confiner la souris dans la fenêtre

rect est compose de 
    l est un entier long 
    t est un entier long 
    r est un entier long 
    b est un entier long 
fin 
 
appeldll32("user32","GetWindowRect",handle(),&amp;rect) 
appeldll32("user32","ClipCursor",&amp;rect) 
 
// pour annuler 
appeldll32("user32","ClipCursor",null)

Taille d'une fenêtre

fen est une chaine = "nom de la fenêtre mdi" 
 
rect est compose de 
  l est un entier 
  t est un entier 
  r est un entier 
  b est un entier 
fin 
appeldll32("user32","GetWindowRect,handle(),&amp;rect) 
 
et ensuite tu peux redimensioner la zone mdiclient 
 
posxmdiclt = rect.l - {fen}..X + nombrepixels en - à gauche 
posymdiclt = rect.t - {fen}..Y + nombrepixels en - en haut 
posrmdiclt = rect.r - {fen}..X - nombrepixels en - à droite 
posbmdiclt = rect.b - {fen}..Y - nombrepixels en - en bas 
 
appeldll32("user32","ShowWindow",handleMDIClient,0) 
appeldll32("user32","SetWindowPos", handleMDIClient, 0 , posxmdiclt , posymdiclt , posdmdiclt , posbmdiclt , 0) 
appeldll32("user32","ShowWindow",handleMDIClient,1) 
 
_eve.retour = 0

Barre de progression
La procédure :

//typeb peut être égal à : 
//  0 style horizontal normal 
//  1 style horizontal en continu 
//  4 style vertical normal 
//  5 style vertical en continu 
//  + 0x80000000 pour placer la barre à l'extérieur de la fenêtre 
 
Procédure progressbar( colonneb , ligneb , largeurb , hauteurb , typeb , limiteinf , limitesup , couleurbarre , couleurfond ) 
 
initcont est compose de 
    size est un entier long 
    typec est un entier long 
fin 
initcont.size=8 
initcont.typec=0x20 
hwndbar est un entier long 
 
// vérification si la classe du progressbar existe dans le comctl32.dll 
ini est un entier long=appeldll32("comctl32.dll","InitCommonControlsEx",&amp;initcont) 
si ini alors 
 
    hwndbar=AppelDLL32("user32","CreateWindowExA", 0x20 , "msctls_progress32" , "" , 0x50000000+typeb , colonneb , ligneb , largeurb , hauteurb , handle() , null , instance() , null ) 
 
    sendmessage( hwndbar , 0x406 , limiteinf , limitesup ) // PBM_SETRANGE32 - fixe les limites 
    sendmessage( hwndbar , 0x404 , 1 , 0) // PBM_SETSTEP - fixe l'increment 
    Sendmessage( hwndbar , 0x409 , 0 , couleurbarre ) // couleur barre 
    sendmessage(hwndbar, 0x2001 , 0 , couleurfond ) // couleur fond 
 
fin 
renvoyer hwndbar

Exemples d’utilisation : Affichage dans le bas de la fenêtre

limit est un entier long=2000 
 
bar est un entier long=progressbar( 0 , feninthaut()-18 , fenintlarg() , 18 , 0 , 1 , limit+1 , ibleufonce , igrisclair ) 
 
ind est un entier long 
pour ind=1 a limit 
 
    sendmessage( bar , 0x405 , 0 , 0 ) // augmentation barre 
 
    si appeldll32("user32","GetInputState") alors multitache(-1) 
 
fin 
appeldll32("user32","DestroyWindow",bar)

Exemples d’utilisation : Affichage de deux barres dans le bas de la fenêtre

limit est un entier long=20 
limit2 est un entier long=1000 
larg est un entier=fenintlarg()/2 
bar est un entier long=progressbar( 0 , feninthaut()-18 , larg , 18 , 0 , 1 , limit+1 , ibleufonce , igrisclair ) 
bar2 est un entier long=progressbar( larg+1 , feninthaut()-18 , larg-1 , 18 , 0 , 1 , limit2+1 , ibleuclair , igrisclair ) 
 
ind est un entier long 
ind2 est un entier long 
pour ind=1 a limit 
    sendmessage( bar , 0x405 , 0 , 0 ) 
    pour ind2=1 a limit2 
        sendmessage( bar2 , 0x405 , 0 , 0 ) 
    fin 
    si appeldll32("user32","GetInputState") alors multitache(-1) 
fin 
appeldll32("user32","DestroyWindow",bar) 
appeldll32("user32","DestroyWindow",bar2)

Exemples d’utilisation : Affichage d’une barre extérieure à la fenêtre

limit est un entier long=2000 
 
bar est un entier long=progressbar( {fenencours()}..colonne , {fenencours()}..ligne-20 , {fenencours()}..largeur , 19 , 0x80000000 , 1 , limit+1 , ibleuclair , itransparent ) 
ind est un entier long 
pour ind=1 a limit 
    sendmessage(bar,0x405,0,0) 
    si appeldll32("user32","GetInputState") alors multitache(-1) 
fin 
appeldll32("user32","DestroyWindow",bar)

Déterminer la taille des boutons de la barre de titre

SM_CXSIZE est un entier = 30 
SM_CYSIZE est un entier = 31 
 
larg est un entier = AppelDLL32("user32","GetSystemMetrics" , SM_CXSIZE) 
haut est un entier = AppelDLL32("user32","GetSystemMetrics" , SM_CYSIZE) 
 
info("Les boutons de la barre de titres ont "+larg+" pixels de largeurs et "+haut +" pixels de hauteur.")

Calendrier

Code d’ouverture de la fenêtre :

procedure calendw( datetr , nbl=1 , nbh=1 , anim=1 , fond=-1 , fondc=-1 , fondt=-1 , txtt=-1 , txtdm=-1 , txtd=-1 ) 
 
// datetr -&gt; date transmise pour être sélectionnée, si vide date sélecionnée sera la date système 
// nbl -&gt; nombre de mois visibles en largeur 
// nbh -&gt; nombre de mois visibles en hauteur 
// anim -&gt; 1 pour afficher le calendrier avec l'animation ou 0 pour affichage direct 
// fond -&gt; couleur fond fenêtre 
// fondc -&gt; couleur fond calendrier 
// fondt -&gt; couleur fond titres calendrier 
// txtt -&gt; couleur texte des titres 
// txtdm -&gt; couleur texte des dates 
// txtd -&gt; couleur texte des dates hors mois 
 
global 
  hwndcalend est un entier long // handle du calendrier 
  evencalend est un entier long // evenement pour détecter la sélection d'une date 
 
local 
ICC_DATE_CLASSES est un entier long = 0x00000100 // month picker 
initcont est compose de 
    size est un entier long 
    typec est un entier long 
fin 
initcont.size=8 
initcont.typec=ICC_DATE_CLASSES 
 
si pas appeldll32("comctl32.dll","InitCommonControlsEx",&amp;initcont) alors 
    erreur("Impossible de créer le calendrier !","Il y a un problème avec le fichier comctl32.dll.") 
    ferme() 
fin 
 
// coordonnés clic 
poss est un entier long=curseurpos(cpecran) 
posx est un entier = poidsfaible(poss) 
posy est un entier = poidsfort(poss) 
 
// création du calendrier 
style est un entier long= 0x40000000 // ws_child 
hwndcalend=AppelDLL32("user32","CreateWindowExA", 0 ,"SysMonthCal32" , "" , style , 0 , 0 , 200 , 200 , handle() , null , instance() , null) 
si pas hwndcalend alors 
    erreur("Erreur à la création du calendrier !") 
    ferme() 
fin 
 
// lecture dimensions minimales pour le calendrier 
rect est compose de 
    l est un entier long 
    t est un entier long 
    r est un entier long 
    b est un entier long 
fin 
sendmessage( hwndcalend , 0x1009 , 0 , &amp;rect ) // mcm_first + mcm_getminreqrect 
 
// résolution écran 
largecr est un entier = AppelDLL32("user32","GetSystemMetrics" , 0) 
hautecr est un entier = AppelDLL32("user32","GetSystemMetrics" , 1) 
 
// dimensions calendrier 
largc est un entier = rect.r 
hautc est un entier = rect.b 
si nbl&gt;1 alors 
    largc = (largc + (nbl*2)) * nbl 
fin 
si nbh&gt;1 alors 
    hautc = (hautc - (nbh*1.5)) * nbh 
fin 
// si dimensions &gt; résolution 
// affichage d'un seul mois 
si largc&gt;largecr ou hautc&gt;hautecr alors 
    largc=rect.r 
    hautc=rect.b 
fin 
// si fenêtre dépasse l'écran 
// modification position 
si largc+posx&gt;largecr alors 
    posx=largecr-largc-10 
fin 
si hautc+posy&gt;hautecr alors 
    posy=hautecr-hautc-20 
fin 
 
appeldll32("user32","SetWindowPos", hwndcalend , 0 , 0 , 0 , largc , hautc , 0x4) 
 
// selection dans le calendrier de la date transmise à la fenêtre 
systemtime est compose de 
    wYear est un entier 
    wMonth est un entier 
    wDayOfWeek est un entier 
    wDay est un entier 
    wHour est un entier 
    wMinute est un entier 
    wSecond est un entier 
    wMilliseconds est un entier 
fin 
systemtime.wyear=val(datetr[[a 4]]) 
systemtime.wmonth=val(datetr[[5 a 6]]) 
systemtime.wday=val(datetr[[7 a 8]]) 
 
// mcm_first (0x1000) + mcm_selcursel (0x2) 
sendmessage( hwndcalend , 0x1002 , 0 , &amp;systemtime ) 
 
// modification des couleurs 
// couleur fond 
si fond&lt;&gt;-1 alors sendmessage(hwndcalend,0x100A,0,fond) 
// couleur fond partie calendrier 
si fondc&lt;&gt;-1 alors sendmessage(hwndcalend,0x100A,4,fondc) 
// couleur fond des titres 
si fondt&lt;&gt;-1 alors sendmessage(hwndcalend,0x100A,2,fondt) 
// couleur texte des titres 
si txtt&lt;&gt;-1 alors sendmessage(hwndcalend,0x100A,3,txtt) 
// couleur des dates 
si txtdm&lt;&gt;-1 alors sendmessage(hwndcalend,0x100A,1,txtdm) 
// couleur texte des dates représentant m-1 ou m+1 
si txtd&lt;&gt;-1 alors sendmessage(hwndcalend,0x100A,5,txtd) 
 
// affichage du calendrier 
appeldll32("user32","ShowWindow",hwndcalend,1) 
 
// dimensions et position fenêtre 
caption est un entier = appeldll32("user32","GetSystemMetrics",4) // hauteur caption 
border est un entier = appeldll32("user32","GetSystemMetrics",46) // bordures 
border=border*3 
hauteurf est un entier = hautc + border + caption // hauteur totale fenêtre 
largeurf est un entier = largc + border // largeur totale fenêtre 
 
// position et dimensions fenetre selon l'endroit du clic et dimensions du calendrier 
// la fenêtre est hors écran à l'ouverture 
// largeur et hauteur à 0 pour effet animation si anim=1 
si anim alors 
    appeldll32("user32","SetWindowPos", handle() , 0 , posx , posy , 0 , 0 , 0x4 ) 
    // augmentation largeur et hauteur jusqu'à la taille normale 
    lignef est un entier 
    colonnef est un entier 
    boucle 
        si lignef=hauteurf et colonnef&gt;=largeurf alors sortir 
    fin 
sinon 
    appeldll32("user32","SetWindowPos",handle(),0,posx,posy,largeurf,hauteurf,0x4) 
fin 
 
evencalend=evenement("choix_calend","*.",0x4E) // wm_notify

Code de fermeture de la fenêtre

appeldll32("user32","DestroyWindow" , hwndcalend ) 
finevenement(evencalend) 
renvoyer datetr
Procédure choix_calend() 
 
date est compose de 
    hwndf est un entier long 
    idfrom est un entier long 
    code est un entier long 
    wYear est un entier 
    wMonth est un entier 
    wDayOfWeek est un entier 
    wDay est un entier 
fin 
 
// transfert des 3 premières variables 
transfert( &amp;date , _eve.lparam , 12 ) 
 
// si sélection d'une date 
si date.code=-746 alors 
    // transfert totalité 
    transfert( &amp;date, _eve.lparam , dimension(date) ) 
    datetr=verschaine(date.wYear,"04d") + verschaine(date.wMonth,"02d") + verschaine(date.wday,"02d") 
    ferme() 
fin

Appel du calendrier : 1 mois d’affiché et calendrier standard

datet=ouvre("calendw", datet)

Appel du calendrier : 1 mois d’affiché en largeur et 3 mois en hauteur, animation, fond fenêtre gris,fond calendrier gris,texte titre jaune

datet=ouvre("calendw", datet , 1 , 3 , 1 , igrisclair , igrisclair , -1 , ijauneclair )

Appel du calendrier : 3 mois en largeur et 4 mois en hauteur, pas d’animation

datet=ouvre("calendw", datet , 3 , 4 , 0 , -1 , -1 , -1 , -1 , -1 , irougefonce )

ou pour utiliser une chaine et non un champ date

chdate est une chaine = ouvre("calendw", datesys() )

Diviser une fenêtre en 2 parties avec une 'déchirure'

region1 est un entier long 
region2 est un entier long 
region3 est un entier long 
pt1 est un tableau de 40 entiers longs 
 
x1 est un entier = {fenencours()}..largeur 
y1 est un entier = {fenencours()}..hauteur / 2 
pasx est un entier = x1 / 9 
d1 est un entier = 5 
d2 est un entier = -100 
 
pt1[1]= x1 
pt1[2]= y1 - d1 
pt1[3]= x1 - pasx 
pt1[4]= y1 - d2 
pt1[5]= x1 - (pasx * 2) 
pt1[6]= y1 - d1 
pt1[7]= x1 - (pasx * 3) 
pt1[8]= y1 - d2 
pt1[9]= x1 - (pasx * 4) 
pt1[10]= y1 - d1 
pt1[11]= x1 - (pasx * 5) 
pt1[12]= y1 - d2 
pt1[13]= x1 - (pasx * 6) 
pt1[14]= y1 - d1 
pt1[15]= x1 - (pasx * 7) 
pt1[16]= y1 - d2 
pt1[17]= x1 - (pasx * 8) 
pt1[18]= y1 - d1 
pt1[19]= x1 - (pasx * 9) 
pt1[20]= y1 - d2 
pt1[21]= 0 
pt1[22]= y1 + d1 
pt1[23]= pasx 
pt1[24]= y1 + d2 
pt1[25]= pasx * 2 
pt1[26]= y1 + d1 
pt1[27]= pasx * 3 
pt1[28]= y1 + d2 
pt1[29]= pasx * 4 
pt1[30]= y1 + d1 
pt1[31]= pasx * 5 
pt1[32]= y1 + d2 
pt1[33]= pasx * 6 
pt1[34]= y1 + d1 
pt1[35]= pasx * 7 
pt1[36]= y1 + d2 
pt1[37]= pasx * 8 
pt1[38]= y1 + d1 
pt1[39]= x1 
pt1[40]= y1 + d2 
 
region1=appeldll32("gdi32","CreateRectRgn",0,0,{fenencours()}..largeur,{fenencours()}..hauteur) 
region2=appeldll32("gdi32","CreateRectRgn",0,0,{fenencours()}..largeur,{fenencours()}..hauteur) 
region3=appeldll32("gdi32","CreatePolygonRgn",&amp;pt1,20,1) 
 
appeldll32("gdi32","CombineRgn",region1,region2,region3,4) 
appeldll32("gdi32","DeleteObject",region2) 
appeldll32("gdi32","DeleteObject",region3) 
 
appeldll32("user32","SetWindowRgn",handle(),region1,1) 
appeldll32("gdi32","DeleteObject",region1)

Déterminer la hauteur d'une barre de titre

SM_CYCAPTION est un entier = 4 
 
info("La barre de titre a "+AppelDLL32("user32","GetSystemMetrics" , SM_CYCAPTION)+" pixels de hauteur.")

Changer l'icône de la fenêtre

wm_seticon est un entier = 0x80 
 
hicon est un entier long= AppelDLL32("user32","LoadImageA" ,null, "c:iconesdiverspointv.ico",1,0,0,16) 
si hicon alors 
    sendmessage(handle(),wm_seticon,1,hicon) // icône 32*32 pour le alt-tab 
    sendmessage(handle(),wm_seticon,0,hicon) // icône 16*16 pour la fenêtre 
sinon 
    message("pas d'icone") 
fin

Supprimer l'item Fermeture du menu système

cpFlags est un entier long = 0x400 
lpHandleMenu est un entier long = AppelDLL32("user32","GetSystemMenu",handle(),0) 
 
AppelDLL32("user32","DeleteMenu", lpHandleMenu, 6, cpFlags) 
// on supprime aussi la barre de séparation 
AppelDLL32("user32","DeleteMenu", lpHandleMenu, 5, cpFlags)

Avoir une fenêtre toujours visible (topmost)

AppelDLL32("user32","SetWindowPos",handlefenetre,-1,0,0,0,0,0x3)

Fenêtre rectangulaire

region est un entier long=appeldll32( "gdi32" , "CreateRectRgn" , 3 , 21 , {fenencours()}..largeur-3 , {fenencours()}..hauteur-25 ) 
si region alors 
    appeldll32( "user32" , "SetWindowRgn" , handle() , region , 1 ) 
    appeldll32( "gdi32" , "DeleteObject" , region ) 
fin

Fenêtre triangulaire

pt1 est un tableau de 6 entiers longs 
pt1[1]={fenencours()}..largeur 
pt1[2]={fenencours()}..hauteur 
pt1[3]=0 
pt1[4]={fenencours()}..hauteur 
pt1[5]={fenencours()}..largeur/2 
pt1[6]=0 
 
region est un entier long=appeldll32("gdi32","CreatePolygonRgn",&amp;pt1,3,1) 
appeldll32("user32","SetWindowRgn",handle(),region,1) 
appeldll32("gdi32","DeleteObject",region)

Diviser une fenêtre en 4 parties

region1 est un entier long 
region2 est un entier long 
region3 est un entier long 
region4 est un entier long 
x1,y1,x2,y2 sont des entiers 
 
x1 = {fenencours()}..largeur/2 
y1={fenencours()}..hauteur/2 
 
region1=appeldll32("gdi32","CreateRectRgn",0,0,{fenencours()}..largeur,{fenencours()}..hauteur) 
region2=appeldll32("gdi32","CreateRectRgn",x1-5,0,x1+5,{fenencours()}..hauteur) 
region3=appeldll32("gdi32","CreateRectRgn",0,y1-5,{fenencours()}..largeur,y1+5) 
 
appeldll32("gdi32","CombineRgn",region1,region2,region3,2) 
appeldll32("gdi32","DeleteObject",region2) 
appeldll32("gdi32","DeleteObject",region3) 
 
region4=appeldll32("gdi32","CreateRectRgn",0,0,{fenencours()}..largeur,{fenencours()}..hauteur) 
region2=appeldll32("gdi32","CreateRectRgn",0,0,{fenencours()}..largeur,{fenencours()}..hauteur) 
appeldll32("gdi32","CombineRgn",region4,region2,region1,4) 
appeldll32("gdi32","DeleteObject",region2) 
 
appeldll32("user32","SetWindowRgn",handle(),region4,1) 
appeldll32("gdi32","DeleteObject",region4) 
appeldll32("gdi32","DeleteObject",region1)

Récupérer le nom de la fenêtre au 1er plan

// handle de l'application au premier plan 
hand est un entier long=AppelDLL32("user32","GetForegroundWindow" ) 
 
// titre de la fenetre correspondante 
titre est une chaine fixe de 128 
AppelDLL32("user32","GetWindowTextA" , hand , &amp;titre , 127) 
 
info("La fenêtre au 1er plan a pour nom : "+titre+" son handle est "+hand)

Rajouter une barre d'icônes à gauche d'une fenêtre mère MDI
Le but est de rajouter une barre d’icônes sur la gauche d’une fenêtre mdi, il faut que cette barre soit active, il ne faut pas que cette barre soit recouverte par les fenêtres filles lorsque ces dernières sont maximisées. Vous devez placer vos boutons ainsi qu’une zone libellé qui va servir de cadre sur la gauche de la fenêtre mère. A l’ouverture de la fenêtre mère ‘mdi1’

global 
 
even est un entier long 
even=evenement("wmsize","mdi1",0x5) // wm_size   
wmsize()

A la fermeture de la fenêtre ‘mdi1’

finevenement(even)
Procédure wmsize() 
 
larg est un entier=fenintlarg() // largeur interne fenêtre mère 
haut est un entier=feninthaut() // hauteur interne fenêtre mère 
bar_larg est un entier=lib1..largeur // largeur du libellé servant de cadre 
 
// handle de la zone client 
handclt est un entier long=appeldll32("user32","FindWindowExA", handle() , null , "MDIClient" , null) 
 
appeldll32("user32","ShowWindow",handclt,0) // invisible 
 
// modif taille et position de la zone client 
// haut-19 pour la barre de message du bas de la fenêtre mère 
appeldll32("user32","SetWindowPos",handclt,0,bar_larg,0,larg-bar_larg,haut-19,0) 
 
appeldll32("user32","ShowWindow",handclt,1) // visible 
 
// modif taille et position de la barre de message si il y en a une 
handbar est un entier long=appeldll32("user32","FindWindowExA" , handle() , null , "BARMESS" , null) 
appeldll32("user32","SetWindowPos",handbar,0,bar_larg,haut-21,larg-bar_larg,20,0) 
 
// modif taille du libellé servant de cadre 
lib1..ligne=0 
lib1..colonne=0 
lib1..hauteur=haut 
 
_eve.retour=0

Déterminer la hauteur d'une barre de menu

SM_CYMENU est un entier = 15 
 
info("La barre de menu a "+AppelDLL32("user32","GetSystemMetrics" , SM_CYMENU )+" pixels de hauteur.")

Fenêtre elliptique avec un trou

x1,y1 sont des entiers 
x1={fenencours()}..largeur/2 
y1={fenencours()}..hauteur/2 
 
region1 est un entier long=appeldll32("gdi32","CreateEllipticRgn",10,5,{fenencours()}..largeur-10,{fenencours()}..hauteur-5) 
region2 est un entier long=appeldll32("gdi32","CreateEllipticRgn",10,5,{fenencours()}..largeur-10,{fenencours()}..hauteur-5) 
region3 est un entier long=appeldll32("gdi32","CreateEllipticRgn",x1-50,y1-50,x1+50,y1+50) 
appeldll32("gdi32","CombineRgn",region1,region2,region3,4) 
appeldll32("user32","SetWindowRgn",handle(),region1,1) 
 
appeldll32("gdi32","DeleteObject",region1) 
appeldll32("gdi32","DeleteObject",region2) 
appeldll32("gdi32","DeleteObject",region3)

Supprimer ou afficher la barre de message
affbare(1) // pour l’afficher – 0 pour l’enlever

Procédure affbarre(show) 
 
hwndb est un entier long=appeldll32("user32","FindWindowExA", handle() , null , "BARMESS" , null ) 
appeldll32("user32","ShowWindow",hwndb,show)

Enlever la fenêtre en cours de la barre de tâches
Pour qu’une fenêtre n’apparaisse pas dans la barre de tâches, il faut lui donner le style étendu WS_EX_TOOLWINDOW

GW_EXSTYLE est un entier long = -20 
WS_EX_TOOLWINDOW est un entier long = 0x80 
{fenencours()}..etat=invisible 
appeldll32("user32","SetWindowLongA",handle(),gw_exstyle,WS_EX_TOOLWINDOW) 
{fenencours()}..etat=actif

Internet

DNS Query

DNS_MX_DATA est une structure 
  pNameExchange est un entier sur 4 octets 
  wPreference est un entier sur 2 octets 
  Pad est un entier sur 2 octets 
FIN 
 
dnsrecord est une structure 
  pNext est un entier sur 4 octets 
  pName est un entier sur 4 octets 
  wType est un entier sur 2 octets 
  wDataLength est un entier sur 2 octets 
  DW est un entier sur 4 octets 
  dwTtl est un entier sur 4 octets 
  dwReserved est un entier sur 4 octets 
  data est un DNS_MX_DATA 
FIN 
dr est un dnsrecord 
 
res est un entier = API("Dnsapi","DnsQuery_A", "tondomaine.xxx" , 15 , 0 , Null , &amp;dr , Null ) 
SI PAS res ALORS 
  ch est une chaîne ASCIIZ de 128 
  BOUCLE 
    API("kernel32","RtlMoveMemory", &amp;dr, dr:pNext, Dimension(dr)) 
    SI API("kernel32","lstrlenA",dr:data:pNameExchange)=0 ALORS SORTIR 
    API("kernel32" , "RtlMoveMemory" , &amp;ch , dr:data:pNameExchange , API("kernel32" , "lstrlenA" , dr:data:pNameExchange)) 
    Trace("ch : ",ch," pref : ",dr:data:wPreference) 
    ch="" 
  FIN 
FIN

Liste des partages réseau d'une machine

PROCEDURE Enum1(nom) // nom = nom de la machine de type \\nom_machine 
 
TableSupprimeTout(Table2) 
 
lphEnum est un entier  	// address of enumeration handle buffer 
 
RESOURCE_CONNECTED est un entier   = 0x00000001 
RESOURCE_GLOBALNET est un entier   = 0x00000002 
RESOURCE_REMEMBERED est un entier   = 0x00000003 
 
RESOURCETYPE_ANY est un entier   = 0x00000000 
RESOURCETYPE_DISK est un entier   = 0x00000001 
RESOURCETYPE_PRINT est un entier   = 0x00000002 
 
RESOURCEUSAGE_CONNECTABLE est un entier   = 0x00000001 
RESOURCEUSAGE_CONTAINER est un entier   = 0x00000002 
 
ordi est une chaîne ASCIIZ de 128 = nom 
 
i est un entier 
 
localname est une chaîne ASCIIZ de 256 
remotename est une chaîne ASCIIZ de 256 
comment est une chaîne ASCIIZ de 256 
provider est une chaîne ASCIIZ de 256 
 
NETRESOURCE est une structure 
  dwScope est un entier 
  dwType est un entier 
  dwDisplayType est un  entier 
  dwUsage est un entier 
  lpLocalName est un entier 
  lpRemoteName est un entier 
  lpComment est un entier 
  lpProvider est un entier 
FIN 
 
net01 est un tableau de 100 NETRESOURCE 
 
net01[1]:dwScope = 0 
net01[1]:dwType = 0 
net01[1]:lpRemoteName = &amp;ordi 
 
dim est un entier = Dimension(net01) 
 
cbBuffer est un entier   = dim * 16 
 
cEntries est un entier   = -1 
 
handopen est un entier  =AppelDLL32("mpr","WNetOpenEnumA",0x2,0,0,&amp;net01,&amp;lphEnum) 
 
handenum1 est un entier  = AppelDLL32("mpr","WNetEnumResourceA",lphEnum,&amp;cEntries,&amp;net01,&amp;cbBuffer) 
 
POUR i=1 A cEntries 
 
  localname="" 
  SI net01[i]:lpLocalName&lt;&gt;0 ALORS 
    AppelDLL32("kernel32","RtlMoveMemory",&amp;localname,net01[i]:lpLocalName,256) 
  FIN 
 
  remotename="" 
  SI net01[i]:lpRemoteName&lt;&gt;0 ALORS 
    AppelDLL32("kernel32","RtlMoveMemory",&amp;remotename, net01[i]:lpRemoteName,256) 
  FIN	
 
  comment="" 
  SI net01[i]:lpComment&lt;&gt;0 ALORS 
    AppelDLL32("kernel32","RtlMoveMemory",&amp;comment, net01[i]:lpComment,256) 
  FIN	
 
  provider="" 
  SI net01[i]:lpProvider&lt;&gt;0 ALORS 
    AppelDLL32("kernel32","RtlMoveMemory",&amp;provider, net01[i]:lpProvider,256) 
  FIN	
 
  TableAjoute("TABLE2", localname +TAB+ remotename + TAB + comment +TAB+ provider) 
 
FIN 
AppelDLL32("mpr","WNetCloseEnum",lphEnum)

lancer le navigateur par défaut et imprimer une page web

adresse est une chaine = "http://windevfr.free.fr" 
appeldll32("shell32.dll","ShellExecuteA", null , "print" , adresse , "" , null , 0 )

lancer le navigateur par défaut et ouvrir une page web

adresse est une chaine = "http://windevfr.free.fr" 
appeldll32("shell32.dll","ShellExecuteA", null , null , adresse , "" , null , 1 )

Détecter si une connexion est active (1)

typeconnect est un entier long 
si appeldll32( "Wininet" , "InternetGetConnectedState" , &amp;typeconnect , 0 ) alors 
    info("Connecté") 
fin

Détecter si une connexion est active (2)
Détecter si une connexion internet est active et laquelle (si ras)

Rascon est compose de 
    dwSize est un entier long 
    hrasconn est entier long 
    szEntryName est une chaine asciiz de 257 
    szDeviceType est une chaine asciiz de 17 
    szDeviceName est une chaine asciiz de 130 
fin 
 
Rascon.dwSize = dimension(Rascon) 
tbuf est un entier long = dimension(Rascon) 
nbc est un entier long 
 
si appeldll32("rasapi32.dll","RasEnumConnectionsA", &amp;rascon , &amp;tbuf , &amp;nbc) = 0 
    si nbc&gt;0 alors 
        info("La connexion "+sansespace(Rascon.szEntryName)+" est active !") 
    sinon 
        info("Il n'y a pas de connexion !") 
    fin 
fin

Lire des pages internet et les copier sur le disque

INTERNET_OPEN_TYPE_PRECONFIG est un entier = 0 
INTERNET_FLAG_RELOAD est un entier long = 0x80000000 
 
Connect est un entier long =  appeldll32("wininet","InternetOpenA", "Test" , INTERNET_OPEN_TYPE_PRECONFIG , null , null , 0 ) 
si connect alors 
 
    url est tableau de 3 chaines asciiz de 64 
    url[1] = "http://msdn.microsoft.com/defaut.asp" 
    url[2] = "http://windevfr.free.fr" 
    url[3] = "http://www.windevasso.org" 
 
    resurl est un tableau de 3 entier long 
    ind est un entier 
    pour ind=1 a 3 
 
        message("Vérification de l'url : "+url[ind]) 
 
        openurl est un entier long = appeldll32("wininet","InternetOpenUrlA", connect , &amp;url[ind] , null , 0 , INTERNET_FLAG_RELOAD , 0) 
        si openurl alors 
            resurl[ind]=1 
            nblus est un entier long 
            buffer est une chaine asciiz de 2049 
            file est un entier long = fcree("c:\"+url[ind][[8 a 15]]+".html") 
            tantque appeldll32("wininet","InternetReadFile", openurl , &amp;buffer , 2048 , &amp;nblus ) 
                si nblus&gt;0 alors 
                    fecrit(file,buffer,nblus) 
                sinon 
                    sortir 
                fin 
            fin 
            fferme(file) 
 
            appeldll32("wininet","InternetCloseHandle",openurl) 
        sinon 
            resurl[ind] = appeldll32("kernel32","GetLastError") 
        fin 
    fin 
 
    appeldll32("wininet","InternetCloseHandle",connect) 
 
    ch est une chaine 
    pour ind=1 a 3 
        ch+=url[ind]+"    "+resurl[ind]+rc 
    fin 
    info(ch)
fin

Se connecter automatiquement

appeldll32( "wininet" , "InternetAutodial" , 2 , 0 )

Se connecter avec la connexion par défaut avec confirmation

si pas appeldll32( "Wininet" , "InternetAttemptConnect" , 0 ) alors 
    info("Connecté") 
sinon 
    info("Non connecté") 
fin

Se connecter avec un compte et confirmation

Connectoid est une chaine asciiz de 64 = "Nom de la Connexion" 
connect est un entier long 
appeldll32( "wininet" , "InternetDial" , handle() , connectoid , 1 , &amp;connect , 0 )

Se déconnecter (si connexion éffectuée avec InternelDial)

appeldll32( "wininet" , "InternetHangUp" , connect , 0 )

Se déconnecter

appeldll32( "wininet" , "InternetAutodialHangup" , 0 )

Liste des accès réseau à distance

tadr est un entier sur 4 octets 
nadr est un entier sur 4 octets   
 
AppelDLL32("rasapi32.dll","RasEnumEntriesA",Null,Null,Null,&amp;tadr,&amp;nadr) 
SI nadr&gt;0 ALORS 
 
  size1 est un entier sur 4 octets = tadr / nadr 
  name1 est une chaîne ASCIIZ de 257 
 
  hmem est un entier sur 4 octets = AppelDLL32("kernel32","GlobalAlloc",0x40,tadr) 
  AppelDLL32("kernel32","RtlMoveMemory",hmem,&amp;size1,4) 
 
  res est un entier sur 4 octets = AppelDLL32("rasapi32.dll","RasEnumEntriesA",Null,Null,hmem,&amp;tadr,&amp;nadr) 
  si pas res ALORS 
 
    ind est un entier 
    ch est une chaîne 
    adr est un entier sur 4 octets = hmem + 4 
    POUR ind=1 A nadr 
      AppelDLL32("kernel32","RtlMoveMemory",&amp;name1,adr,size1)	
      ch += ind+" : "+name1  + RC 
      adr+=size1 
    FIN 
 
  FIN 
 
  AppelDLL32("kernel32","GlobalFree",hmem) 
 
  Info(ch) 
 
FIN

Réseau

Partager un répertoire

SHI50F_RDONLY est un entier  =  0x0001 
SHI50F_FULL est un entier   = 0x0002 
SHI50F_DEPENDSON est un entier  =  SHI50F_RDONLY + SHI50F_FULL 
SHI50F_ACCESSMASK est un entier =  SHI50F_RDONLY + SHI50F_FULL 
// The share is restored on system startup 
SHI50F_PERSIST est un entier  = 0x0100 
// The share is not normally visible 
SHI50F_SYSTEM est un entier  =  0x0200 
STYPE_DISKTREE est un entier court  = 0       //* disk share */ 
STYPE_PRINTQ  est un entier court  = 1       //* printer share */ 
 
remarque est une chaine asciiz de 128 = "Répertoire partagé sur le poste à XX" 
sname est une chaine asciiz de 128 = "C:Répertoire à partager" 
 
shareinfo50 est compose de 
    shi50_netname est une chaine asciiz de 13 
    shi50_type est un entier court 
    shi50_flags est un entier 
    shi50_remark est un entier long 
    shi50_path est un entier long 
    shi50_rw_password est une chaine asciiz de 9 
    shi50_ro_password est une chaine asciiz de 9 
fin 
 
shareinfo50.shi50_netname = "POSTEXX" 
shareinfo50.shi50_type = STYPE_DISKTREE 
shareinfo50.shi50_flags = SHI50F_PERSIST + SHI50F_RDONLY 
shareinfo50.shi50_remark = &amp;remarque 
shareinfo50.shi50_path = &amp;sname 
shareinfo50.shi50_rw_password = null 
shareinfo50.shi50_ro_password = "PASS" 
 
res est un entier long = appeldll32("svrapi","NetShareAdd",null,50,&amp;shareinfo50,dimension(shareinfo50)) 
si res&lt>0 alors 
    erreur(res) 
fin

Modifier l'adresse IP de la machine locale

Procédure AdresseIP() 
 
sChaine is string 
nIP	is chaine asciiz sur 80 
sChemin is string asciiz sur 160 
 
lpSubKey est une chaine asciiz sur 80 
phkResult is long int 
 
// sChaine = Nom de la carte réseau 
 
sChemin = "SYSTEM\CurrentControlSet\Services\"+sChaine+"\Parameters\Tcpip" 
 
// "HKEY_LOCAL_MACHINE=0x80000002 dans winreg.h" 
AppelDLL32("advapi32.dll","RegOpenKeyExA" , 0x80000002,sChemin... 
, 0, 2, &amp;phkResult) 
 
nIP=TCPIP1+"."+TCPIP2+"."+TCPIP3+"."+TCPIP4 
AppelDLL32("advapi32.dll","RegSetValueExA" , phkResult, "IPaddress", 0,... 
7, nIP, taille(nIP)) 
 
nIP=TCPIP5+"."+TCPIP6+"."+TCPIP7+"."+TCPIP8 
AppelDLL32("advapi32.dll","RegSetValueExA" , phkResult, "SubnetMask", 0,... 
7, nIP, taille(nIP)) 
 
nIP=TCPIP9+"."+TCPIP10+"."+TCPIP11+"."+TCPIP12 
AppelDLL32("advapi32.dll","RegSetValueExA" , phkResult, "DefaultGateway", 0,... 
7, nIP, taille(nIP)) 
 
AppelDLL32("advapi32.dll","RegCloseKey" , phkResult) 
 
sChemin = "HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\ComputerName\ComputerName" 
nIP = registreecrit(sChemin,"ComputerName",NB) 
sChemin = "HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\ComputerName\ActiveComputerName" 
nIP = registreecrit(sChemin,"ComputerName",NB) 
sChemin = "HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\Tcpip\Parameters" 
nIP = registreecrit(sChemin,"Hostname",NB)

Comment avoir l'heure serveur à partir d'un poste client

LanceAppli("net time \\192.168.1.3 /set /yes",exeIconise)
 
Remplacer 192.168.1.3 par le serveur qui sera à l'heure

Liste des utilisateurs déclarés sur un controleur de domaine

chDomaine, chServeur est une chaîne	// Noms du domaine et du CPD (Contrôleur Principal du Domaine) 
 
pDomaine, pServeur est une chaîne UNICODE	// Les mêmes en UNICODE 
 
hInst est un entier	// Instance de l'API 
pInfos est un entier	// Pointeur sur les infos retournées par l'API 
res est un entier	// Résultat de l'appel à l'API 
EntreesLues, TotalEntrees, ResumeHandle	sont des entiers	// Pour NetUserEnum 
boolEncoreDesInfos est un booléen 
 
// Structure USER_INFO_10 (Il existe : USER_INFO_0,1 à 4,10,11,20 à 23,1003,1005 à 1014,1017,1018,1020,1023 à 1025,1051 à 1053 
USER_INFO_10 est une structure 
p_name est un entier // Pointeur sur une chaine UNICODE : login 
p_comment est un entier // Pointeur sur une chaine UNICODE : commentaires 
p_usr_comment est un entier // Pointeur sur une chaine UNICODE : commentaires 
p_full_name est un entier	// Pointeur sur une chaine UNICODE : nom complet 
FIN 
InfoUtilisateur est une USER_INFO_10 
 
NiveauInformation est un entier =10	// Niveau d'informations de NetUserEnum, correspond à la structure USER_INFO_10 
nbInfos est un entier = 1	// Nombre d'infos à retourner, si on met plus, il faut récupérer un tableau de structure 
// Filtre de recherche pour NetUserEnum 
FILTER_TEMP_DUPLICATE_ACCOUNT est un entier = 1 
FILTER_NORMAL_ACCOUNT est un entier = 2 
FILTER_INTERDOMAIN_TRUST_ACCOUNT est un entier = 8 
FILTER_WORKSTATION_TRUST_ACCOUNT est un entier = 16 
FILTER_SERVER_TRUST_ACCOUNT est un entier = 32 
 
USER_INFO_CH est une structure	// J'utilise une structure de chaine, on pourrait prendre autre chose 
ch_name est une chaîne 
ch_comment est une chaîne 
ch_usr_comment est une chaîne 
ch_full_name est une chaîne	
FIN 
InfoUtilisateurCH est une USER_INFO_CH 
 
// Récupération du nom de domaine sur lequel est connecté le poste 
chDomaine = SansEspace(SysEnvironnement("USERDOMAIN")[[12 A ]]) 
// Conversion en UNICODE 
pDomaine = AnsiVersUnicode(chDomaine,alphabetAnsi) 
 
// Chargement de l'API adéquate 
hInst = ChargeDLL("Netapi32.dll") 
SI hInst = 0 ALORS 
Erreur("Impossible de charger la DLL") 
SINON 
// Récupération du nom du CPD 
res = API("NetApi32.dll","NetGetDCName",Null,&amp;pDomaine,&amp;pInfos) 
// Récupération de l'info retournée par NetGetDCName en UNICODE 
chServeur = SansEspace(ChaîneRécupère(pInfos,crAdresseUNICODE)) 
// Conversion en UNICODE 
pServeur = AnsiVersUnicode(chServeur,alphabetAnsi) 
// Libération de la mémoire réservée par NetGetDCName 
res = API("NetApi32.dll","NetApiBufferFree",pInfos) 
 
Info("Domaine : "+chDomaine+RC+"Serveur : "+chServeur) 
 
// Enumération des utilisateurs 
ResumeHandle = 0	// Pour récupérer la première info 
BOUCLE 
res = API("NetApi32.dll","NetUserEnum", pServeur, NiveauInformation, FILTER_NORMAL_ACCOUNT, &amp;pInfos, nbInfos , &amp;EntreesLues, &amp;TotalEntrees, &amp;ResumeHandle) 
boolEncoreDesInfos = ( TotalEntrees &gt; 1 ) 
// Récupération des informations, l'opérateur C -&gt; n'existant pas sous WinDev, on utilise la fonction Transfert 
Transfert(&amp;InfoUtilisateur,pInfos,16)	// On transfert le contenu de la mémoire réservée par NetUserEnum dans notre structure. 
// 16 c'est la taille de ma structure ( 4 entiers = 4 * 4 octets ) 
// Les infos récupérées sont des chaines UNICODE, il convient donc de les convertir 
InfoUtilisateurCH:ch_name = ChaîneRécupère(InfoUtilisateur:p_name,crAdresseUNICODE) 
InfoUtilisateurCH:ch_comment = ChaîneRécupère(InfoUtilisateur:p_comment,crAdresseUNICODE) 
InfoUtilisateurCH:ch_usr_comment = ChaîneRécupère(InfoUtilisateur:p_usr_comment,crAdresseUNICODE) 
InfoUtilisateurCH:ch_full_name = ChaîneRécupère(InfoUtilisateur:p_full_name,crAdresseUNICODE) 
 
Info(InfoUtilisateurCH:ch_name+RC+InfoUtilisateurCH:ch_full_name+RC+InfoUtilisateurCH:ch_comment+RC+InfoUtilisateurCH:ch_usr_comment) 
 
// Libération de la mémoire réservée par NetUserEnum 
res = API("NetApi32.dll","NetApiBufferFree",pInfos) 
SI PAS boolEncoreDesInfos ALORS SORTIR 
FIN 
DéchargeDLL(hInst) 
FIN

Récupérer une adresse mac et le type de carte réseau

ent est composé de 
 
  wszName est une chaîne ASCIIZ de 512 
 
  dwIndex est un entier      // index of the interface 
  dwType est un entier       // type of interface 
  dwMtu est un entier        // max transmission unit 
  dwSpeed est un entier      // speed of the interface 
  dwPhysAddrLen est un entier      // length of physical address 
  bPhysAddr est une chaîne ASCIIZ de 8  // physical address of adapter 
 
  dwAdminStatus est un entier      // administrative status 
  dwOperStatus est un entier       // operational status 
  dwLastChange est un entier       // last time operational status changed 
  dwInOctets est un entier         // octets received 
  dwInUcastPkts est un entier      // unicast packets received 
  dwInNUcastPkts est un entier     // non-unicast packets received 
  dwInDiscards est un entier       // received packets discarded 
  dwInErrors est un entier         // erroneous packets received 
  dwInUnknownProtos est un entier    // unknown protocol packets received 
  dwOutOctets est un entier        // octets sent 
  dwOutUcastPkts est un entier     // unicast packets sent 
  dwOutNUcastPkts est un entier    // non-unicast packets sent 
  dwOutDiscards est un entier      // outgoing packets discarded 
  dwOutErrors est un entier        // erroneous packets sent 
  dwOutQLen est un entier          // output queue length 
  dwDescrLen est un entier         // length of bDescr member 
 
  bDescr est une chaîne ASCIIZ de 256  // interface description 
 
FIN 
 
ch est une chaîne="" 
ind est un entier 
tail est un entier 
name est une chaîne ASCIIZ de 256 
diment est un entier = Dimension(ent) 
 
res est un entier   
res = AppelDLL32("Iphlpapi","GetIfTable",0,&amp;tail,0) 
 
SI tail&gt;0 ALORS 
 
  hmem est un entier   = AppelDLL32("kernel32","GlobalAlloc",0x40,tail) 
 
  res  = AppelDLL32("Iphlpapi","GetIfTable",hmem,&amp;tail,0) 
 
  adr est un entier   = hmem + 4 
  nb est un entier   
 
  AppelDLL32("kernel32","RtlMoveMemory",&amp;nb,hmem,4) 
  POUR ind = 1 A nb 
    AppelDLL32("kernel32","RtlZeroMemory",&amp;ent,diment) 
    AppelDLL32("kernel32","RtlMoveMemory",&amp;ent,adr,diment) 
 
    SAISIE1 += "Index : "+ent.dwIndex + RC 
    SAISIE1 += "Type : "+ent.dwType + RC 
    SAISIE1 += "Speed : "+ent.dwSpeed + RC	
    SAISIE1 += "Mtu : "+ent.dwMtu + RC 
    SAISIE1 += "Adr len : "+ent.dwPhysAddrLen + RC 
    SI ent.dwPhysAddrLen&gt;0 ALORS 
      i1 est un entier 
      in1 est un entier   
      ch="" 
      POUR i1 = 1 A ent.dwPhysAddrLen 
        AppelDLL32("kernel32","RtlMoveMemory",&amp;in1 , &amp;ent.bPhysAddr + i1 - 1 , 1 ) 
        ch += NumériqueVersChaine(in1,"02X") 
        SI i1<ent.dwPhysAddrLen ALORS 
          ch+="-" 
        FIN 
      FIN 
    FIN 
    SAISIE1 += "Mac :  " + ch +RC 
    SAISIE1 += "Status : "+ent.dwAdminStatus + RC 
    SAISIE1 += "Operstatus : "+ent.dwOperStatus + RC 
    SAISIE1 += "LastChange : "+ent.dwLastChange + RC 
    SAISIE1 += "In octets : "+ent.dwInOctets + RC 
    SAISIE1 += "In ucast : "+ent.dwInUcastPkts + RC 
    SAISIE1 += "In NU Cast : "+ent.dwInNUcastPkts + RC 
    SAISIE1 += "In Discards : "+ent.dwInDiscards + RC 
    SAISIE1 += "In Error : "+ent.dwInErrors + RC 
    SAISIE1 += "In Unknow : "+ent.dwInUnknownProtos + RC 
    SAISIE1 += "Out Octets : "+ent.dwOutOctets + RC	
    SAISIE1 += "Out Ucast : "+ent.dwOutUcastPkts + RC 
    SAISIE1 += "Out NU Cast : "+ent.dwOutNUcastPkts + RC 
    SAISIE1 += "Out Discards : "+ent.dwOutDiscards + RC 
    SAISIE1 += "Out Errors : "+ent.dwOutErrors + RC 
    SAISIE1 += "Out Qlen : "+ent.dwOutQLen + RC 
    SAISIE1 += "Desciption : "+ent.bDescr + RC+RC 
 
    adr += diment 
  FIN 
 
  AppelDLL32("kernel32","GlobalFree",hmem) 
FIN

Etablir une connexion réseau

NET2 est compose de 
    dwScope est un entier long 
    dwType est un entier long 
    dwDisplayType est un  entier long 
    dwUsage est un entier long 
    lpLocalName est un entier long 
    lpRemoteName est un entier long 
    lpComment est un entier long 
    lpProvider est un entier long 
fin 
 
disklocal est une chaine asciiz de 32 = "R:" 
diskres est une chaine asciiz de 128 = "\Serveur_ntPartage" 
 
net2.dwType = 0x1 
net2.lpLocalName = &amp;disklocal 
net2.lpRemoteName = &amp;diskres 
net2.lpProvider = null 
//  non utilisé sous w95.98 
passw est une chaine asciiz de 64 = null 
utilisateur est une chaine asciiz de 64 = null 
//   
 
err est un entier long=appeldll32("mpr","WNetAddConnection2A", &amp;net2 , &amp;passw , &amp;utilisateur , 1) 
si err alors 
    erreur("Erreur "+err) 
fin

Nom de la machine selon son adresse IP

PROCEDURE NomMachine_Ip(adresseip est une chaîne ASCIIZ de 16="127.0.0.1") 
 
LOCAL 
 
ras est un entier = ChargeDLL("rasapi32.dll") 
ws2 est un entier = ChargeDLL("ws2_32.dll") 
 
wsdata est composé de 
    wVersion est un entier 
    wHighVersion est un entier 
    szDescription est une chaîne ASCIIZ de 257 
    szSystemStatus est une chaîne ASCIIZ de 129 
    iMaxSockets est un entier sur 2 octets 
    iMaxUdpDg est un entier sur 2 octets 
    lpVendorInfo est un entier 
FIN 
 
nommachine est une chaîne ASCIIZ de 256 
nomalias est une chaîne ASCIIZ de 256 
 
hostent est composé de 
    h_name est un entier   
    h_aliases est un entier   
    h_addrtype est un entier sur 1 octet 
    h_length est un entier sur 1 octet 
    h_addr_list est un entier   
FIN 
 
 
adr2 est un entier 
hostadr est un entier 
 
SI AppelDLL32("ws2_32.dll","WSAStartup",0x101,&amp;wsdata)=0 ALORS 
 
    adr2 = AppelDLL32("ws2_32.dll","inet_addr",adresseip) 
 
    hostadr = AppelDLL32("ws2_32.dll","gethostbyaddr",&amp;adr2,4,2) 
 
    SI PAS hostadr ALORS 
      Erreur( Erreur_Message() ) 
    SINON 
      AppelDLL32("kernel32","RtlMoveMemory",&amp;hostent,hostadr,Dimension(hostent)) 
      AppelDLL32("kernel32","RtlMoveMemory",&amp;nommachine,hostent.h_name,128) 
    FIN 
 
    AppelDLL32("ws2_32","WSACleanup") 
 
FIN 
 
DéchargeDLL(ras) 
DéchargeDLL(ws2) 
 
RENVOYER nommachine
PROCEDURE Erreur_Message() 
 
FORMAT_MESSAGE_IGNORE_INSERTS  est un entier = 0x00000200 
FORMAT_MESSAGE_FROM_SYSTEM     est un entier = 0x00001000 
message_erreur est une chaîne ASCIIZ sur 1024 
 
API( "kernel32" , "FormatMessageA" , FORMAT_MESSAGE_FROM_SYSTEM + FORMAT_MESSAGE_IGNORE_INSERTS , ... 
Null , API( "kernel32" , "GetLastError" ) , 0 , &amp;message_erreur , 1023 , Null ) 
 
RENVOYER message_erreur

Ping d'une machine

icmp est un entier   = AppelDLL32("icmp.dll","IcmpCreateFile") 
 
delaims est un entier = Ping( icmp , adip , valeurtimeout )  // ex : ping (icmp,"192.168.0.1",100) 
si delaims&lt;&gt;-1 alors 
  info("Ordinateur trouvé ! Ping de "+delaims+" ms") 
sinon 
  info("Ordinateur non connecté") 
fin 
 
AppelDLL32("icmp.dll","IcmpCloseHandle",icmp)
PROCEDURE Ping(icmp,adrip="127.0.0.1",timeout=25) 
 
ICMP_ECHO est composé de 
  ipadr est un entier   
  status est un entier   
  RoundTripTime est un entier   
  DataSize est un entier sur 2 octets 
  Reserved est un entier sur 2 octets 
  Data est un entier   
  ttl est une chaîne ASCIIZ de 2 
  tos est une chaîne ASCIIZ de 2 
  flag est une chaîne ASCIIZ de 16 
  opsize est une chaîne ASCIIZ de 2 
  opdata est un entier 
  datat est une chaîne ASCIIZ de 250 
FIN 
 
ipad est un entier   = AppelDLL32("ws2_32","inet_addr",adrip) 
cretour est un entier   
 
SI AppelDLL32("icmp.dll","IcmpSendEcho",icmp, ipad ,"Test Ping Echo", 32 , Null, &amp;ICMP_ECHO , Dimension(ICMP_ECHO)+8, timeout )&lt;&gt;0 ALORS 
  cretour = ICMP_ECHO.RoundTripTime 
SINON 
  cretour = -1 
FIN 
 
RENVOYER cretour

Disques, répertoires et fichiers

Formater le disque dur

//Capacité et Espace libre 
lpFreeBytesAvailableToCaller est un monetaire 
lpTotalNumberOfBytes est un monetaire 
lpTotalNumberOfFreeBytes est un monetaire 
 
si appeldll32("kernel32","GetDiskFreeSpaceExA" , "C:\" , &amp;lpFreeBytesAvailableToCaller , &amp;lpTotalNumberOfBytes , &amp;lpTotalNumberOfFreeBytes) 
    info("Esp. Total : " + verschaine(lpTotalNumberOfBytes*1000000,"14.fs"), "Esp. Libre : " + verschaine(lpFreeBytesAvailableToCaller*1000000,"14.fs")) 
fin 
 
//Formater un disque 
// Type : 
// 0 = Formatage rapide 
// 1 = Formatage complet 
// 2 = Copie fichiers système 
 
// Disque : 
// Commence à 0 &gt; Disquette A: 
 
type=0 
disque=0 
 
res est un entier long = AppelDll32("shell32.dll","SHFormatDrive",handle(),disque,0xffff,type) 
 
// si res = 6  OK 
// si res = -1 Erreur 
// si res = -2 Annulé 
// si res = -3 Disque non formatable

Modifier le nom de volume

disque est une chaine asciiz de 4 = "C:\" 
nomdevolume est une chaine fixe de 11="SWindows" 
 
si pas appeldll32("kernel32","SetVolumeLabelA",&amp;disque,nomdevolume) alors 
  info("Impossible de changer le nom du disque") 
fin

Informations sur le disque

//Nom du volume, Numéro de série, type de disque 
 
lpRootPathName est une chaine="C:\" 
lpVolumeNameBuffer est une chaine asciiz de 13 
nVolumeNameSize est un entier long=12 
lpVolumeSerialNumber est un entier long 
lpMaximumComponentLength est un entier long 
lpFileSystemFlags est un entier long 
lpFileSystemNameBuffer est une chaine asciiz de 32 
nFileSystemNameSize est un entier long=32 
 
si AppelDLL32("kernel32" , "GetVolumeInformationA" , lpRootPathName , &amp;lpVolumeNameBuffer , nVolumeNameSize , &amp;lpVolumeSerialNumber , &amp;lpMaximumComponentLength , &amp;lpFileSystemFlags , &amp;lpFileSystemNameBuffer , nFileSystemNameSize) alors 
    info("Nom du Volume : "+lpVolumeNameBuffer, "N° Série : "+poidsfort(lpVolumeSerialNumber)+"-"+poidsfaible(lpVolumeSerialNumber), "Type :"+lpFileSystemNameBuffer) 
fin

Attributs d'un fichier ou d'un répertoire

FILE_ATTRIBUTE_ARCHIVE = 20 
Attribut d'archivage. 
FILE_ATTRIBUTE_COMPRESSED = 800 
Un fichier résident sur un lecteur ou un répertoire compressé. 
FILE_ATTRIBUTE_DIRECTORY = 10 
Un répertoire à la place d'un fichier. 
FILE_ATTRIBUTE_HIDDEN = 2 
Attribut caché, en principe non visible par l'utilisateur. 
FILE_ATTRIBUTE_NORMAL = 80 
Enlèvement des attributs (ne peut être combiné avec d'autres attributs). 
FILE_ATTRIBUTE_READONLY = 1 
Attribut de lecture seule (protection contre l'écriture). 
FILE_ATTRIBUTE_SYSTEM = 4 
Attribut système, utilisé exclusivement par le système d'exploitation. 
 
AppelDLL32("kernel32", "GetFileAttributesA", &amp;lpFileName) 
 
Attrib est un entier long 
Attrib = AppelDLL32("kernel32", "GetFileAttributesA", "c:\temp\secret.dat") 
 
SELON Attrib 
 
CAS 1 
Info("Attribut de lecture seule") 
CAS 2 
Info("Attribut caché") 
CAS 3 
Info("Attribut de lecture seule et caché") 
// etc ...

Récupérer la taille d'un fichier ouvert

Procédure taillefic(nomfic) 
 
win32d est compose de 
    dwFileAttributes est un entier long 
    ftCreationTime1 est un entier long 
    ftCreationTime2 est un entier long 
    ftLastAccessTime1 est un entier long 
    ftLastAccessTime2 est un entier long 
    ftLastWriteTime1 est un entier long 
    ftLastWriteTime2 est un entier long 
    nFileSizeHigh est un entier long 
    nFileSizeLow est un entier long 
    dwReserved0 est un entier long 
    dwReserved1 est un entier long 
    TcFileName est une chaine asciiz de 260 
    cAlternateFileName est une chaine asciiz de 14 
fin 
 
lpfilename est une chaine asciiz de 260 = nomfic 
 
hwndf est un entier long = appeldll32("kernel32","FindFirstFileA",&amp;lpfilename,&amp;win32d) 
si hwndf&lt;&gt;-1 alors 
    appeldll32("Kernel32","FindClose",hWndf) 
    renvoyer(win32d.nFileSizeLow) 
sinon 
    renvoyer(-1) 
fin 
 
// Appel 
 
tail est un entier long = taillefic("c:\windows\win386.swp")

Ouvrir un dossier

appeldll32("shell32.dll","ShellExecuteA",null,null,"c:Nom du Répertoire\",null,null,1)

ou

appeldll32("shell32.dll","ShellExecuteA",null,"explore","c:Nom du Répertoire\",null,null,1)

Supprimer un répertoire ou le copier vers un autre

SHFILEOP est compose de 
    hwnd est un entier long 
    wFunc est un entier long 
    pFrom est un entier long 
    pTo est un entier long 
    fFlags est un entier long 
    fAnyOperationsAborted est un booleen 
    hNameMappings est entier long 
    lpszProgressTitle est entier long 
fin 
 
// copie du Dossier1 et ses sous-dossiers dans le Dossier2 
src est une chaine asciiz de 128 = "c:\WebDossier1" 
dest est une chaine asciiz de 128 = "c:\WebDossier2" 
 
SHFILEOP.hwnd = null 
SHFILEOP.wFunc = 2   //1 pour déplacer les fichiers 
SHFILEOP.pFrom = &amp;src 
SHFILEOP.pTo = &amp;dest 
SHFILEOP.fFlags = 0   // 0x10 pas de boite de dialogue 
SHFILEOP.fAnyOperationsAborted = null 
SHFILEOP.hNameMappings = null 
SHFILEOP.lpszProgressTitle = null 
 
appeldll32( "shell32.dll" , "SHFileOperation" , &amp;shfileop )
// Pour supprimer un répertoire et son contenu, même chose sauf : 
//  - Le src = "c:\WebDossier1" pour supprimer le rép. ou = "c:\MonDossier1\*.*" pour laisser le rép. 
//  - Le dest n'est plus nécessaire 
//  - SHFILEOP.pTo est donc à null 
//  - SHFILEOP.wFunc = 3

Afficher la boite de propriéte Windows pour un fichier

SHELLEXECUTEINFO is structure 
  cbSize is int 
  fMask is int 
  hWnd is int 
  lpVerb is int 
  lpFile is int 
  lpParameters is int 
  lpDirectory is int 
  nShow is int 
  hInstApp is int 
  lpIDList is int 
  lpClass is int 
  hkeyClass is int 
  dwHotKey is int 
  hIcon is int 
  hProcess is int 
END 
 
sei is SHELLEXECUTEINFO 
szVerb is ASCIIZ string on 260 
szFile is ASCIIZ string on 260 
 
szVerb="properties" 
szFile="C:\MyMap\MyFile.ext" 
 
sei:cbSize=Dimension(sei) 
sei:fMask=0x44c 
sei:lpVerb=&amp;szVerb 
sei:lpFile=&amp;szFile 
 
API("shell32","ShellExecuteEx", &amp;sei)

Champs

Largeur des barres de défilement

rect est composé de 
    l est un entier long 
    t est un entier long 
    r est un entier long 
    b est un entier long 
fin 
x,y,x1,y1 sont des entiers longs 
 
// position approximative de la barre de défilement horizontale de la table1 
pos est un entier = table1..ligne + table1..hauteur + fenintposv(fenenexecution())
 
// énum des différents scrollbar de la fenêtre 
hwnd est un entier = appeldll32("user32","FindWindowExA", handle( fenenexecution() ), null , "Scrollbar" , null ) 
tantque hwnd 
 
    // coordonnées (écran) de la barre de défilement trouvée 
    appeldll32("user32","GetWindowRect",hwnd,&amp;rect) 
 
    // test si position correspond au bas de la table1 
    // 0 et 25 selon style de table 
    si (pos-rect.t&gt;=0) et (pos-rect.t&lt;=25) alors
      x = rect.l - fenintposh() // coordonnées client pour setwindowpos
      y = rect.t - fenintposv()
      x1 = table1..largeur
      y1 = 30 // nouvelle hauteur pour la barre horizontale
 
       appeldll32("user32","SetWindowPos",hwnd,0,x,y,x1,y1,0)
       sortir
    fin
 
    hwnd = appeldll32("user32","FindWindowExA", handle( fenenexecution() ), hwnd , "ScrollBar", null)
 
fin

Couleur de la barre de défilement

// les différentes constantes 
COLOR_SCROLLBAR est un entier long = 0 
COLOR_BACKGROUND est un entier long = 1 
COLOR_ACTIVECAPTION est un entier long = 2 
COLOR_INACTIVECAPTION est un entier long = 3 
COLOR_MENU est un entier long = 4 
COLOR_WINDOW est un entier long = 5 
COLOR_WINDOWFRAME est un entier long = 6 
COLOR_MENUTEXT est un entier long = 7 
COLOR_WINDOWTEXT est un entier long = 8 
COLOR_CAPTIONTEXT est un entier long = 9 
COLOR_ACTIVEBORDER est un entier long = 10 
COLOR_INACTIVEBORDER est un entier long = 11 
COLOR_APPWORKSPACE est un entier long = 12 
COLOR_HIGHLIGHT est un entier long = 13 
COLOR_HIGHLIGHTTEXT est un entier long = 14 
COLOR_BTNFACE est un entier long = 15 
COLOR_BTNSHADOW est un entier long = 16 
COLOR_GRAYTEXT est un entier long = 17 
COLOR_BTNTEXT est un entier long = 18 
COLOR_INACTIVECAPTIONTEXT est un entier long = 19 
COLOR_BTNHIGHLIGHT est un entier long = 20 
 
COLOR_3DDKSHADOW est un entier long = 21 
COLOR_3DLIGHT est un entier long = 22 
COLOR_INFOTEXT est un entier long = 23 
COLOR_INFOBK est un entier long = 24 
 
COLOR_DESKTOP est un entier long = COLOR_BACKGROUND 
COLOR_3DFACE est un entier long = COLOR_BTNFACE 
COLOR_3DSHADOW est un entier long = COLOR_BTNSHADOW 
COLOR_3DHIGHLIGHT est un entier long = COLOR_BTNHIGHLIGHT 
COLOR_3DHILIGHT est un entier long = COLOR_BTNHIGHLIGHT 
COLOR_BTNHILIGHT est un entier long = COLOR_BTNHIGHLIGHT
 
nbelement est un tableau de 25 entiers long 
couleursys est un tableau de 25 entiers long  // utilisé pour les 
changements 
couleursyssauv est un tableau de 25 entiers long // utilisé pour la 
restauration
 
// ini et sauv des couleurs système 
ind est un entier 
pour ind=1 a 25 
nbelement[ind]=ind-1 
couleursys[ind]=appeldll32("user32","GetSysColor",ind-1) 
couleursyssauv[ind]=couleursys[ind] 
fin 
 
// modification d'un ou plusieurs éléments 
couleursys[COLOR_3DFACE+1]=icourleurquetuveux 
couleursys[COLOR_SCROLLBAR+1]=icourleurquetuveux 
appeldll32("user32","SetSysColors",25,&amp;nbelement,&amp;couleursys) 
 
// restauration 
appeldll32("user32","SetSysColors",25,&amp;nbelement,&amp;couleursyssauv)

Champ texte : déterminer la première ligne visible

em_getfirstvisibleline est un entier long = 0xCE 
nb est un entier long=sendmessage(handle("saisie1"), em_getfirstvisibleline , 0 , 0 ) 
info(nb)

Champ texte : déterminer le nombre de lignes

em_getlinecount est un entier long = 0xBA 
nb est un entier long = sendmessage(handle("saisie1"), em_getlinecount , 0 , 0 ) 
info("Ce champ a "nb+" ligne(s)")

Champ texte : modifier le caractère affiché à la place des mots de passe

em_setpasswordchar est un entier long = 0xCC
// on remplace le * par X 
sendmessage(handle("saisie1"), em_setpasswordchar , asc("X") , 0 ) 
 
// Enlever le style password ******* 
sendmessage(handle("saisie1"), em_setpasswordchar , 0 , 0 )

Champ texte : faire défiler le champ

em_scroll est un entier long = 0xB5 
 
// les différentes possibilités 
sb_lineup est un entier = 0 
sb_linedown est un entier = 1 
sb_pageup est un entier = 2 
sb_pagedown est un entier = 3 
 
sendmessage(handle("saisie1"), em_scroll , sb_linedown , 0 )

Champ texte : mettre le champ en lecture seul

em_setreadonly = 0xCF 
sendmessage(handle("saisie1"), em_setreadonly , 1 , 0 )

Champ texte : mettre le champ en saisie

em_setreadonly = 0xCF
sendmessage(handle("saisie1"), em_setreadonly , 0 , 0 )

Champ texte : modifier la position des tabulations

em_settabstops est un entier long= 0xCB 
tabstop est un entier long=3 // nb de tabulations 
stoptab est un tableau de 3 entiers long 
stoptab[1]=50 
stoptab[2]=80 
stoptab[3]=100 
sendmessage(handle("saisie1"), em_settabstops , tabstop , &amp;stoptab )

Champ texte : modifier la sélection

em_setsel est un entier long= 0xB1 
// sélection du caractère 5 à 20 
sendmessage(handle("saisie1"), em_setsel , 5 , 20 )

Champ texte : sélection du champ en entier

em_setsel est un entier long= 0xB1
sendmessage(handle("saisie1"), em_setsel , 0 , -1 )

Champ texte : récupérer le nombre de caractères max

em_getlimittext est un entier long = 0xD5 
nb est un entier long=sendmessage(handle("saisie1"), em_getlimittext , 0 , 0 ) 
Info("La limite est de : "+nb))

Champ texte : modifier le nombre de caractères max

em_setlimittext est un entier long = 0xC5 
 
// limite à 15 caractères 
sendmessage(handle("saisie1"), em_setlimittext , 15 , 0 )

Champ texte : modifier le style

gw_style est un entier long=-16 
gw_exstyle est un entier long=-20 
es_uppercase est un entier long = 0X8 // saisie uniquement en majuscules 
es_lowercase est un entier long = 0X10 // minuscules 
es_number est un entier long = 0x2000 // que des chiffres 
 
appeldll32("user32","GetWindowLongA", handle("saisie1") , gw_style ) 
 
sty est un entier long=oubinaire(res,ES_UPPERCASE) // pour les majuscules 
 
appeldll32("user32","SetWindowLongA", handle("saisie1") , gw_style , sty )

Champ texte : récupérer les caractères sélectionnés

em_getsel est un entier long= 0xB0 
sel est un entier long=sendmessage(handle("saisie1"), em_getsel , 0 , 0 ) 
info("La sélection va du caractère "+poidsfaible(sel)+" à "+poidsfort(sel))

Champ texte : récupérer les marges

em_getmargins est un entier long= 0xD4 
marge est un entier long=sendmessage(handle("saisie1"), em_getmargins , 0 , 0 ) 
info("La marge gauche est de "+poidsfaible(nb)+", celle de droite "+poidsfort(nb))

Champ texte : récupérer les marges

em_setmargins est un entier long = 0xD3 
mar est un entier long 
mg, md sont des entiers 
mg=100 // nouvelle marge gauche 
md=20 // nouvelle marge droite 
 
transfert(&amp;mar,&amp;mg,2) 
transfert(&amp;mar+2,&amp;md,2) 
 
sendmessage(handle("saisie1"), em_setmargins , 0x3 , mar )

Combo : afficher le dropdown

cb_showdropdown est un entier long = 0x14F 
sendmessage( handle("combo1") , cb_showdropdown , 1 , 0 )

Combo : afficher une liste de fichiers

// Combo non graphique 
cb_dir est un entier long = 0x0145 
cb_resetcontent est un entier long = 0x014B 
DDL_READWRITE est un entier long = 0x0000 
DDL_READONLY est un entier long = 0x0001 
DDL_HIDDEN est un entier long = 0x0002 
DDL_SYSTEM est un entier long = 0x0004 
DDL_DIRECTORY est un entier long = 0x0010 
DDL_ARCHIVE est un entier long = 0x0020 
DDL_POSTMSGS est un entier long = 0x2000 
DDL_DRIVES est un entier long = 0x4000 
DDL_EXCLUSIVE est un entier long = 0x8000 
 
ch est un chaine asciiz de 128="c:windowssystem*.dll" 
 
sendmessage( handle("combo1") , cb_resetcontent , 0 , 0 ) 
 
listeajoute("COMBO1","") 
 
nbfic est un entier = sendmessage( handle("combo1") , cb_dir , ddl_archive+ddl_hidden , &amp;ch) 
 
listesupprime("COMBO1",1) 
 
info("Il y a "+nbfic+" fichiers *.dll dans ce répertoire")

Combo : ajouter une chaine de caractères

// Combo non graphique 
ch est un chaine asciiz de 128="Chaine à ajouter !!" 
cb_addstring est un entier long = 0x143 
sendmessage( handle("combo1") , cb_addstring , 0 , &amp;ch)

Combo : création d'un combo

// styles fenêtre 
ws_child est un entier long = 0x40000000 
ws_border est un entier long = 0x00800000 
ws_visible est un entier long = 0x10000000 
ws_thickframe est un entier long = 0x00040000 
ws_vscroll est un entier long = 0x00200000 
// styles combo 
cbs_simple est un entier long = 0x1 
cbs_dropdown est un entier long = 0x2 
cbs_dropdownlist est un entier long = 0x3 
cbs_ownerdrawfixed est un entier long = 0x10 
cbs_autohscroll est un entier long = 0x40 
cbs_sort est un entier long = 0x100 
cbs_hasstrings est un entier long = 0x200 
cbs_uppercase est un entier long = 0x2000 
cbs_lowercase est un entier long = 0x4000 
 
style est un entier long = ws_child + ws_visible + ws_border + ws_vscroll + cbs_hasstrings + cbs_autohscroll + cbs_dropdownlist 
style += cbs_uppercase 
 
hwndcombo=AppelDLL32("user32","CreateWindowExA",0 ,"COMBOBOX","", style , 200 , 300 , 200 , 15*18 , handle() , null , instance() , NULL ) 
 
cb_setdroppedwidth est un entier long = 0x160 
cb_setitemheight est un entier long = 0x153 
sendmessage( hwndcombo , cb_setdroppedwidth , 300 , 0 ) 
sendmessage( hwndcombo , cb_setitemheight , 0 , 18 ) 
 
ind est un entier 
ch est une chaine asciiz de 128 
cb_addstring est un entier long = 0x143 
 
pour ind=1 a 100 
    ch="Chaine de Caractères "+ind 
    sendmessage( hwndcombo , cb_addstring , 0 , &amp;ch ) 
fin

Combo : déterminer la hauteur des lignes

cb_getitemheight est un entier long = 0x154 
hautv est un entier = sendmessage( handle("combo1") , cb_getitemheight , -1 , 0 ) // partie visible 
hautd est un entier = sendmessage( handle("combo1") , cb_getitemheight , 0 , 0 ) // dropdown 
message(hautv+" "+hautd)

Combo : déterminer la largeur du dropdown

cb_getdroppedwidth est un entier long = 0x15F 
largdropd est un entier = sendmessage( handle("combo1") , cb_getdroppedwidth , 0 , 0 ) 
message(largdropd)

Combo : déterminer le nombre d'items

cb_getcount est un entier long = 0x146 
nbitems est un entier = sendmessage( handle("combo1") , cb_getcount , 0 , 0 ) 
info("Nombre d'items : "+nbitems)

Combo : modifier la hauteur des lignes

cb_setitemheight est un entier long = 0x153 
sendmessage( handle("combo1") , cb_setitemheight , -1 , 30 ) // partie visible 30 pixels 
sendmessage( handle("combo1") , cb_setitemheight , 0 , 25 ) // dropdown 25 pixels

Combo : modifier la largeur du dropdown sur la ligne la plus large

largeurcombo est un entier 
ind est un entier 
cb_setdroppedwidth est un entier long = 0x160 
pour ind=1 a combo1..occurrence 
    si textelargeur("COMBO1",combo1[ind])&gt;largeurcombo alors 
        largeurcombo=textelargeur("COMBO1",combo1[ind]) 
    fin 
fin 
sendmessage( handle("combo1"), cb_setdroppedwidth , largeurcombo+15 , 0 )

Combo : récupérer l'item survolé
Dans l’initialisation de la fenêtre :

ancien_item est un entier long // pour l'item précédent 
even est un entier long = evenement( "survolcombo" , "combo1" , 0x134 )
Procédure survolcombo() 
item est un entier long = sendmessage( handle("combo1") , 0x0147 , 0 , 0 ) + 1 
si ancien_item&lt;&gt;item alors 
    message(item+"  "+combo1[item]) 
    ancien_item = item 
fin

Combo : sélectionner une ligne d'après son contenu

// Combo non graphique 
cb_selectstring est un entier long = 0x14D 
ch est un chaine asciiz de 128="Texte dans Combo" 
 
// -1 pour rechercher du début à la fin 
// n pour rechercher à partir du n ème élément 
// res contient la ligne sélectionnée 
res est un entier long = sendmessage( handle("combo1") , cb_selectstring , -1 , &amp;ch ) 
message(res)

Combo : sélectionner une ligne d'après son indice

cb_setcursel est un entier long = 0x14E 
// sélection de la ligne 5 
sendmessage( handle("combo1") , cb_setcursel , 5 , 0 )

Combo : supprimer l'item sélectionné

cb_getcursel est un entier long = 0x147 
cb_deletestring est un entier long = 0x144 
sel est un entier = sendmessage( handle("combo1") , cb_getcursel , 0 , 0 ) 
sendmessage( handle("combo1") , cb_deletestring , sel , 0 )

Combo : supprimer tout le contenu

cb_getcount est un entier long = 0x14B 
sendmessage( handle("combo1") , cb_resetcontent , 0 , 0 )

Champ table : Supprimer l'ascenseur horizontal

//Pour supprimer l'ascenseur horizontal d'une table. 
 
// Appel de la procédure :   
 
supascenseurh("nom de la table","nom de la fenêtre") 
 
// La procédure : 
 
Procédure supascenseurh(tb,fen) 
 
rect est compose de 
    l est un entier long // left 
    t est un entier long // top 
    r est un entier long // right 
    b est un entier long // bottom 
fin 
classname est une chaine asciiz de 128 
pos est un entier 
indice est un entier 
 
hwnd est un entier long=AppelDll32("User32", "GetWindow", handle(fen), 5) 
tantque hwnd &lt;&gt; 0 
 
    appeldll32("user32","GetClassNameA",hWnd,&amp;classname,128) 
    si sansespace(classname)="ScrollBar" alors 
        appeldll32("user32","GetWindowRect",hwnd,&amp;rect) 
        pos={tb}..ligne+{tb}..hauteur+{fen}..ligne 
        // test si position y correspond au bas de la table 
        // le - varie en fonction du style de la table 
        si (rect.b-23=pos) ou (rect.b-19=pos) alors 
            appeldll32("user32","ShowWindow",hwnd,0) 
            indice++ 
        fin 
    fin 
 
    // le champ static correspond au champ d'affichage de la table 
    si sansespace(classname)="Static" alors 
        appeldll32("user32","GetWindowRect",hwnd,&amp;rect) 
        pos={tb}..colonne+{fen}..colonne 
        // si le champ static correspond à celui de la table 
        // on le redimensionne pour occupé la place de l'ascenseur supprimé 
        // ce qui réduit les problèmes d'affichage 
        si rect.l-4=pos alors 
            appeldll32("user32","ShowWindow",hwnd,0) 
            appeldll32("user32","SetWindowPos",hwnd,0,{tb}..colonne,{tb}..ligne,{tb}..largeur,{tb}..hauteur+23,0) 
            appeldll32("user32","ShowWindow",hwnd,1) 
            indice++ 
        fin 
    fin 
 
    // modif effectuées, on peut sortir 
    si indice=2 alors sortir 
 
    hwnd=AppelDll32("User32", "GetWindow", hwnd , 2) 
 
fin

Champ table : savoir si le menu contextuel est utilisé
Dans l’initialisation de la fenêtre

evenementtable est un entier long

Dans Entré dans table

evenementtable =evenement("verifmenutable","nom de la table",1530)

Dans Sortie de table

finevenement(evenementtable)
procédure verifmenutable() 
 
selon _eve.wParam 
    cas 1 : message("Click sur couper pour la ligne "+_EVE.lParam) 
    cas 2 : message("Click sur copier pour la ligne "+_EVE.lParam) 
    cas 3 : message("Click sur coller pour la ligne "+_EVE.lParam) 
    cas 4 : message("Click sur insérer &amp; coller pour la ligne "+_EVE.lParam) 
    cas 5 : message("Click sur supprimer pour la ligne "+_EVE.lParam) 
fin

Combo pour choisir une date et une heure

Procédure datetime(datetr, px, py, larg, haut) 
 
ICC_DATE_CLASSES est un entier long = 0x00000100 
initcont est compose de 
    size est un entier long 
    typec est un entier long 
fin 
initcont.size=8 
initcont.typec=ICC_DATE_CLASSES 
 
si pas appeldll32("comctl32.dll","InitCommonControlsEx",&amp;initcont) alors ferme() 
 
dts_longdateformat est un entier long = 0x4 
style est un entier long= 0x50000000 + dts_longdateformat 
 
hwndw=AppelDLL32("user32","CreateWindowExA",0 ,"SysDateTimePick32","", style, px, py, larg, haut, handle(), null, instance(), NULL) 
 
dtm_first est un entier long = 0x1000 
systemtime.wyear=val(datetr[[a 4]]) 
systemtime.wmonth=val(datetr[[5 a 6]]) 
systemtime.wday=val(datetr[[7 a 8]]) 
sendmessage(hwndw,0x1000+2,0,&amp;systemtime) // mcm_first (0x1000) + mcm_setsystemtime (0x2)

A l’ouverture de la fenêtre :

global 
 
hwndw est un entier long 
systemtime est compose de 
    wYear est un entier 
    wMonth est un entier 
    wDayOfWeek est un entier 
    wDay est un entier 
    wHour est un entier 
    wMinute est un entier 
    wSecond est un entier 
    wMilliseconds est un entier 
fin 
 
datetime(datesys(),50,20,175,22) 
si pas hwndw alors 
    erreur("Création Calendrier Impossible") 
fin

A la fermeture de la fenêtre :

appeldll32("user32","DestroyWindow",hwndw)

Pour récupérer la date :

sendmessage(hwndw,0x1000+1,0,&amp;systemtime) 
info(systemtime.wday+"/"+systemtime.wmonth+"/"+systemtime.wyear)

Si vous voulez limiter la sélection de date à une période donnée :

systt est compose de 
    wYear est un entier 
    wMonth est un entier 
    wDayOfWeek est un entier 
    wDay est un entier 
    wHour est un entier   
    wMinute est un entier 
    wSecond est un entier 
    wMilliseconds est un entier 
    xYear est un entier 
    xMonth est un entier 
    xDayOfWeek est un entier 
    xDay est un entier 
    xHour est un entier 
    xMinute est un entier 
    xSecond est un entier 
    xMilliseconds est un entier   
fin 
 
// limite : année 2001 
systt.wyear=2001 
systt.wmonth=01 
systt.wday=01 
systt.xyear=2001 
systt.xmonth=12 
systt.xday=31 
sendmessage(hwndw,0x1000+4,3,&amp;systt)

Champ RTF : récupérer le zoom

numerator est un entier 
denominator est un entier 
SendMessage( Handle(ton champ rtf) , 0x4E0 , &amp;numerator , &amp;denominator) 
trace(numerator,denominator)

Champ RTF : modifier le zoom

// affichage 50% 
numerator est un entier = 1 
denominator est un entier = 2 
SendMessage( Handle(ton champ rtf) , 0x4E1 , numerator , denominator)

Table : Synchroniser l'ascenseur horizontal

Synchroniser l’ascenseur horizontal d’une table2 avec les déplacements de la table1. Dans l’initialisation de la fenêtre

Global 
 
scrollbarh1 est un entier long = trouvescrollbarh("table1",fenenexecution()) 
si pas scrollbarh1 alors 
    info("Impossible de trouver le scrollbar 1") 
fin 
scrollbarh2 est un entier long = trouvescrollbarh("table2",fenenexecution()) 
si pas scrollbarh2 alors 
    info("Impossible de trouver le scrollbar 2") 
fin 
 
ev2 est un entier long = evenement("scrolltable",FenEnExécution(),0x114)

Dans la fermeture de la fenêtre

Finevenement(ev2)
Procédure trouvescrollbarh(nomtable,nomfenetre) 
 
rect est compose de 
    l est un entier long // left 
    t est un entier long // top 
    r est un entier long // right 
    b est un entier long // bottom 
fin 
 
pos est un entier 
style est un entier long 
 
hwnd est un entier long = appeldll32("user32","FindWindowExA",handle(nomfenetre),null,"ScrollBar",null) 
tantque hwnd &lt;&gt; 0 
 
    style = appeldll32("user32","GetWindowLongA",hwnd,-16)	
    si pas etbinaire(style,0x1) alors 
 
        appeldll32("user32","GetWindowRect",hwnd,&amp;rect) 
        pos={nomtable}..ligne+{nomtable}..hauteur+{nomfenetre}..ligne 
 
        // test si position y correspond au bas de la table 
        // peut varier en fonction du style de la table 
        si (rect.t-pos&gt;=0) et (rect.t-pos&lt;=25) alors 
            renvoyer hwnd 
        fin 
    fin 
 
    hwnd=appeldll32("user32","FindWindowExA",handle(nomfenetre),hwnd,"ScrollBar",null) 
 
fin
Procédure scrolltable() 
 
si _EVE.lParam = scrollbarh1 alors 
    sendmessage(_EVE.hWnd , _EVE.wMessage ,_EVE.wParam , scrollbarh2 ) 
FIN

Récupérer les différents répertoires de windows

buff est une chaine asciiz de 260 
ind est un entier 
 
pour ind = 0 a 34 
    si appeldll32("shell32","SHGetSpecialFolderPathA",null,&amp;buff,ind,0) alors 
       //on ajoute le tout dans la liste 'liste1'   
       listeajoute("LISTE1",ind + " " + buff) 
    fin 
fin

Champ Static
Dans l’exemple suivant, le libellé est affiché à l’extérieur de la fenêtre en mode topmost avec un cadre.

ss_left est un entier = 0 
ss_center est un entier = 1 
ss_right est un entier = 2 
ws_visible est un entier long = 0x10000000 
ws_child est un entier long = 0x40000000 
ws_border est un entier long = 0x800000 
ws_popup est un entier long = 0x80000000 
ws_thickframe est un entier long = 0x40000 
ws_ex_topmost est un entier long = 0x8 
 
style est un entier long = ws_child + ws_visible + ws_border + ws_popup + ws_thickframe 
 
hwndw=AppelDLL32("user32","CreateWindowExA", ws_ex_topmost , "STATIC" , "" , style , {fenencours()}..colonne , {fenencours()}..ligne-50 , {fenencours()}..largeur , 40 , handle() , null , instance() , NULL ) 
multitache() 
 
appeldll32("user32","SetWindowTextA",hwndw,"Texte à gauche"+rc+tab+"Ligne 2") 
multitache(-200) 
 
appeldll32("user32","SetWindowLongA",hwndw,-16,style+ss_center) 
appeldll32("user32","SetWindowTextA",hwndw,"Texte centrer") 
multitache(-200) 
 
appeldll32("user32","SetWindowLongA",hwndw,-16,style+ss_right) 
appeldll32("user32","SetWindowTextA",hwndw,"Texte à droite") 
multitache(-300) 
 
appeldll32("user32","DestroyWindow",hwndw)

Modifier la couleur de fond des champs static. Code d’ouverture de la fenêtre F_Static

global 
erasebkgnd est un entier long = evenement("colorstatic",".*",0x14) 
F_Static..etat=invisible 
F_Static..etat=actif

Fermeture de la fenêtre F_Static

finevenement(erasebkgnd)
Procédure colorstatic() 
 
classname est une chaine asciiz de 128 
appeldll32("user32","GetClassNameA",_EVE.hWnd , &amp;classname,128) 
si classname = "Static" alors 
 
    // vous pouvez tester içi si _eve.nom = au(x) libellé(s) que vous voulez 
    // car tous les champs 'static' sont concernés... 
 
    rect est compose de 
        l est un entier long 
        t est un entier long 
        r est un entier long 
        b est un entier long 
    fin 
 
    rect.l = 0 
    rect.t = 0 
    rect.r = {_EVE.Nom}..largeur 
    rect.b = {_EVE.Nom}..hauteur 
 
    fondstatic est un entier long = appeldll32("gdi32","CreateSolidBrush", ijauneclair ) 
    appeldll32("user32","FillRect", _eve.wparam , &amp;rect , fondstatic ) 
    appeldll32("gdi32","DeleteObject", fondstatic ) 
    _eve.retour = 1 
 
fin

Récuperation ligne par ligne dans champ de saisie multiligne (Peter V)

CONSTANT 
  EM_GETLINECOUNT = 0xBA 
  EM_LINEINDEX = 0xBB 
  EM_LINELENGTH = 0xC1 
  EM_GETLINE = 0xC4 
END 
 
//Get number of lines &gt; edit1 = multiline_edit_control 
lngLineCount is int 
lngLineCount = SendMessage(Handle(Edit1), EM_GETLINECOUNT, 0, 0) 
 
lngRetValue is int 
lngLineNumber is int 
lngIndexChar is int 
intLineLength is int on 2 bytes 
strLine is ASCIIZ string on 128 
 
lngLineNumber = x //must be &lt;= lngLineCount 
lngLineNumber = lngLineNumber - 1 
 
lngIndexChar = SendMessage(Handle(Edit1), EM_LINEINDEX, lngLineNumber, 0) 
intLineLength = SendMessage(Handle(Edit1), EM_LINELENGTH, lngIndexChar, 0) 
strLine=Complete(Charact(LoWord(intLineLength))+Charact(HiWord(intLineLength)),intLineLength) 
lngRetValue = SendMessage(Handle(Edit1), EM_GETLINE, lngLineNumber,  &amp;strLine) 
 
Info(strLine)

Liste : liste de fichiers

// liste non graphique 
 
ch est un chaine asciiz de 128="c:windowssystem*.dll" 
lb_resetcontent est un entier long = 0x184 
lb_dir est un entier long= 0x18D 
 
sendmessage( handle("liste1") , lb_resetcontent , 0 , 0 ) 
 
listeajoute("liste1","") 
 
// voir l'exemple de la combo pour les option ddl_* 
nbfic est un entier = sendmessage( handle("liste1") , lb_dir , ddl_archive+ddl_hidden , &amp;ch) 
listesupprime("liste1",1) 
message(nbfic)

Liste : modifier la hauteur de ligne

lb_setitemheight est un entier long = 0x1A0 
liste1..etat=invisible 
// hauteur de ligne fixée à 25 pixels 
sendmessage( handle("liste1") , lb_setitemheight , 0 , 25 ) 
liste1..etat=actif

Liste : modifier la largeur des colonnes (liste multi-colonnes)

lb_setcolumnwidth est un entier long = 0x195 
largc est un entier = 200 // largeur colonne en pixels 
sendmessage( handle("liste1") , lb_setcolumnwidth , largc , 0 )

Liste : modifier le premier item visible

lb_settopindex est un entier long = 0x197 
// place l'item 3 en haut de la liste 
sendmessage( handle("liste1") , lb_settopindex , 3 , 0 )

Liste : mofifier le style

// permet de modifier les dimensions de la liste en cliquant sur les bordures 
 
style1 est un entier long 
style2 est un entier long 
gw_style est un entier long=-16 
gw_exstyle est un entier long=-20 
ws_border est un entier long = 0x800000 
ws_thickframe est un entier long = 0x40000 
 
style1=appeldll32("user32","GetWindowLongA", handle("liste1") , gw_style ) 
 
liste1..etat=invisible 
style2 = oubinaire( style1 , ws_thickframe ) 
appeldll32("user32","SetWindowLongA", handle("liste1") , gw_style , style2 ) 
liste1..etat=actif

Liste : obtenir la hauteur de ligne

lb_getitemheight est un entier long = 0x1A1 
hautl est un entier = sendmessage( handle("liste1") , lb_getitemheight , 0 , 0 ) 
message(hautl)

Liste : récupérer le nombre d'item

lb_getselcount est un entier long = 0x190 
nbfic est un entier = sendmessage( handle("liste1") , lb_getselcount , 0 , 0 ) 
message(nbfic)

Liste : récupérer le premier item visible

lb_gettopindex est un entier long = 0x18E 
topind est un entier = sendmessage( handle("liste1") , lb_gettopindex , 0 , 0 ) 
message(topind)

Liste : récupérer les coordonnées d'un item

rectl est compose de 
    l est un entier long 
    t est un entier long 
    r est un entier long 
    b est un entier long 
fin 
lb_getitemrect est un entier long = 0x198 
item est un entier = 2 // base 0 
sendmessage( handle("liste1") , lb_getitemrect , item , &amp;rectl ) 
message(rectl.l+" "+rectl.t+" "+rectl.r+" "+rectl.b)

Liste : récupérer l'item survolé

// 0x200 -&gt; mousemouve 
even est un entier long = evenement( "survolliste" , "liste1" , 0x200 )
Procédure survolliste() 
 
// 0x01A9 -&gt; LB_ITEMFROMPOINT 
// _eve.lparam contient la position de la souris 
 
item est un entier long = sendmessage( handle("liste1") , 0x01A9 , 0 , _eve.lparam ) + 1 
message(item)

Liste : sélectionner un item

lb_setcursel est un entier long = 0x186 
// sélection de l'item 3 
sendmessage( handle("liste1") , lb_setcursel , 3 , 0 )

Liste : supprimer tout le contenu

lb_resetcontent est un entier long = 0x184 
sendmessage( handle("liste1") , lb_resetcontent , 0 , 0 )

Ajuster automatiquement les colonnes d'une table

x est un entier sur 2 octets = FenIntPosX(FenEnExecution) + Table1..X + Table1.Colonne2..X + 2 
y est un entier sur 2 octets = FenIntPosY(FenEnExecution) + Table1..Y + Table1.Colonne2..Y + 2 
pos est un entier 
Transfert(&amp;pos,&amp;x,2) 
Transfert(&amp;pos+2,&amp;y,2) 
SendMessage(handle(Table1),0xA3,18,pos)

Cela correspond au dbclick sur la ligne de séparation des colonnes dans l’entête de la table, ici sur la première séparation (colonne 2)

Variables

Manipuler un tableau dans sa totalité
Pour mettre à zéro toutes les zones d’une variable tableau :

//  
// - un tableau d'entiers longs 
appeldll32("kernel32","RtlZeroMemory",&amp;montableau,dimension(montableau)*4) 
 
// - un tableau de réels doubles 
appeldll32("kernel32","RtlZeroMemory",&amp;montableau,dimension(montableau)*8) 
 
// - un tableau de 30 chaines fixes de 100 caractères 
appeldll32("kernel32","RtlZeroMemory",&amp;montableau,dimension(montableau)*100) 
 
// Pour copier un tableau dans un autre : 
// - par ex. on veut copier le tableau tab1 (300 réels doubles) vers le tableau tab2 (dimension supérieure ou égale à tab1) 
 
appeldll32("kernel32","RtlMoveMemory",&amp;tab2,&amp;tab1,dimension(tab1)*8)

Cela fonctionne également pour les tableaux à x dimensions, sur les variables composées, sur les structures et sur les classes…

Clavier

Sélection de la langue du clavier

A l'init du projet : 
 
hklnormal est un entier long = appeldll32("user32","GetKeyboardLayout",null) 
 
// "00000409" pour clavier américain 
hklnouveau est un entier long = appeldll32("user32","LoadKeyboardLayoutA","00000409",0x1) 
 
A la fermeture 
 
appeldll32("user32","ActivateKeyboardLayout",hklnormal,0x1) 
appeldll32("user32","UnloadKeyboardLayout",hklnouveau) 
 
 
Tu pourras retrouver les différentes valeurs de hkl dans la base de registre. 
HKLM-&gt;System-&gt;CurrentControlSet-&gt;Control-&gt;keyboard layouts 
 
Les fichier *.kbd mentionnés dans ces layouts doivent être installés sur la machine.

Obtenir la vitesse de répétition d'une touche

//0 pour la vitesse minimale ( ~= 2.50 répétitions par seconde ) 
//31 pour la vitesse maximale ( ~= 30 répétition par seconde )
SPI_GETKEYBOARDSPEED est un entier = 10  
vitesse est un entier 
appeldll32("user32","SystemParametersInfoA",SPI_GETKEYBOARDSPEED,0,&amp;vitesse,0) 
info("La vitesse actuelle est fixée a : "+vitesse)

Modifier la vitesse de répétition d'une touche

SPI_SETKEYBOARDSPEED est un entier = 11
vitesse = 31 
appeldll32("user32","SystemParametersInfoA",SPI_SETKEYBOARDSPEED,vitesse,0,0)

Obtenir le délai avant répétition d'une touche

// 0 pour le délai minimal ( ~= 250 ms ) 
// 3 pour le délai maximal ( ~= 1 seconde )
SPI_GETKEYBOARDDELAY est un entier = 22
delay est un entier 
appeldll32("user32","SystemParametersInfoA",SPI_GETKEYBOARDDELAY,0,&amp;delay,0) 
info("Le délai actuel est fixé a : "+delay)

Modifier le délai avant répétition d'une touche

SPI_SETKEYBOARDDELAY est un entier = 23delay = 1 
appeldll32("user32","SystemParametersInfoA",SPI_SETKEYBOARDDELAY,delay,0,0)

Son, multimédia

Détecter si il y en a une d'installée

waveout est une structure 
    wMid est un entier 
    wPid est un entier 
    vDriverVersion est un entier long 
    szPname est une chaine asciiz de 32 
    dwFormats est un entier long 
    wChannels est un entier 
    wReserved1 est un entier 
    dwSupport est un entier long 
fin 
 
wave1 est un waveout 
nbc est un entier long=appeldll32("winmm.dll","waveOutGetNumDevs") 
 
volume est un entier long 
ind est un entier 
pour ind=1 a nbc 
    appeldll32("winmm.dll","waveOutGetDevCapsA",ind-1,&amp;wave1,dimension(wave1)) 
    appeldll32("winmm.dll","waveOutGetVolume",0,&amp;volume) 
    info("Nom : "+wave1:szpname,"Driver : " +wave1:vDriverVersion,"Support : " +wave1:dwSupport,"volume out"+poidsfort(volume)+ "/" +poidsfaible(volume)) 
fin

Jouer un son

lpszReturnString est une chaine asciiz de 128 
// Lancer 
appeldll32("winmm.dll","mciSendStringA","play welcom98.wav", &amp;lpszReturnString, 128, NULL) 
// Pause 
appeldll32("winmm.dll","mciSendStringA","pause welcom98.wav", &amp;lpszReturnString, 128, NULL) 
// Arrêt 
appeldll32("winmm.dll","mciSendStringA","close all", &amp;lpszReturnString, 128, NULL)

Modifier le volume

vol est un entier long 
vd est un entier sans signe = 65535 
vl est un entier sans signe = 65535 
 
transfert(&amp;vol,&amp;vl,2) 
transfert(&amp;vol+2,&amp;vd,2) 
 
appeldll32("winmm.dll","auxSetVolume",0,vol) 
 
// 0 - son 
// 1 - midi 
// 2 - cd audio 
// 3 - entrée ligne 
// 4 - micro 
// 5 - Volume général 
// 6 - haut-parleur pc

Impressions, imprimantes

Impression d'un champ RTF

EM_FORMATRANGE est un entier sur 4 octets = 0x400+57 
EM_DISPLAYBAND est un entier sur 4 octets = 0x400+51 
EM_GETTEXTLENGTHEX  est un entier sur 4 octets = 0x400+95 
 
// structure pour le message EM_GETTEXTLENGTHEX 
gettextlengthex est une structure 
  flags est un entier sur 4 octets 
  codepage est un entier sans signe sur 4 octets 
FIN 
txtleng est un gettextlengthex 
txtleng:flags = 0 // GTL_DEFAULT nombre de caractères 
txtleng:codepage = 0 // cp_acp default to ANSI code page 
// * 
 
// structures pour le message EM_FORMATRANGE 
rect est une structure 
  l est un entier sur 4 octets 
  t est un entier sur 4 octets 
  r est un entier sur 4 octets 
  b est un entier sur 4 octets 
FIN 
charrange est une structure 
  cpMin est un entier sur 4 octets 
  cpMax est un entier sur 4 octets 
FIN 
formatrange est une structure 
  hdc est un entier sur 4 octets 
  hdcTarget est un entier sur 4 octets 
  rc1 est un rect 
  rcPage est un rect 
  chrg est un charrange 
FIN 
fm1 est un formatrange 
// * 
 
// structure pour l'api StartDoc 
docinfo est une structure 
  cbSize est un entier 
  lpszDocName est un entier sur 4 octets 
  lpszOutput est un entier sur 4 octets 
  lpszDatatype est un entier sur 4 octets 
  fwType est un entier sur 4 octets         
FIN 
docinf est un docinfo 
docinf:cbSize = Dimension(docinf) 
ch est une chaîne ASCIIZ de 128 = "Test impression rtf" 
docinf:lpszDocName = &amp;ch 
//* 
 
hwndrtf est un entier sur 4 octets = Handle(Saisie4) //handle du champ rtf à imprimer 
 
// dc de l'imprimante (HP LaserJet 5000 PCL 6 dans cet exemple) 
dc est un entier sur 4 octets = AppelDLL32("gdi32","CreateDCA","Winspool","HP LaserJet 5000 PCL 6",Null,Null) 
SI dc ALORS 
 
  API("gdi32","SetMapMode",dc,1) //dc en mode mm_text 
 
  HORZRES est un entier sur 4 octets=AppelDLL32("gdi32","GetDeviceCaps" , dc , 8) 
  VERTRES est un entier sur 4 octets=AppelDLL32("gdi32","GetDeviceCaps" , dc , 10) 
 
  // dpi 
  LOGPIXELSX est un entier = AppelDLL32("gdi32","GetDeviceCaps" , dc , 88) 
  LOGPIXELSY est un entier = AppelDLL32("gdi32","GetDeviceCaps" , dc , 90) 
 
  margeh est un entier sur 4 octets = LOGPIXELSX/2.54 // marge de 1cm 
  margey est un entier sur 4 octets = LOGPIXELSY/2.54	
 
  fm1:hdc = dc 
  fm1:hdcTarget = dc 
  fm1:rc1:l = margeh 
  fm1:rc1:t = margey 
  fm1:rc1:r = ( HORZRES / LOGPIXELSX ) * 1440 - margeh // 1440 -&gt; Twips par pouce 
  fm1:rc1:b = ( VERTRES / LOGPIXELSY ) * 1440 - margey 
  fm1:rcPage:l = margeh 
  fm1:rcPage:t = margey 
  fm1:rcPage:r = fm1:rc1:r 
  fm1:rcPage:b = fm1:rc1:b	
  fm1:chrg:cpMin = 0 
  fm1:chrg:cpMax = -1 
 
  AppelDLL32("gdi32","StartDocA", dc , &amp;docinf)	
 
  txt_a_imprimer est un entier = SendMessage(hwndrtf, EM_GETTEXTLENGTHEX , &amp;txtleng , 0 ) 
  txtimprime est un entier 
 
  TANTQUE txtimprime &lt; txt_a_imprimer 
    AppelDLL32("gdi32","StartPage", dc ) 
    txtimprime = SendMessage(hwndrtf, EM_FORMATRANGE , Faux , &amp;fm1 ) 
    SendMessage(hwndrtf, EM_DISPLAYBAND , 0 , &amp;fm1:rc1) 
    fm1:chrg:cpMin = txtimprime 
    fm1:chrg:cpMax = -1 
    AppelDLL32("gdi32","EndPage", dc ) 
  FIN 
 
  AppelDLL32("gdi32","EndDoc", dc )	
 
  SendMessage(hwndrtf, EM_FORMATRANGE , Null , Null ) 
  AppelDLL32("gdi32","DeleteDC",dc) 
FIN

Déterminer le nombre de dpi imprimante

dc est un entier long = appeldll32("gdi32","CreateICA","Winspool","HP LaserJet 5000 PCL 6",null,null) 
si dc alors 
 
    LOGPIXELSX est un entier = 88 
    LOGPIXELSY est un entier = 90 
 
    nbpx est un entier = AppelDLL32("gdi32","GetDeviceCaps" , dc , LOGPIXELSX) 
    nbpy est un entier = AppelDLL32("gdi32","GetDeviceCaps" , dc , LOGPIXELSY) 
    info(nbpx+" "+nbpy) 
 
    appeldll32("gdi32","DeleteDC",dc) 
 
fin

Récupération nom imprimante et ajout dans la combo

cbBuf est un entier  	
pbNeeded est un entier  	
pcReturned est un entier   
 
p1 est composé de 
    Flags est un entier   
    pDescription est un entier   
    pName est un entier   
    pComment est un entier   
FIN 
 
serv est une chaîne ASCIIZ de 64 
 
AppelDLL32("winspool.drv","EnumPrintersA",0x6,&amp;serv,1,Null,cbBuf,&amp;pbNeeded,&amp;pcReturned) 
 
hmem est un entier   = AppelDLL32("kernel32","GlobalAlloc",0x40,pbNeeded) 
 
cbBuf = pbNeeded 
SI AppelDLL32("winspool.drv","EnumPrintersA",0x6,&amp;serv,1,hmem,cbBuf,&amp;pbNeeded,&amp;pcReturned) ALORS 
    adr est un entier   = hmem 
    ind est un entier 
    POUR ind=1 A pcReturned 
 
        AppelDLL32("kernel32","RtlMoveMemory",&amp;p1,adr,Dimension(p1)) 
 
        nomimp est une chaîne ASCIIZ de 128 
 
        SI p1.pname0 ALORS 
 
            nomimp="" 
            AppelDLL32("kernel32","RtlMoveMemory",&amp;nomimp,p1.pname ,128) 
            SI Taille(SansEspace(nomimp))&gt;0 ALORS 
               ListeAjoute("COMBO1",nomimp) 
            FIN 
 
        FIN 
 
       adr+=16 
    FIN 
FIN 
 
AppelDLL32("kernel32","GlobalFree",hmem)

Récupération nom imprimante et port et ajout dans combo2

ListeSupprimeTout("COMBO2") 
 
 
cbBuf est un entier  	
pbNeeded est un entier  	
pcReturned est un entier   
 
p2 est composé de 
  pServerName est un entier   
  pPrinterName est un entier   
  pShareName est un entier   
  pPortName est un entier   
  pDriverName est un entier   
  pCommen est un entier   
  pLocation est un entier   
  pDevMode est un entier   
  pSepFile est un entier   
  pPrintProcessor est un entier   
  pDatatype est un entier   
  pParameters est un entier   
  pSecurityDescriptor est un entier   
  Attributes est un entier   
  Priority est un entier   
  DefaultPriority est un entier   
  StartTime est un entier   
  UntilTime est un entier   
  Stat est un entier   
  cJobs est un entier   
  AveragePPM est un entier   
FIN 
 
ind est un entier 
serveur est une chaîne ASCIIZ de 128 
nomimp est une chaîne ASCIIZ de 128 
port est une chaîne ASCIIZ de 128 
 
ch est une chaîne 
 
AppelDLL32("winspool.drv","EnumPrintersA",0x6,Null,2,Null,cbBuf,&amp;pbNeeded,&amp;pcReturned) 
hmem est un entier   = AppelDLL32("kernel32","GlobalAlloc",0x40,pbNeeded) 
cbBuf = pbNeeded 
SI AppelDLL32("winspool.drv","EnumPrintersA",0x6,Null,2,hmem,cbBuf,&amp;pbNeeded,&amp;pcReturned) ALORS 
 
  adr est un entier = hmem 
 
  POUR ind = 1 A pcReturned 
 
    AppelDLL32("kernel32","RtlMoveMemory",&amp;p2,adr,84) 
 
    AppelDLL32("kernel32","RtlZeroMemory",&amp;serveur,128) 
    AppelDLL32("kernel32","RtlMoveMemory",&amp;serveur,p2.pServerName ,128) 
 
    AppelDLL32("kernel32","RtlZeroMemory",&amp;nomimp,128) 
    AppelDLL32("kernel32","RtlMoveMemory",&amp;nomimp,p2.pPrinterName ,128) 
 
    AppelDLL32("kernel32","RtlZeroMemory",&amp;port,128) 
    AppelDLL32("kernel32","RtlMoveMemory",&amp;port,p2.pPortName ,128) 
 
    SI Taille(SansEspace(nomimp))&gt;0 ALORS 
 
      SI ETBinaire(p2.Attributes,4) ALORS 
        ch=" Défaut " 
      SINON 
        ch="" 
      FIN 
 
      ListeAjoute("COMBO2",port+"\"+nomimp+"\"+ch) 
    FIN 
 
    adr+=84 
 
  FIN 
 
FIN 
 
AppelDLL32("kernel32","GlobalFree",hmem) 
Message("Il y a  "+pcReturned+"  Imprimantes")

Nombre de documents dans le spooler pour une imprimante

PROCEDURE nbdocument(imprimante) 
 
p2 est composé de 
  pServerName est un entier   
  pPrinterName est un entier   
  pShareName est un entier   
  pPortName est un entier   
  pDriverName est un entier   
  pCommen est un entier   
  pLocation est un entier   
  pDevMode est un entier   
  pSepFile est un entier   
  pPrintProcessor est un entier   
  pDatatype est un entier   
  pParameters est un entier   
  pSecurityDescriptor est un entier   
  Attributes est un entier   
  Priority est un entier   
  DefaultPriority est un entier   
  StartTime est un entier   
  UntilTime est un entier   
  Stat est un entier   
  cJobs est un entier   
  AveragePPM est un entier   
FIN 
 
nboctets1 est un entier   
nboctets2 est un entier   
hwndimp est un entier   
err est un entier   
nbdoc est un entier 
 
imp est une chaîne ASCIIZ de 128=imprimante 
 
SI AppelDLL32("winspool.drv","OpenPrinterA", &amp;imp , &amp;hwndimp , Null ) ALORS 
 
  AppelDLL32("winspool.drv","GetPrinterA", hwndimp , 2 , &amp;p2 , 0 , &amp;nboctets1 ) 
 
  hmem est un entier   = AppelDLL32("kernel32","GlobalAlloc",0x40,nboctets1) 
 
  SI AppelDLL32("winspool.drv","GetPrinterA", hwndimp , 2 , hmem , nboctets1 , &amp;nboctets2 ) 
    AppelDLL32("kernel32","RtlMoveMemory",&amp;p2,hmem,Dimension(p2)) 
    nbdoc = p2.cJobs 
  SINON 
    nbdoc=-1 
  FIN 
 
  AppelDLL32("kernel32","GlobalFree",hmem)	
  AppelDLL32("winspool.drv","ClosePrinter",hwndimp) 
FIN 
RENVOYER(nbdoc)

Affichage des documents du spooler imprimante dans une table

job1 est composé de 
  JobId est un entier   
  pPrinterName est un entier   
  pMachineName est un entier   
  pUserName est un entier   
  pDocument est un entier   
  pDatatype est un entier   
  pStatus est un entier   
  Status est un entier   
  Priority est un entier   
  Position1 est un entier   
  TotalPages est un entier   
  PagesPrinted est un entier   
  wYear est un entier sur 2 octets 
  wMonth est un entier sur 2 octets 
  wDayOfWeek est un entier sur 2 octets 
  wDay est un entier sur 2 octets 
  wHour est un entier sur 2 octets 
  wMinute est un entier sur 2 octets 
  wSecond est un entier sur 2 octets 
  wMilliseconds est un entier sur 2 octets 
FIN     
 
 
numjob est un entier 
buf est un entier 
pcneed, pcreturn est un entier   
 
impr est une chaîne ASCIIZ de 128 = *** nom de l'imprimante 
hwndimp est un entier   
ch est une chaîne ASCIIZ de 256 
t1 est une chaîne 
 
nbdoc est un entier = nbdocument(impr) // voir procédure précédente 
 
SI nbdoc&gt;0 ALORS 
  AppelDLL32("winspool.drv","OpenPrinterA", &amp;impr , &amp;hwndimp , Null) 
 
  AppelDLL32("winspool.drv","EnumJobsA", hwndimp , 0 , nbdoc , 1 , Null , 0 , &amp;pcneed , Null) 
  buf = pcneed 
  hmem est un entier = AppelDLL32("kernel32","GlobalAlloc",0x40,pcneed) 
 
  AppelDLL32("winspool.drv","EnumJobsA", hwndimp , 0 , nbdoc , 1 , hmem , buf , &amp;pcneed , &amp;pcreturn) 
 
  ind est un entier 
  adr est un entier = hmem 
  POUR ind = 0 A pcreturn-1 
 
    AppelDLL32("kernel32","RtlMoveMemory",&amp;job1,adr,Dimension(job1)) 
 
    t1=job1.JobId+" - " 
 
    AppelDLL32("kernel32","RtlMoveMemory",&amp;ch,job1.pPrinterName,128) 
    t1+=ch+" - " 
 
    AppelDLL32("kernel32","RtlMoveMemory",&amp;ch,job1.pMachineName,128) 
    t1+=ch+" - "	
 
    AppelDLL32("kernel32","RtlMoveMemory",&amp;ch,job1.pUserName,128) 
    t1+=ch+" - "	
 
    AppelDLL32("kernel32","RtlMoveMemory",&amp;ch,job1.pDocument,256) 
    t1+=ch+" - "	
 
    AppelDLL32("kernel32","RtlMoveMemory",&amp;ch,job1.pDatatype,128) 
    t1+=ch+" - " 
 
    AppelDLL32("kernel32","RtlMoveMemory",&amp;ch,job1.TotalPages,128) 
    t1+=ch+" - "	
 
    AppelDLL32("kernel32","RtlMoveMemory",&amp;ch,job1.PagesPrinted,128) 
    t1+=ch+" - " 
 
    AppelDLL32("kernel32","RtlMoveMemory",&amp;ch,job1.PStatus,128) 
    t1+=ch+" - "	
 
    t1+=job1.Status+" - " 
    t1+= job1.wDay +"/"+ job1.wMonth +"/"+ job1.wYear +"  "+ job1.wHour +":"+ job1.wMinute +":"+ job1.wSecond 
 
    TableAjoute("TABLE2",t1) 
 
    adr+=Dimension(job1) 
 
  FIN 
 
FIN 
AppelDLL32("kernel32","GlobalFree",hmem) 
AppelDLL32("winspool.drv","ClosePrinter",hwndimp)

Récupérer les propriétés de l'imprimante

DEVMODE est une structure 
  dmDeviceName est une chaîne ASCIIZ de 32 
  dmSpecVersion est un entier sur 2 octets 
  dmDriverVersion est un entier sur 2 octets 
  dmSize est un entier sur 2 octets 
  dmDriverExtra est un entier sur 2 octets 
  dmFields est un entier   
  dmOrientation  est un entier sur 2 octets 
  dmPaperSize est un entier sur 2 octets 
  dmPaperLength est un entier sur 2 octets 
  dmPaperWidth  est un entier sur 2 octets 
  dmScale est un entier sur 2 octets 
  dmCopies est un entier sur 2 octets 
  dmDefaultSource est un entier sur 2 octets 
  dmPrintQuality est un entier sur 2 octets 
  dmColor est un entier sur 2 octets 
  dmDuplex est un entier sur 2 octets 
  dmYResolution est un entier sur 2 octets 
  dmTTOption  est un entier sur 2 octets 
  dmCollate est un entier sur 2 octets 
  dmFormName est une chaîne ASCIIZ de 32 
  dmUnusedPadding  est un entier   
  dmBitsPerPel est un entier   
  dmPelsWidth est un entier   
  dmPelsHeight est un entier   
  dmDisplayFlags est un entier   
  dmDisplayFrequency est un entier   
FIN 
 
d1 est un DEVMODE 
 
d2 est un DEVMODE 
 
hwndimp est un entier   
err est un entier   
 
imp est une chaîne ASCIIZ de 128 = *** Nom de l'imprimante 
 
AppelDLL32("winspool.drv","OpenPrinterA", &amp;imp , &amp;hwndimp , Null ) 
 
AppelDLL32("winspool.drv","DocumentPropertiesA", Handle() , hwndimp , &amp;imp, &amp;d1 , &amp;d2,  2 ) 
 
// Voir aussi la boite de dialogue de configuration de l'imprimante 
// AppelDLL32("winspool.drv","PrinterProperties", Handle(),hwndimp ) 
 
AppelDLL32("winspool.drv","ClosePrinter",hwndimp) 
 
ch est une chaîne = "Name : "+d1:dmDeviceName 
ch+=RC+"Version : "+d1:dmSpecVersion 
ch+=RC+"Driver version : "+d1:dmDriverVersion 
ch+=RC+"Size : "+d1:dmSize 
ch+=RC+"Driver Extra : "+d1:dmDriverExtra 
ch+=RC+"Fields : "+d1:dmFields 
ch+=RC+"Orientation : "+d1:dmOrientation 
ch+=RC+"PaperSize : "+d1:dmPaperSize 
ch+=RC+"PaperLength : "+d1:dmPaperLength 
ch+=RC+"Paperwidth : "+d1:dmPaperWidth 
ch+=RC+"Scale : "+d1:dmScale 
ch+=RC+"Copies : "+d1:dmCopies 
 
ch+=RC+"Qualité : "+d1:dmPrintQuality 
ch+=RC+"FormName : "+d1:dmFormName 
Info(ch)

Purger le spooler d'impression

hwndimp est un entier   
err est un entier   
imp est une chaîne ASCIIZ de 128= *** Nom de l'impriamnte 
 
SI AppelDLL32("winspool.drv","OpenPrinterA", &amp;imp , &amp;hwndimp , Null ) ALORS 
 
  SI AppelDLL32("winspool.drv","SetPrinterA", hwndimp ,0 , 0 , 3 ) 
    Message("OK")	
  SINON 
    err=AppelDLL32("kernel32","GetLastError") 
    Erreur(err) 
  FIN	
 
  AppelDLL32("winspool.drv","ClosePrinter",hwndimp) 
FIN

Lister les différents ports

port2 est composé de 
  pPortName est un entier   
  pMonitorName est un entier   
  pDescription est un entier   
  fPortType est un entier   
  Reserved est un entier   
FIN 
 
cbBuf est un entier  	
pbNeeded est un entier  	
pcReturned est un entier   
 
AppelDLL32("winspool.drv","EnumPortsA",Null,2,Null,cbBuf,&amp;pbNeeded,&amp;pcReturned) 
 
hmem est un entier = AppelDLL32("kernel32","GlobalAlloc",0x40,pbNeeded) 
cbBuf = pbNeeded 
AppelDLL32("winspool.drv","EnumPortsA",Null,2,hmem,cbBuf,&amp;pbNeeded,&amp;pcReturned) 
 
ind est un entier 
port est une chaîne ASCIIZ de 64 
ch est une chaîne 
 
adr est un entier = hmem 
 
POUR ind = 1 A pcReturned 
 
  AppelDLL32("kernel32","RtlMoveMemory",&amp;port2,adr,20) 
 
  AppelDLL32("kernel32","RtlZeroMemory",&amp;port,64) 
  AppelDLL32("kernel32","RtlMoveMemory",&amp;port,port2.pPortName ,64) 
 
  ch = port + " - " 
 
  AppelDLL32("kernel32","RtlZeroMemory",&amp;port,64) 
  AppelDLL32("kernel32","RtlMoveMemory",&amp;port,port2.pMonitorName ,64) 
  ch += port + " - " 
 
  AppelDLL32("kernel32","RtlZeroMemory",&amp;port,64) 
  AppelDLL32("kernel32","RtlMoveMemory",&amp;port,port2.pDescription ,64) 
  ch += port + " - " 
 
  TableAjoute("TABLE2",ch) 
 
  adr+=20 
 
FIN 
AppelDLL32("kernel32","GlobalFree",hmem) 
 
Message("Il y a  "+pcReturned+" ports ")

Écran

Déterminer le nombre de dpi écran

dc est un entier long = appeldll32("gdi32","CreateICA","Display",null,null,null) 
si dc alors 
 
    LOGPIXELSX est un entier = 88 
    LOGPIXELSY est un entier = 90 
 
    nbpx est un entier = AppelDLL32("gdi32","GetDeviceCaps" , dc , LOGPIXELSX) 
    nbpy est un entier = AppelDLL32("gdi32","GetDeviceCaps" , dc , LOGPIXELSY) 
    info(nbpx+" "+nbpy) 
 
    appeldll32("gdi32","DeleteDC",dc) 
 
fin

Souris

Déterminer si les boutons sont inversés

SM_SWAPBUTTON est un entier = 23 
si AppelDLL32("user32","GetSystemMetrics" , SM_SWAPBUTTON) alors 
    info("Les boutons de la souris sont inversés.") 
fin

Nombre de boutons

SM_CMOUSEBUTTONS est un entier = 43 
SM_MOUSEWHEELPRESENT est un entier = 75 
 
nb est un entier = AppelDLL32("user32","GetSystemMetrics" , SM_CMOUSEBUTTONS) 
si nb alors 
    roul est un entier = AppelDLL32("user32","GetSystemMetrics" , SM_MOUSEWHEELPRESENT) 
    si roul alors 
        info("La souris a "+nb+" bouton(s) + une roulette") 
    sinon 
        info("La souris a "+nb+" bouton(s)") 
    fin 
sinon 
    info("Pas de souris") 
fin

Obtenir la vitesse de déplacement

SPI_GETMOUSESPEED est un entier = 112 
SPI_SETMOUSESPEED est un entier = 113 
vitesse est un entier 
appeldll32("user32","SystemParametersInfoA",SPI_GETMOUSESPEED,0,&amp;vitesse,0) 
info("La vitesse de déplacement de la souris est fixée à "+vitesse)

Modifier la vitesse de déplacement

vitesse = 10 
appeldll32("user32","SystemParametersInfoA",SPI_SETMOUSESPEED,0,vitesse,0)

Obtenir le nombre de lignes de défilement de la roulette

SPI_GETWHEELSCROLLLINES est un entier = 104 
SPI_SETWHEELSCROLLLINES est un entier = 105 
nbligne est un entier 
appeldll32("user32","SystemParametersInfoA",SPI_GETWHEELSCROLLLINES,0,&amp;nbligne,0) 
info("Le nombre de lignes pour la roulette est fixé à "+nbligne)

Modifier le nombre de lignes de défilement de la roulette

nbligne=20 
appeldll32("user32","SystemParametersInfoA",SPI_SETWHEELSCROLLLINES,nbligne,0,0)

Word / Excel

Transférer une table mémoire vers excel
Appel de la procédure :

si pas tb1..vide alors versexcel("tb1")
PROCEDURE versexcel(ntab) 
 
ch est une chaîne 
ind est un entier 
 
windowclass est une chaîne ASCIIZ de 8="XLMAIN" 
 
//handle fenetre excel 
hwnd est un entier long 
hwnd=AppelDLL32("user32","FindWindowExA",Null,Null,&amp;windowclass,Null) 
SI hwnd=0 ALORS 
   AppelDLL32("shell32.dll","ShellExecuteA",Handle(),Null,"Excel","",Null,1) 
   Multitache(200) 
FIN 
hwnd=AppelDLL32("user32","FindWindowExA",Null,Null,&amp;windowclass,Null) 
 
SI hwnd ALORS 
 
   AppelDLL32("user32","ShowWindow",hwnd,1) 
 
   SI AppelDLL32("user32","OpenClipboard",Handle()) ALORS 
 
      AppelDLL32("user32","EmptyClipboard") 
 
      hwndc est un entier long 
 
      hwndg est un entier long = appeldll32("kernel32","GlobalAlloc",0x2,10000000) 
 
         SI hwndg ALORS 
            hwndc = AppelDLL32("kernel32","GlobalLock",hwndg) 
            POUR ind=1 A TableOccurrence(ntab,2) 
              ch+={infoobjet(ntab,26,ind)}..Libelle+tab 
            FIN 
            ch+=RC 
 
            AppelDLL32("kernel32","RtlMoveMemory",hwndc,&amp;ch,Taille(ch)) 
 
            pos est un entier long = hwndc+taille(ch) 
 
            POUR ind=1 A {ntab}..Occurrence 
              ch={ntab}[ind]+RC 
              AppelDLL32("kernel32","RtlMoveMemory",pos,&amp;ch,Taille(ch)) 
              pos+=Taille(ch) 
            FIN 
 
            AppelDLL32("kernel32","GlobalUnlock",hwndg) 
 
            AppelDLL32("user32","SetClipboardData",0x1,hwndg) 
 
         FIN 
 
      FIN 
 
      AppelDLL32("user32","CloseClipboard") 
 
      // Edition/Coller 
      EnvoieTouche("%{E}",hwnd) 
      EnvoieTouche("o",hwnd) 
 
      AppelDLL32("kernel32","GlobalFree",hwndg) 
      AppelDLL32("user32","EmptyClipboard") 
 
fin

Créer un document de fusion Word

Dans le texte de ton document word, tu as par exemple @nom et @adr que tu veux remplacer par tes données : 
 
nomdoc est une chaîne = "test.doc" 
WdReplaceAll est un entier=2 
WdFindContinue est un entier=1 
 
//Déclaration de l'objet OLE 
word est un objet OLE dynamique 
word=allouer un objet OLE "WORD.Application" 
word&gt;&gt;Visible=OLEFaux 
 
//Ouverture du document en lecture 
word&gt;&gt;Documents&gt;&gt;Open(nomdoc,OLEFaux,OLEVrai) 
 
// on remplace @nom par le contenu de la variable nomprenom 
word&gt;&gt;Selection&gt;&gt;Find&gt;&gt;Execute("@nom" , OLEFaux , OLEVrai , OLEFaux , OLEFaux , OLEFaux , OLEVrai , WdFindContinue , OLEFaux , SansEspace(nomprenom), WdReplaceAll) 
 
// on remplace @adr par le contenu de la variable adresse 
word&gt;&gt;Selection&gt;&gt;Find&gt;&gt;Execute("@adr" , OLEFaux , OLEVrai , OLEFaux, OLEFaux ,OLEFaux , OLEVrai , WdFindContinue , OLEFaux , SansEspace(adresse) , WdReplaceAll) 
 
// Impression du document 
word&gt;&gt;Printout() 
Multitache(200) 
 
//Fermeture document 
word&gt;&gt;Documents&gt;&gt;close(OLEFalse) 
 
//Fermeture Word 
word&gt;&gt;Quit() 
 
//Libération de l'objet OLE 
libérer word

Optimisation

Déplacer rapidement une image
Pour déplacer une image on peut modifier les propriétés ..colonne et ..ligne mais le résultat n’est pas très satisfaisant au niveau de la vitesse d’exécution et cela entraine des effets disgracieux au niveau de l’affichage.

Pour supprimer ces problèmes, on peut utiliser l’api MoveWindow. Dans l’exemple suivant, je veux animer ‘image3’ dans les limites du champ ‘image1’

// Appel de la procédure (exécutée jusqu'à la fermeture de la fenêtre) :   
moveimage("image1","image3")
Procédure moveimage(champimage,image) 
 
col , lig sont des entiers 
x , x1 , y , y1 sont des entiers 
x = {champimage}..colonne 
x1= {champimage}..colonne+{champimage}..largeur-{image}..largeur 
y = {champimage}..ligne 
y1= {champimage}..ligne+{champimage}..hauteur-{image}..hauteur 
sensc , sensl est des booleens 
 
pv est un entier=2 // pas vertical du déplacement 
ph est un entier=1 // pas horizontal 
col={image}..colonne 
lig={image}..ligne 
{image}..colonne=1500 
 
boucle 
 
    si col &gt; x1 alors 
        sensc=1 
    fin 
    si col &lt; x alors sensc=0 fin si lig &gt; y1 alors 
        sensl=1 
    fin 
    si lig &lt; y alors 
        sensl=0 
    fin 
    si sensc alors 
        col-=ph 
    sinon 
        col+=ph 
    fin 
    si sensl alors 
        lig-=pv 
    sinon 
        lig+=pv 
    fin 
 
    appeldll32("user32","MoveWindow",handle(image),col,lig,{image}..largeur,{image}..hauteur,1) 
    appeldll32("user32","UpdateWindow",handle()) 
    si appeldll32("user32","GetInputState") alors 
        multitache(-1) 
    fin 
fin

Remplacer la fonction multitache

Si il faut afficher l’état d’avancement du traitement, vous pouvez remplacer la fonction multitache() par :

appeldll32("user32","UpdateWindow",handle())

Si en plus vous voulez laisser la possibilité à l’utilisateur d’intervenir pendant ce traitement, vous pouvez remplacer la fonction multitache(-1) par :

appeldll32("user32","UpdateWindow",handle()) 
si appeldll32("user32","GetInputState") alors 
    multitache(-1) 
fin

Ce site n'a aucun lien avec la société PC SOFT®. Les marques "WinDev" et "WebDev" sont des marques déposées de la société PC SOFT.