Accueil > FAQ > WinDev API FAQ
 Résumé de la catégorie
Voici les informations en lien avec cette catégorie.
Catégorie Q&R Dernières Q&R publiées
 WinDev API
Q/R relatives à l'utilisation des API Windows avec WinDev.
22 Savez vous comment programmer une fonction Wake On Lan avec windev ?

 
Demandé et répondu par Drcharly93 le 03-May-2007 19:00 (5414 Lectures)
Comment lister tous les ports séries
Ce code à été récupéré sur le forum de PCSoft.
PROCEDURE enumPortCOM()

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

cbBuff 				est un entier
pbNeeded 			est un entier
pcReturned 			est un entier
szListePortCOM 		est une chaîne

AppelDLL32("winspool.drv","EnumPortsA",Null,2,Null,cbBuff,&pbNeeded,&pcReturned)

hmem est un entier = AppelDLL32("kernel32","GlobalAlloc",0x40,pbNeeded)

cbBuff = pbNeeded

AppelDLL32("winspool.drv","EnumPortsA",Null,2,hmem,cbBuff,&pbNeeded,&pcReturned)

ind est un entier
port est une chaîne ASCIIZ sur 64
ch est une chaîne

adr est un entier = hmem

POUR ind = 1 A pcReturned
	AppelDLL32("kernel32","RtlMoveMemory",&port2,adr,20)
	AppelDLL32("kernel32","RtlZeroMemory",&port,64)
	AppelDLL32("kernel32","RtlMoveMemory",&port,port2.pPortName,64)
	ch = port

	//	AppelDLL32("kernel32","RtlZeroMemory",&port,64)
	//	AppelDLL32("kernel32","RtlMoveMemory",&port,port2.pMonitorName,64)
	//	ch += port + " - "
	//
	//	AppelDLL32("kernel32","RtlZeroMemory",&port,64)
	//	AppelDLL32("kernel32","RtlMoveMemory",&port,port2.pDescription,64)
	//	ch += port + " - "
	SI ch[[A 3]] = "COM" ALORS
		szListePortCOM += Gauche(ch,4) + RC
	FIN

	adr += 20
FIN
AppelDLL32("kernel32","GlobalFree",hmem)

RENVOYER szListePortCOM


Demandé et répondu par Drcharly93 le 21-Aug-2007 15:21 (8125 Lectures)
Comment supprimer l'icone d'une fenêtre dans la barre de tâche
Source : forum PCSOFT posté par Charles A
GWL_EXSTYLE est un entier = -20
WS_EX_TOOLWINDOW est un entier = 128
HWND_NOTOPMOST est un entier = -2
SWP_NOMOVE est un entier = 2
SWP_NOSIZE est un entier = 1
SWP_NOZORDER est un entier = 4
SWP_FRAMECHANGED est un entier = 32
//Permet de ne pas afficher la fenêtre dans la barre des tâches
API("user32","SetWindowLongA",Handle(MaFenêtre),GWL_EXSTYLE,WS_EX_TOOLWINDOW)
API("user32","SetWindowPos",Handle(MaFenêtre),HWND_NOTOPMOST,0,0,0,0, ...
OUBinaire(OUBinaire(OUBinaire(SWP_NOMOVE,SWP_NOSIZE),SWP_NOZORDER),SWP_FRAMECHANGED))


Demandé et répondu par KPiTN le 03-Feb-2005 15:39 (6312 Lectures)
Appeler une fonction d'une application windev à partir d'une autre application
Comment faire pour faire pour appeler une fonction d'une application windev à partir d'une autre application?

Application A = Application que l'on veut appeler.
Application B = Application qui va donner l'ordre.

---------------------------
Application A :
//Code d'initialisation de la fenetre ou sera stocké la fonction que l'on veut appeler
Evénement("maprocedure","*.*",0x0400)   //0x0400 correspond a une constante windows, la liste des contantes se trouvant dans le fichier WINCONST.WL dans windev

