Accueil > FAQ > WinDev API | FAQ |
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 :
---------------------------
Application B :
Code en C++ :
Code en Windev :
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
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.
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.
Cela peut être utile pour masquer des manipulations d'affichage tels que le remplissage ou le parcours de tables, etc.
Remerciement à Mickael.
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
Code clic commence blocage clavier
Creer une procedure globale
code du clic termine blocage clavier
Pour bloquer la souris il suffit de remplacer 13 par 14
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.
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 :
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.
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
********** 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
Origine de cette source : News Group de PCSOFT
Merci à puccettijc@free.fr
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.
Merci à Mathieu
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")
Source fournie par tontonpolak
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
"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 :
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
Voila, un grand merci à Philippe Ramin pour cette trouvaille
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
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=0x00000000 // Avec message de confirmation
LA_CONFIR=0x00000001 // Sans confirmation
LA_CONFIR=0x00000000 // Sans jauge
LA_CONFIR=0x00000000 // Sans les effets sonores
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