begin process at 2012 02 14 23:37:39
  Trouver un code source :
 
dans
 
Accueil > Forum > 

Visual Basic 6

 > 

Windows

 > 

API

 > 

aide sur bouton bloque par une api


Derniers messages déposésPoser une question dans le forum ou lancer une discussion

aide sur bouton bloque par une api

vendredi 28 septembre 2007 à 15:38:35 | aide sur bouton bloque par une api

geoffrey54

Salut a tous,

voila j'essaie de faire un programme permettant de savoir si des fichiers ont ete modifiés dans un dossier. Ca marche seulement mes boutons sont bloqués aprés. Voici mon code:

Private Sub Command1_Click()
 Dim Ret As Long
    'Set the notification hook
    Ret = FindFirstChangeNotification("C:\temp2", &HFFFFFFFF, FILE_NOTIFY_CHANGE_ALL)
    flag = False
    'Wait until the event is triggered
    WaitForSingleObject Ret, &HFFFFFFFF
    MsgBox "Event Triggered for the first time"
    'Reactivate our hook
    Do While flag = False
    FindNextChangeNotification Ret
    'Wait until the event is triggered
    DoEvents
    WaitForSingleObject Ret, &HFFFFFFFF
    DoEvents
    MsgBox "Event Triggered for the second time"
    'Remove our hook
    Loop
    FindCloseChangeNotification Ret
End Sub

Private Sub Command2_Click()
flag = True
End Sub

En faite j'aimerais que lorsque je click sur le bouton 2 il arrete de surveiller le dossier mais impossible de clicker sur le 2eme bouton. Je pensait que l'instruction Doevent suffirait mais non.

Merci de votre aide.
vendredi 28 septembre 2007 à 16:36:07 | Re : aide sur bouton bloque par une api

NHenry

Membre Club Administrateur CodeS-SourceS
Bonjour

DoEvents

cette instruction peut-être utile.

Balèse la personne qui a pensé au pansement à penser (ou à panser, pensée).
VB (6, .NET1&2), C++, C#.Net1
Mon site
vendredi 28 septembre 2007 à 17:28:14 | Re : aide sur bouton bloque par une api

xav0

Bonjour,

la solution est de remplacer WaitForSingleObject (bloquante) par MsgWaitForMultipleObjects qui s'arête lorsque la modification du fichier est faite OU lorsqu'un événement arrive dans l'application.

Do
  DoEvents
  If flag = true then Exit Do
Loop While MsgWaitForMultipleObjects(1, Ret, 0, INFINITE, QS_ALLINPUT) = WAIT_OBJECT_0 + 1
If flag = true then ... 'L'utilisateur a annulé

(Const WAIT_OBJECT_0 = 0, QS_ALLINPUT = 255)

vendredi 28 septembre 2007 à 18:11:49 | Re : aide sur bouton bloque par une api

casy

Membre Club
Réponse acceptée !
La solution serait aussi de ne pas mettre un délai d'attente infini pour WaitForSingleObject.

En mettant &HFFFFFFFF, tu indique un temps d'attente infini. Ce qui fait que ton programme reste bloqué sur l'instruction WaitForSingleObject tant que l'évènement correspondant à Ret ne sera pas déclenché. Et il peut retser ainsi bloqué des siècles.

---- Sevyc64  (alias Casy) ----
# LE PARTAGE EST NOTRE FORCE #    [ Lien ]
samedi 29 septembre 2007 à 14:19:19 | Re : aide sur bouton bloque par une api

geoffrey54

voila ce que j'ai mis:

Dim Ret As Long
    'Set the notification hook
    Ret = FindFirstChangeNotification("C:\temp2", &HFFFFFFFF, FILE_NOTIFY_CHANGE_ALL)
    flag = False
 
    WaitForSingleObject Ret, &HFFFF
    MsgBox "Event Triggered for the first time"
   
    FindNextChangeNotification Ret
   
    Do
  DoEvents
  If flag = True Then Exit Do
    Loop While MsgWaitForMultipleObjects(1, Ret, 0, INFINITE, QS_ALLINPUT) = WAIT_OBJECT_0 + 1
    If flag = True Then MsgBox "L'utilisateur a annulé"

End Sub

Private Sub Command2_Click()
flag = True
End Sub

voila ce que j'ai mis mais il y a une erreur qui fait tout planter...
les deux autres solutions ne marchent pas puisque DoEvents je l'avais deja mis et le fait de raccourcir le temps ne change me permet d'appuyer mais le programme ne fait pas ce que je veux...

merci encore de votre aide.

dimanche 30 septembre 2007 à 10:04:24 | Re : aide sur bouton bloque par une api

xav0