//Code la procedure appelée
PROCEDURE arf(Mess,wParam, lParam) //wParam et lParam sont la si on veux passer des paramètres
FenEtat(MaFenetre,DessusTout)
info("OK")



---------------------------
Application B :
Code en C++ :
HWND hWindow = 0;	
hWindow = FindWindow(NULL, "TITRE DE LA FENETRE A APPELLER");
PostMessage(hWindow,WM_USER,0,0);   //ici j'ai mis 0 et 0 car je ne passe pas de paramètre


Code en Windev :
HandTemp est un entier
HandTemp=AppelDLL32("USER32.DLL","FindWindowA",Null,"Sauvegarde des mails")
SendMessage(HandTemp,0x0400,1,2)


Demandé et répondu par R&B le 04-Feb-2005 12:06 (4128 Lectures)
Comment récupérer la position du curseur en coordonnées X/Y par rapport au champ ?
Voici le code permettant de répérer les coordonées X/Y par rapport à un champ texte à l'emplacement du curseur et non pas de la souris.

Res est un entier
hwd est un entier = handle(SaisieTexte)
PosDepart est un entier = SaisieTexte..Curseur
Res = API("USER32","SendMessageA", hwd,214, PosDepart, 0)
trace("X = " + PoidsFaible(Res) + " - Y = " + PoidsFort(Res) )


Demandé et répondu par Ramses le 27-May-2005 10:49 (3301 Lectures)
Comment détecter un IDLE sous Windev
Ce thread permet de gérer un IDLE sous Windev

Attention: Windows 2000 & Up

PROCEDURE IdleProc(peMaxMilliSecs=5000, pbRestart=False)

LASTINPUTINFO is structure
	cbSize is unsigned int
	dwTime is int
END

lii is LASTINPUTINFO

lii:cbSize=Dimension(lii)

LOOP
	
	IF NOT API("USER32","GetLastInputInfo", &lii) THEN
		Msg2(__err)
		RETURN
	END
	
	currTicks is int=API("KERNEL32","GetTickCount")

	lastInputTicks is int=lii:dwTime

	idleTicks is int= currTicks - lastInputTicks;
	
	Trace("Current Tick="+currTicks+" | Last Input Tick="+lastInputTicks+" | Difference="+idleTicks)
	
	IF idleTicks>=peMaxMilliSecs THEN
		Info("Yo I'm In IDLE Mode !")
		IF NOT pbRestart THEN
			BREAK
		END
	END
	
	API("KERNEL32","Sleep",1000)
	
END


Demandé et répondu par Ramses le 27-May-2005 12:49 (3734 Lectures)
Ecrire une valeur binaire dans le registre
Oups, je suis en forme aujourd'hui, allez après lire une valeur binaire, voici commment écrire une donnée en mode binaire dans le registre :


// Vars
hKey is int
lpcbData is int
ulOptions is int
ulOptions1 is int
ulOptions2 is int
lsData is string

// Read option
ulOptions1=BinaryOR(0x00020000, 0x0001)
ulOptions1=BinaryOR(ulOptions1, 0x0008)
ulOptions1=BinaryOR(ulOptions1, 0x0010)
ulOptions1=BinaryAND(ulOptions1, BinaryNOT(0x00100000))

// Write option
ulOptions2=BinaryOR(0x00020000, 0x0002)
ulOptions2=BinaryOR(ulOptions2, 0x0004)
ulOptions2=BinaryAND(ulOptions2, BinaryNOT(0x00100000))

// Open key ( 0x80000001 --> HKEY_CURRENT_USER\ )
// With subkey Software\MyOtherSubKey
IF API("ADVAPI32.DLL","RegOpenKeyExA", 0x80000001, "Software\MyOtherSubKey", 0, OUBinaire(ulOptions1, ulOptions2), &hKey)<>0 THEN
	Error(ErrorInfo())
	RETURN
END

// What we want to store
lsData="Bonjour,"+RC+RC+"My Name Is Bond, James Bond"

// Set binary data
IF API("ADVAPI32.DLL","RegSetValueExA", hKey, "MyValueName", Null, "binary", lsData, Taille(lsData))<>0 THEN
	API("ADVAPI32.DLL","RegCloseKey",hKey)
	Error(ErrorInfo())
	RETURN
END

// Close opened key
API("ADVAPI32.DLL","RegCloseKey",hKey)




Demandé et répondu par R&B le 03-Jun-2005 13:29 (4670 Lectures)
Comment déclarer une police Windows.
Par Mathieu Kurth :

Après avoir copié le fichier "C:\Windows\Fonts" lancer le code suivant pour déclarer la police.

strPath est une chaîne = fSélecteur("", "", "Sélectionnez un fichier...", 
"Tous fichiers (*.*)"+TAB+"*.*", "*.*", fselOuvre+fselExiste)
SI strPath <> "" ALORS
   strPath += Caract(0)
   API("Gdi32","AddFontResourceA",&strPath)
FIN


Demandé et répondu par R&B le 15-Jun-2005 09:12 (4264 Lectures)
Comment bloquer le raffraîchissement d'une fenêtre ?
Il faut passer par l'API LockWindowUpdate de USER32
En passant le Handle de la fenêtre à bloquer et en ne passant pas de paramètre pour réactiver le raffaîchissement.

PROCEDURE BloqueRafraichissement(P_Handle=Null)
AppelDLL32("USER32","LockWindowUpdate",P_Handle)


Cela peut être utile pour masquer des manipulations d'affichage tels que le remplissage ou le parcours de tables, etc.

Remerciement à Mickael.


Demandé et répondu par Drcharly93 le 15-Jun-2007 15:40 (4535 Lectures)
Comment bloquer le clavier ou la souris
gnHandleHook étant une variable global de la fenetre
code de declaration de la fenetre
gnHandleHook est un entier


Code clic commence blocage clavier
gnHandleHook = API("user32","SetWindowsHookExA",13,&Procédure_Hook, Instance() ,0) 


Creer une procedure globale
PROCEDURE Procédure_Hook(ncode, wParam, lParam) 
RENVOYER -1


code du clic termine blocage clavier
 
SI PAS API("user32","UnhookWindowsHookEx",gnHandleHook) ALORS
	Erreur("erreur ")
FIN


Pour bloquer la souris il suffit de remplacer 13 par 14


Demandé et répondu par R&B le 03-Mar-2006 11:42 (21831 Lectures)
Comment mesurer l'inactivité d'un utilisateur ?
Remerciement à Marc pour sa trouvaille.

Il peut être utile de déclancher un traitement si l'utilisateur n'a pas effectué dopération pendant un certain temps. Pour cela on va mesurer le temps écoulé depuis sa dernier action.

L'API "GetLastInputInfo" dans user32.dll est utile pour cela.
LASTINPUTINFO est une structure
  cbTaille est un entier sans signe sur 4
  dwTime est un entier
FIN

MesInformations est un LASTINPUTINFO
MesInformations:cbTaille = Dimension(MesInformations)
SI  API("user32","GetLastInputInfo",&MesInformations) <> 0 ALORS
   Info("L'utilisateur n'a pas eu d'activité sur le poste depuis " + MesInformations:dwTime + "Ms")
FIN


Demandé et répondu par Drcharly93 le 02-Apr-2007 14:17 (5055 Lectures)
Comment faire communiquer WinDev et Flash ?
Dans le logiciel de création Flash utiliser la fonction FScommand(command,args) afin de communiquer vers Windev à travers l'activex "shockwave flash object".

Sur la dernière image de l'animation flash entrer :

stop();
fscommand("stop","fin");//valeur de command et args pour exemple