Réponse acceptée !
ça doit être le premier WaitForSingleObject qui bloque encore. Il faut le remplacer aussi, et du coup, je pense que c'est plus simple de tout mettre dans la même boucle :

  Dim Ret As Long, Code As Long, i As Long
 
  'Set the notification hook
  Ret = FindFirstChangeNotification("C:\temp2", INFINITE, FILE_NOTIFY_CHANGE_ALL)
  flag = False
 
  'Cette boucle se termine quand l'utilisateur a annulé la surveillance
  DoEvents 'Il faut faire DoEvents avant MsgWaitForMultipleObjects
  Do Until flag = True 'Test du flag entre DoEvents et MsgWaitForMultipleObjects
    Code = MsgWaitForMultipleObjects(1, Ret, 0, INFINITE, QS_ALLINPUT)
    If Code = WAIT_OBJECT_0 Then
      'Il y a eu une modification
      i = i + 1
      MsgBox "Modification détectée (n° " & i & ")"
      'Fin du traitement, attend la modification suivante...
      FindNextChangeNotification Ret
    ElseIf Code = -1 Then
      MsgBox "Une erreur s'est produite"
      Exit Do
    End If
    DoEvents
  Loop
 
  FindCloseChangeNotification Ret 'Remove our hook

dimanche 30 septembre 2007 à 14:26:03 | Re : aide sur bouton bloque par une api

geoffrey54

C bon j'ai fait un mix des deux reponses:

  DoEvents 'Il faut faire DoEvents avant MsgWaitForMultipleObjects
  Do Until flag = True 'Test du flag entre DoEvents et MsgWaitForMultipleObjects
    Code = WaitForSingleObject(Ret, &HFF)
    If Code = WAIT_OBJECT_0 Then
      'Il y a eu une modification
      i = i + 1
      MsgBox "Modification détectée (n° " & i & ")"
      'Fin du traitement, attend la modification suivante...
      FindNextChangeNotification Ret
    ElseIf Code = -1 Then
      MsgBox "Une erreur s'est produite"
      Exit Do
    End If
    DoEvents
  Loop

J'ai remplacé MSGwaitblabla par WaitForSingleObject et j'ai reuduit la duree.

Merci encore de votre aide.


Cette discussion est classée dans : bouton, aide, event, ret, triggered


Répondre à ce message

Sujets en rapport avec ce message

Besoin d'aide pour un Combo Box [ par Death Angel ] Bonjour!Voilà, je vous explique.Je crée un Combo Box (logique pour ce que je veux faire lol)puis un bouton. Je crée un fichier sur mon DD avec plusieu Ouvrir fichiers d'aide chm sur F1 [ par Benz ] Bonjour,J'ai trouvé sur dans le forum comment ouvrir un fichier d'aide chm en cliquant sur un bouton. J'aurais besoin de quelque chose d'un peu différ Au secours,a l'aide [ par atilata ] bonjour,j aimerais que vous m apportiez votre aide sur un sujet.J ai un formulaire avec un bouton precedent et quand je clique sur le bouton,j efface Pouvoir mettre un bouton Copier dans un dataGrid [ par normvrd ] Est-ce quelqu'un qui pourrait une idée pour un code. J'ai une dataGrid dans un formulaire et je voudrais pouvoir sélectionner un enregistrement et à l g besoin d'aide pour faire un programme [ par combomaster ] ben voil je voudrais savoir si qq'un pourrait me faire un programme avec visual basic qui est capable de faire fonctionner un moteur qui est relié por ouvrir plusieurs fichiers avec un seul bouton [ par CanardFou ] Bonjour,J'ai plusieurs fichiers mp3 contenus dans un répertoire.Je voudrais à l'aide d'un seul bouton command sélectionner tous les fichiers de ce rép Bouton Modifiable, Aide [ par vb666 ] Je repose ma question ici car elle aurait plus rapport avec les activeXJe voudrais faire un bouton totalement neutre gerne just command1 comme caption A l'aide!! [ par W@$h! ] J'ai un petit probleme...Dans une de mes fonction (lors du clic sur un bouton), je declare un tableau que je remplis.Seulement voila, lors du clic sur aide pour vb [ par XoOeZ ] j'aurai aimer savoir comment je peu metre dé racourci clavier style ctrl + L dans un bouton et que ça fonctionne quand je clique sur mon boutonmerci @ Urgent !!! A l'aide [ par Chewba ] Bonjour,Je souhaite pouvoir mettre l'imprimante par défaut offline en cliquant sur un bouton et la remmetre online en cliquant sur un autre bouton.Mer


Nos sponsors


Sondage...

Comparez les prix

CalendriCode

Février 2012
LMMJVSD
  12345
6789101112
13141516171819
20212223242526
272829    

Consulter la suite du CalendriCode

Photothèque

 
Développement réalisé par Nicolas SOREL (Nix) avec l'aide de : Cyril DURAND et Emmanuel (EBArtSoft), Merci à Vincent pour ses précieux conseils.
CodeS-SourceS.com© Toute reproduction même partielle est interdite sauf accord écrit du Webmaster
CodeS-SourceS.com© est une marque déposée tous droits réservés

Google Coop CodeS-SourceS Google Coop CodeS-SourceS
Temps d'éxécution de la page : 1,373 sec (3)

Nous contacter | Annoncer sur CodeS-SourceS | Mentions légales