Puis exporter l'animation au format "swf" bien entendu(V7 pour cet exemple).

Dans Webdev entrer les lignes suivantes :
PROCEDURE AffichInfo(etat,valeur) 
Trace(etat+valeur)

// animation à charger
intro>>movie=fRepEnCours()+"\flash\intro.swf"

ActiveXEvénement("AffichInfo", intro, "FSCommand")

Résultat : Lorsque le lecteur flash lit la dernière image de son animation, les valeurs "stop" et "fin" sont bien intercepté.

Il me reste à tester dans l'autre sens (Webdev vers activex flash)

Si cela peut servir à d'autre et leur éviter du temps de recherche.

Stéphane Sch.


Demandé et répondu par Drcharly93 le 30-Nov-2007 10:32 (7766 Lectures)
Comment installer une police avec WinDev
LaPolice est une chaîne ASCIIZ sur 260 = "policeainstaller.ttf"
Resultat est un entier 
Chemin_font_windows est une chaîne =SysRep(srFontes)
Chemin_Complet_Police est une chaîne = Chemin_font_windows+"\"+LaPolice
Resultat=AppelDLL32("Gdi32","AddFontResourceA",&LaPolice)

Réponse de Rémy BISSOn sur le forum de PCSoft


Demandé et répondu par Drcharly93 le 13-Jul-2007 11:27 (7101 Lectures)
Comment Convertir un fichier texte en fichier audio txt to avi
// création de fichier WAV à partir d'un texte
PROCEDURE TexteVersWav(sTexteAEnregistrer, nFormat=18, sFichierWav)

objFileStream est un objet Automation dynamique
objVoice  est un objet Automation dynamique

objFileStream = allouer un objet OLE("SAPI.SpFileStream")
objVoice  = allouer un objet OLE("SAPI.SPVOICE")

objFileStream>>Format>>Type = nFormat
objFileStream>>Open(sFichierWav, 3, OLEFaux)
objVoice>>AudioOutputStream = objFileStream

objVoice>>Speak(sTexteAEnregistrer)
objFileStream>>Close()


libérer objFileStream
libérer objVoice

RENVOYER sFichierWav

********** FORMATS SAPI *****************************************

SAFTDefault = -1
SAFTNoAssignedFormat = 0
SAFTText = 1
SAFTNonStandardFormat = 2
SAFTExtendedAudioFormat = 3

// Standard PCM wave formats
SAFT8kHz8BitMono = 4
SAFT8kHz8BitStereo = 5
SAFT8kHz16BitMono = 6
SAFT8kHz16BitStereo = 7
SAFT11kHz8BitMono = 8
SAFT11kHz8BitStereo = 9
SAFT11kHz16BitMono = 10
SAFT11kHz16BitStereo = 11
SAFT12kHz8BitMono = 12
SAFT12kHz8BitStereo = 13
SAFT12kHz16BitMono = 14
SAFT12kHz16BitStereo = 15
SAFT16kHz8BitMono = 16
SAFT16kHz8BitStereo = 17
SAFT16kHz16BitMono = 18
SAFT16kHz16BitStereo = 19
SAFT22kHz8BitMono = 20
SAFT22kHz8BitStereo = 21
SAFT22kHz16BitMono = 22
SAFT22kHz16BitStereo = 23
SAFT24kHz8BitMono = 24
SAFT24kHz8BitStereo = 25
SAFT24kHz16BitMono = 26
SAFT24kHz16BitStereo = 27
SAFT32kHz8BitMono = 28
SAFT32kHz8BitStereo = 29
SAFT32kHz16BitMono = 30
SAFT32kHz16BitStereo = 31
SAFT44kHz8BitMono = 32
SAFT44kHz8BitStereo = 33
SAFT44kHz16BitMono = 34
SAFT44kHz16BitStereo = 35
SAFT48kHz8BitMono = 36
SAFT48kHz8BitStereo = 37
SAFT48kHz16BitMono = 38
SAFT48kHz16BitStereo = 39

// TrueSpeech format
SAFTTrueSpeech_8kHz1BitMono = 40

// A-Law formats
SAFTCCITT_ALaw_8kHzMono = 41
SAFTCCITT_ALaw_8kHzStereo = 42
SAFTCCITT_ALaw_11kHzMono = 43
SAFTCCITT_ALaw_11kHzStereo = 4
SAFTCCITT_ALaw_22kHzMono = 44
SAFTCCITT_ALaw_22kHzStereo = 45
SAFTCCITT_ALaw_44kHzMono = 46
SAFTCCITT_ALaw_44kHzStereo = 47

// u-Law formats
SAFTCCITT_uLaw_8kHzMono = 48
SAFTCCITT_uLaw_8kHzStereo = 49
SAFTCCITT_uLaw_11kHzMono = 50
SAFTCCITT_uLaw_11kHzStereo = 51
SAFTCCITT_uLaw_22kHzMono = 52
SAFTCCITT_uLaw_22kHzStereo = 53
SAFTCCITT_uLaw_44kHzMono = 54
SAFTCCITT_uLaw_44kHzStereo = 55
SAFTADPCM_8kHzMono = 56
SAFTADPCM_8kHzStereo = 57
SAFTADPCM_11kHzMono = 58
SAFTADPCM_11kHzStereo = 59
SAFTADPCM_22kHzMono = 60
SAFTADPCM_22kHzStereo = 61
SAFTADPCM_44kHzMono = 62
SAFTADPCM_44kHzStereo = 63

// GSM 6.10 formats
SAFTGSM610_8kHzMono = 64
SAFTGSM610_11kHzMono = 65
SAFTGSM610_22kHzMono = 66
SAFTGSM610_44kHzMono = 67

// Other formats
SAFTNUM_FORMATS = 68
---------------------------------------------------------------------
// lecture d'un fichier WAV ou MP3
PROCEDURE LectureWAVouMP3(sFichierWav)
MCIArrêt("MonSon")
MCIFerme("MonSon")
Multitâche(-5)
SI MCIOuvre(sFichierWav, "MonSon") ALORS
 SI MCIJoue("MonSon") ALORS
  TANTQUE MCIEtat("MonSon") = MciEtatJoue
   Multitâche(-5)
  FIN
  MCIFerme("MonSon")
 FIN
SINON
 Info("Erreur sur l'ouverture du fichier son.")
FIN


Origine de cette source : News Group de PCSOFT
Merci à puccettijc@free.fr


Demandé et répondu par Drcharly93 le 13-Jul-2007 17:25 (5055 Lectures)
Comment savoir si l'application est exécutée en terminal server
Voici un bout de code qui permet de détecter si la session est ouverte en
mode terminal server.
Cela peut être pratique pour désactiver certaines animations, comme le GFI
par exemple, pour ne pas ralentir l'application inutilement.
SM_REMOTESESSION est un entier = 0x1000
SI API("User32","GetSystemMetrics",SM_REMOTESESSION) ALORS
 //Session terminal server
SINON
 //Session régulière
FIN


Merci à Mathieu


Demandé et répondu par Drcharly93 le 13-Jun-2008 10:26 (10448 Lectures)
Savez vous comment programmer une fonction Wake On Lan avec windev ?
WakePC("L'adresse Mac du PC à allumer")
PROCEDURE hexa2ascii(texteHexa)
TexteASCII est une chaîne = ""
num est une chaîne = ""
ind est un entier
POUR ind = 1 A Taille(texteHexa)
  num = Milieu(texteHexa, ind, 2)
  TexteASCII = TexteASCII + Caract(Val(num,"x"))
  ind++
FIN
RENVOYER TexteASCII

PROCEDURE WakePC(sAdrMACEnv)
Data est une chaîne
Data = "FFFFFFFFFFFF"
ind est un entier
POUR ind = 1 A 16
  Data = Data + sAdrMACEnv
FIN

Data = Data + hexa2ascii(Data)

MonObjWinSock est une objet Automation dynamique
MonObjWinSock = allouer un objet Automation "MSWinsock.winsock"
MonObjWinSock>>Protocol("1") //0 Tcp; 1 UDP
MonObjWinSock>>RemoteHost ("255.255.255.255") //Ton masque de sous reseau
MonObjWinSock>>RemotePort("7") //N° Port par defaut 9
MonObjWinSock>>LocalPort("2154")
MonObjWinSock>>SendData(Caract(34)+Data+Caract(34))
libérer MonObjWinSock


Source fournie par tontonpolak


Demandé et répondu par R&B le 27-Sep-2004 12:14 (3470 Lectures)
5.5 ressources basses
Emis par Kristian Paradis sur le forum daussy.org

"Bonjour a tous,

Je suis sur que je ne suis pas le seul qui lorsqu'il démarre l'application en mode test se fait souvent dire par windev qu'il reste moins de 25% de ressources gdi et user blablabla....

J'ai essayé cette astuce que j'ai trouvé sur un site de hardware (http://www.inpact-hardware.com/)

et ca semble bien fonctionner. (je n'ai pas eu le message depuis)

dans win.ini section windows ajouter la ligne:
GDIMaxHeapSize=32767

ATTENTION! 32768 a la valeur UserMaxHeapSize rend impossible le démarrage de windows... même en mode sans échec!!!

Ne pas mettre plus, j'ai essayé et windows refuse de démarrer GDI.exe et on me demande de réinstaller windows (même chose avec 32768).

J'espère que ca réglera les ennuis de plusieurs

Bon développement
Kristian Paradis


Demandé et répondu par R&B le 27-Sep-2004 12:14 (4400 Lectures)
Simuler clic sur un bouton dans une autre application
Question postée sur le forum de daussy.org
réponse pas freddyp@wanadoo.fr :

lpBName est chaine asciiz de 128
lpBClass est chaine asciiz de 128

lpBName='Titre Fenetre' // Titre de la fenetre contenant le bouton
lpBClass='#32770' // Classe de la fenetre
NumFen est entier long=Appeldll32('USER32','FindWindowExA',Null,Null,&lpBClass,&lpBName)
si NumFen>0 alors
lpBName='Bouton' // Nom du bouton
lpBClass='Button' // Class Button
NumBtn est entier long=Appeldll32('USER32','FindWindowExA',NumFen,null,&lpBClass,&lpBName)
si NumBtn>0 alors
Post3 =postmessage(NumBtn,245,null,null) // BM_CLICK
fin
fin 


Demandé et répondu par R&B le 27-Sep-2004 12:14 (5940 Lectures)
Modifier la résolution ecran
Auteur du code : Philippe RAMIN

Déclaration de la structure DEVMOD dans le code du projet


DEVMODEA est une structure
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

Listage des résolutions dans un tableau


// code de la fenetre :
dm est une DEVMODEA
iModeNum est un entier
TANTQUE API('USER32','EnumDisplaySettingsA',Null,iModeNum,&dm)
TableAjouteLigne(TableResolutions,dm:dmDeviceName,dm:dmBitsPerPel,dm:dmPelsW
idth,dm:dmPelsHeight,dm:dmDisplayFrequency)
 iModeNum++
FIN

Bouton1 = Check si la résolution est Ok (ne modifie rien)


SI TableSelectOccurrence(TableResolutions)=0 ALORS RETOUR
dmtemp est une DEVMODEA
dmtemp:dmBitsPerPel=TableResolutions.dmBitsPerPel
dmtemp:dmPelsHeight=TableResolutions.dmPelsHeight
dmtemp:dmPelsWidth=TableResolutions.dmPelsWidth
dmtemp:dmDisplayFrequency=TableResolutions.dmDisplayFrequency
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_TEST)<>0 ALORS
 Erreur(ErreurInfo())
FIN

Bouton2 = Modification temporaire de la résolution


// Idem que le bouton 1 mais mettre le flag à 0 //

SI TableSelectOccurrence(TableResolutions)=0 ALORS RETOUR
dmtemp est une DEVMODEA
dmtemp:dmBitsPerPel=TableResolutions.dmBitsPerPel
dmtemp:dmPelsHeight=TableResolutions.dmPelsHeight
dmtemp:dmPelsWidth=TableResolutions.dmPelsWidth
dmtemp:dmDisplayFrequency=TableResolutions.dmDisplayFrequency
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

Bouton3 = Modification permanente (maj de la base de registre)


// Idem que le bouton 1 mais mettre le flag à 1 //

SI TableSelectOccurrence(TableResolutions)=0 ALORS RETOUR
dmtemp est une DEVMODEA
dmtemp:dmBitsPerPel=TableResolutions.dmBitsPerPel
dmtemp:dmPelsHeight=TableResolutions.dmPelsHeight
dmtemp:dmPelsWidth=TableResolutions.dmPelsWidth
dmtemp:dmDisplayFrequency=TableResolutions.dmDisplayFrequency
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_UPDATEREGISTRY)<>0
ALORS
 Erreur(ErreurInfo())
FIN

Conclusion


Voila, un grand merci à Philippe Ramin pour cette trouvaille


Demandé et répondu par R&B le 27-Sep-2004 12:14 (4932 Lectures)
Lister les processus NT
Merci à DrCharly93 pour ce post sur le NG PCSoft:

Comment lister les processus et modules en cours

Voici un bout de code trouver il y a longtemps sur internet
Procédure ProcesNT()
// Liste des process et modules sous NT
// Ce module pour fonctionner correctement doit être lancer dans une
//  fenêtre disposant d'une table 'TABLE1' composer de 5 colonnes
//  id           numérique entier (index dans la liste)
//  cProcessID   texte
//  cProcessName texte
//  cModuleName  texte
//  cPathName    texte
// Un interrupteur 'INTMODULE' permet de n'afficher
//  que les process (INTMODULE=0)
//  ou les process et modules correspondants (INTMODULE=1)

//
LOCAL
 idTabProcess  est un tableau de 200 entiers longs
 Cb     est un entier long=800  // taille en octets du tableau idTabProcess
 CbNeeded   est un entier long
 NumElements  est un entier long

 hTabModule  est un tableau de 200 entiers longs
 Cb2    est un entier long=800  // taille en octets du tableau hTabModule
 CbNeeded2   est un entier long
 NumModules   est un entier long
 Pname   est une chaine

 FileName   est une chaine fixe sur 260
 BaseName  est une chaine fixe sur 260
 nSize    est un entier long=260  // taille de FileName et BaseName

 lret,l1,l2  est un entier long
 hProcess   est un entier long
 i,i2    est un entier long
    NumDll    est un entier long


NumDll=chargedll('PSAPI.DLL')
si NumDll=0 alors
 erreur('La dll PSAPI n'a pas été chargée')
 renvoyer faux
fin

//
// The EnumProcesses function retrieves the process identifier
//  for each process object in the system.
//
//  BOOL EnumProcesses(
//    DWORD * lpidProcess,  // array to receive the process identifiers
//    DWORD cb,             // size of the array
//    DWORD * cbNeeded      // receives the number of bytes returned
//  );
Lret=appeldll32('PSAPI.DLL','EnumProcesses',&idTabProcess,Cb,&CbNeeded)
NumElements=CbNeeded/4   // Taille renvoyée divisée par la taille d'un
entier long (4 octets)

Pour i=1 a NumElements
    //
 // The OpenProcess function returns a handle to an existing process object.
 //
 //  HANDLE OpenProcess(
 //    DWORD dwDesiredAccess,  // access flag
 //    BOOL bInheritHandle,    // handle inheritance flag
 //    DWORD dwProcessId       // process identifier
 //  );
 //

HProcess=appeldll32('KERNEL32.DLL','OpenProcess',oubinaire(1024,16),0,idTabP
rocess[i])
 si HProcess<>0 alors  // On a un processus. On va rechercher ses modules.
        //
  // The EnumProcessModules function retrieves a handle for each module
  //  in the specified process.
  //
  // BOOL EnumProcessModules(
  //   HANDLE hProcess,      // handle to the process
  //   HMODULE * lphModule,  // array to receive the module handles
  //   DWORD cb,             // size of the array
  //   LPDWORD lpcbNeeded    // receives the number of bytes returned
  // );
  // Process_Query_Information=1024
  // Process_All_Access=16
  //

Lret=Appeldll32('PSAPI.DLL','EnumProcessModules',Hprocess,&hTabModule,Cb2,&C
bNeeded2)
  si LRet<>0 alors
   NumModules=CbNeeded2/4
   SI INTMODULE=0 alors NumModules=1
   Pour i2=1 a NumModules
    // The GetModuleBaseName function retrieves the base name of the
specified module.
    //
    //DWORD GetModuleBaseName(
    //  HANDLE hProcess,    // handle to the process
    //  HMODULE hModule,    // handle to the module
    //  LPTSTR lpBaseName,  // buffer that receives the base name
    //  DWORD nSize         // size of the buffer
    //);
     L1=Appeldll32('PSAPI.DLL','GetModuleBaseNameA',HProcess,hTabModule[i2]
....
                  ,&BaseName,nSize)
     SI L1=0 alors BaseName=''
    Si i2=1 alors Pname=minuscule(BaseName[[1 à L1]])
    //
    // The GetModuleFileNameEx function retrieves the fully qualified path
    //  for the specified module.
    //
    //  DWORD GetModuleFileNameEx(
    //    HANDLE hProcess,    // handle to the process
    //    HMODULE hModule,    // handle to the module
    //    LPTSTR lpFilename,  // buffer that receives the path
    //    DWORD nSize         // size of the buffer
    //  );
    //

L2=Appeldll32('PSAPI.DLL','GetModuleFileNameExA',HProcess,hTabModule[i2] ...
                  ,&FileName,nSize)
    Si L2=0 alors FileName=''
    TABLEAJOUTE('TABLE1',i+i2/1000+TAB+idTabProcess[i]+TAB+PName+...
              TAB+Minuscule(BaseName[[1 à L1]])+...
              tab+Minuscule(FileName[[1 a L2]]))
   fin
  fin
  LRet=Appeldll32('KERNEL32.DLL','CloseHandle',HProcess)
 FIN
fin

si NumDll<>0 alors
 dechargedll(NumDll)
fin


Demandé et répondu par Bassy le 27-Sep-2004 12:14 (3434 Lectures)
Vider la Corbeille Windows
Le code d'utilisation d'API Windows pour vider la Corbeille est :
LA_CONFIR est un entier sur 8 octets=0x00000000
AppelDLL32( "shell32.dll" , "SHEmptyRecycleBinA" , Handle() , Null ,&LA_CONFIR)


LA_CONFIR=0x00000000 // Avec message de confirmation
LA_CONFIR=0x00000001 // Sans confirmation
LA_CONFIR=0x00000000 // Sans jauge
LA_CONFIR=0x00000000 // Sans les effets sonores


Connexion
Menu
Chercher WDForge
Chercher Web
Partenaires
Visualiser tous les Partenaires...
WinDev, WebDev, WinDev Mobile et HyperFile sont des marques déposées par PCSoft. |  Voter |  Legal |  Contact |   XOOPS 2.0.13.2