none
[DEBUTANT] - Comment savoir si un fichier est ouvert ou fermé comment savoir s'il est en cours d'utilisation ou non ? RRS feed

  • Question

  • Bonjour

    Je développe une application sous visual basic 2010 express de gestion de mes karaokés me permettant d'ouvrir directement le fichier karaoké à partir de celle-ci.

    Pour ouvrir mon fichier j'utilise le code suivant :

    Shell("""" & TbCheminLogiciel.Text & """ """ & LbTitreChoisitAnnonce.Text & """")

    TbCheminLogiciel.text contenant le path de l'executable du logiciel de lecture de karaoé

    LbTitreChoisitAnnonce.text contenant le path du fichier karaoké qui peut être d'extension différente car le programme lit plusieurs types de fichiers.

    Lorsque le fichier s'ouvre, le programme karaoké le lit automatiquement et à la fin, le fichier se ferme automatiquement.

    A partir du lancement du fichier j'aimerais récupérer l'information me permettant de savor si le fichier est en cours de lecture ou ouvert et lorsqu'il de se ferme, l'information de fermeutre afin de la mentionner dans mon application. En effet, j'aimerais qu'un label apparaisse dans mon application lorsque le fichier karaoké s'ouvre et qu'il disparraisse lorsqu'il se ferme.

    Merci par avance pour vos réponses

    @+ Martipit

    mardi 8 mai 2012 09:04

Réponses

  • Bonjour,

    Public Function FileInUse(ByVal MonFichier As String) As Boolean
        If File.Exists(MonFichier) Then
            Try
                Dim F As Integer = FreeFile()
                FileOpen(F, MonFichier, OpenMode.Binary, OpenAccess.ReadWrite, OpenShare.LockReadWrite)
                FileClose(F)
            Catch
                Return True
            End Try
        End If
    End Function
    
    Bien à vous.

    ZGuideTV.NET - administrator/developer

    mardi 8 mai 2012 10:49
  • re

    j'ai fais les essais sur un 32 et un 64 bits j'ai les 2 versions.

    Suite à ce que j'a i énoncé dans le précédent post, j'ai mis le code suivant dans un timer que je déclenche lorsque j'ouvre le fichier karaokés via un bouton :

     If Directory.Exists("c:\Programdata\recisio\karafun\temp") = False Then Exit Sub
            Dim RepNames = Directory.EnumerateDirectories("c:\Programdata\recisio\karafun\temp")
            If RepNames.Count = 1 Then
                AfficheInfoEnCours()
                BtnAnnoncer.Enabled = False
                LabLectureEnCours.Visible = True
                PbLectureEnCours.Visible = True
            End If
            If RepNames.Count <> 1 Then
                BtnAnnoncer.Enabled = True
                LabLectureEnCours.Visible = False
                PbLectureEnCours.Visible = False
                TbInterpreteEnCours.Text = ""
                TbTitreEnCours.Text = ""
                Exit Sub
            End If

    et cela semble fonctionner à tous les coups.

    Merci à vous

    @+ Martipit

    samedi 12 mai 2012 00:16

Toutes les réponses

  • Bonjour,

    Public Function FileInUse(ByVal MonFichier As String) As Boolean
        If File.Exists(MonFichier) Then
            Try
                Dim F As Integer = FreeFile()
                FileOpen(F, MonFichier, OpenMode.Binary, OpenAccess.ReadWrite, OpenShare.LockReadWrite)
                FileClose(F)
            Catch
                Return True
            End Try
        End If
    End Function
    
    Bien à vous.

    ZGuideTV.NET - administrator/developer

    mardi 8 mai 2012 10:49
  • Merci pour cette réponse rapide.

    j'ai copié le code dans mon appli mais Visual basic express 2010 me donne une erreur pour le code

    If File.Exists(MonFichier) Then

    en me soulignant le mot file

    L'erreur est la suivante 'File' n'est pas déclaré. Il peut être inaccessible en raison de son niveau de protection.

    Il me propose de le remplacer par

    If IO.File.Exists(MonFichier) Then

    Cette solution ne me souligne plus le mot mais par contre me souligne en vert

    End Function

    avec le message suivant : la fonction 'FileInUse' ne retourne pas une valeur pour tous les chemns de code. Une instruction 'return' est-elle manquante ?

    Encore une petite question :

    Si j'ai bien compris, 'MonFichier' doit donc correspondre à 'LbTitreChoisitAnnonce.Text' afin que le code s'occupe bien de ce fichier.

    Maintenant que faire pour que 'LabelLecture.visible' soit true si le fichier est ouvert ?

    Désolé si je suis un peu lourd mais mes connaissane sont limitées en VB.

    Merci par avance pour vos réponses.

    @+ Martipit

    mardi 8 mai 2012 11:37
  • Concernant les erreurs vous devez ajouter :

    Imports System.IO

    Effectivement, vous aurez True si le fichier est déjà utilisé et False dans le cas contraire.

    Voici un exemple d'appel de la function :

    Dim MonFichier As Boolean = FileInUse("c:\monrépertoire\" & "monfichier.xxx")

    Evidement, cela peut être remplacer par votre/vos TextBox.text ou Label ....

    Bien à vous.


    ZGuideTV.NET - administrator/developer



    mardi 8 mai 2012 11:48
  • Re.

    Si j'inscris

    If Imports System.IO.File.Exists(MonFichier) Then

    Il me souligne le mot 'Imports' et m'indique expression attendue

    Que faire ?

    J'ai tenté de le pettre ailleurs mais rien n'y fait

    Meci

    @+ Martipit

    mardi 8 mai 2012 12:14
  • Imports System.IO

    Doit être mis en toute 1ère ligne de votre code !!! Pas dans les lignes de code en elles même. Je pense même que vous devriez voir d'autres Imports à cet endroit.

    Bien à vous.


    ZGuideTV.NET - administrator/developer

    mardi 8 mai 2012 12:17
  • Ok j'ai mis cette ligne en tout premier juste au dessus de la class

    par cotre, j'ai toujours 'End Function qui est toujours souligné en vert avec le message suivant : la fonction 'FileInUse' ne retourne pas une valeur pour tous les chemns de code. Une instruction 'return' est-elle manquante ?

    Y aurait-il quelque chose que j'ai loupé ?

    Merci par avance

    @+ Martipit

    mardi 8 mai 2012 12:27
  • Ajoutez :

    Return False

    juste après :

    FileClose(F)

    Je pense que le problème se trouve là.

    Bien à vous.


    ZGuideTV.NET - administrator/developer

    mardi 8 mai 2012 12:29
  • En fait pour supprimer se soulignement en vert, il a fallu mettre l'instruction 'Return False' juste avant le 'End Function'.

    Maintenant reste plus qu'à tester pourvoir si une msgbox me renvoi bien l'instruction false ou true

    mardi 8 mai 2012 12:46
  • Pour faire simple :

    Dim MonFichier As Boolean = FileInUse("c:\monrépertoire\" & "monfichier.xxx")
    
            If MonFichier Then
    
                Dim boxLocalError As DialogResult = MessageBox.Show _
                                   ("Le fichier est déjà utilisé",
                                    "Test de mon fichier", MessageBoxButtons.OK, MessageBoxIcon.Warning,
                                    MessageBoxDefaultButton.Button1)
            Else
    
                Dim boxLocalError As DialogResult = MessageBox.Show _
                                    ("Le fichier n'est pas utilisé",
                                     "Test de mon fichier", MessageBoxButtons.OK, MessageBoxIcon.Information,
                                     MessageBoxDefaultButton.Button1)
            End If

    Bien à vous.


    ZGuideTV.NET - administrator/developer

    mardi 8 mai 2012 12:52
  • Re

    Je visn d'effectuer un test et le résultat est mitigé :

    si je mets le nom du fichier qui execute mon logicel karaokés comme ceci :

    Dim MonFichier As Boolean = FileInUse("c:\monrépertoire\" & "Karafunplayer.exe")

    j'ai bien l'instruction true qui apparait dans la msgbox.

    Si je mets le nom du fichier karaoke qui lit comme ceci :

    Dim MonFichier As Boolean = FileInUse("c:\monrépertoire\" & "ZAZ - Je veux.kfn")

    J'ai l'instruction false qui apparait dans ma msgbox.

    cela s'ignifirait donc que le fichier .kfn n'apparait pas comme étant en cours d'utilisation.

    Bizarre tout cela....

    Peut être faudrait-il que je mette les 2 fichiers en même temps un peux comme la ligne de commande du shell qui me permet d'ouvrir le fichier au départ ?

    @+ Martipit

    mardi 8 mai 2012 12:57
  • Cela fonctionne sans problème chez moi. Je n'utilise pas KaraFun Player donc je teste avec un fichier mp3 et je n'ai pas de soucis.

    Faites-vous appel à la fonction au bon moment ?

    Bien à vous.


    ZGuideTV.NET - administrator/developer

    mardi 8 mai 2012 13:16
  • j'appelle la fonction après avoir ouvert d'une part karafun puis ensuite après avoir ouvert le fichier kfn...

    Si je fais de même avec un mp3 et media player cela fonctionne.

    Si j'essais avec un fichier.txt, cela ne fonctionne plus non plus.



    • Modifié Martipit mardi 8 mai 2012 13:27
    mardi 8 mai 2012 13:20
  • Je suppose que les fichiers ayant une extension .kfn sont ouverts par défaut par KaraFun Player.

    Donc, essayez ceci,

    Remplacez :

    Shell("""" & TbCheminLogiciel.Text & """ """ & LbTitreChoisitAnnonce.Text & """")

    Par :

    Process.Start("c:\monrépertoire\" & "ZAZ - Je veux.kfn")

    Bien à vous.


    ZGuideTV.NET - administrator/developer


    mardi 8 mai 2012 13:35
  • Alors, j'ai modifié le shell par process.start et toujours pareil.

    J'ai testé avec des fichiers d'extensions différentes mais rien n'y fait, il me donne toujours false.

    Par contre, j'ai remarqué qu'en fonction de l'extension du fichier ouvert, cela fonctionne ou pas.

    Comme je l'ai dit précédemment, j'ai fais un essais avec un fichier .txt ouvert avec le bloc-notes, ca ne marche pas. j'ai essayer avec un PDF ouvert avec reader ca fonctionne.

    Les mp3 avec média player c'est ok par contre avec karafun ca fonctionne pas.

    Est-ce que cela pourrait avoir un lien avec le programme utilisé pour l'ouverture du ficher ? Peut être que karafun n'est pas reconnu par le IO.System ...

    Je ne comprends pas...

    @+ Martipit

    mardi 8 mai 2012 14:09
  • bonsoir

    Après de nombreux essais et test, j'ai fini par résoudre une partie du problème. Comme je travaille sur plusieurs forms à partir desquelles je peux lancer le fichier en fonction du nombre d'écran, je n'avais pas mis la formule suivante sur l'ensemble de ces forms :

    Imports System.IO

    Depuis qu'il y est cela fonctionne mieux mais reste encore un problème :

    si j'ouvre un fichier .mp3, .XXX cela me donne bien la valeur 'true'

    Si j'ouvre un fichier .kfn, donc natif de karafun, la valeur donnée est 'false'

    voilà la le point de la situation à l'heure actuelle.

    Si vous avez une solution, je suis preneur

    Merci par avance.

    @+ Martipit

    mardi 8 mai 2012 22:02
  • Bonjour Pascal,

    De "ZAZ - Je veux", tu aurais "éblouie" --> MP ?

    Pourquoi un "e" à éblouie, ah... moi je ne mettrais pas de "e" : participe passé de quoi, on ne sait pas, alors masculin singulier... non ?

    Cordialement.



    Joseph Attila PUSZTAY
    EhJoe       Logiciels       Romans       Ecrire


    mercredi 9 mai 2012 08:13
  • Salut

    Je continue de chercher pourquoi cette fonction fonctionne avec certains fichiers et pas d'autres.

    J'ai trouvé en changeant la valeur  du openMode. Binary dans la ligne suivante

    FileOpen(F, MonFichier, OpenMode.Binary, OpenAccess.ReadWrite, OpenShare.LockReadWrite)

    Si je le met en openMode.input il m'affiche bien true à lorsque le fichier est ouvert mais il me laisse true lorsqu'il est fermé

    Je n'arrive pas à trouver la bonne commande.

    @+ Maripit

    mercredi 9 mai 2012 11:30
  • Bonjour Martipit,

    Et ça t'en penses quoi (chez moi ça marche du tonnerre)...

    Option Explicit On
    Public Class Form1
      Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
        Try
          Dim cheminNom = "C:\Users\joe\Documents\SONS\Variété\Zaz - Eblouie par la nuit.mp3"
          Process.Start("winamp.exe") ' le nom de ton exe ?
          Process.Start(cheminNom)
        Catch
          MsgBox("ERREUR" & vbLf & Err.Number & vbLf & Err.Description, vbExclamation)
        End Try
      End Sub
    End Class

    Cordialement



    Joseph Attila PUSZTAY
    EhJoe       Logiciels       Romans       Ecrire


    • Proposé comme réponse EhJoe mercredi 9 mai 2012 12:27
    mercredi 9 mai 2012 12:25
  • Salut ehjoe

    le code que vous me donnez ouvre effectivement les fichiers natifs de karafun soit, les '.kfn". si j'ouvre un '.mp3' qui est compatible avec karafun, votre code ouvre karafun pui ouvre le fichier '.mp3' avec média player qui est le lecteur par défaut des '.mp3'.

    Mon probleme ne reside pas dans la méthode d'ouverture du fichier quelqu'en soit l'extension puisqu'avec le code suivant :

    Shell("""" & TbCheminLogiciel.Text & """ """ & LbTitreChoisitAnnonce.Text & """")

    j'ouvre effectivement tous les fichiers compatibles dans karafun.

    Avec ce post, ce que je voulais c'est savoir dans mon application si le fichier que je viens d'ouvrir est en cours d'utilisation ou non afin d'afficher un label le stipulant pour que l'utilisateur ne l'ance pas un autre fichier alors que le précédent  est encore en cours de lecture.

    le code donné par Pascal Hubert fonctione nickel avec les extensions qui ne sont pas natives de karafun (.mp3, .wmv etc). Par contre avec les .kfn,.kok,.cdg etc, la fonction ne marche pas. C'est comme si le fichier n'était pas en cours d'utilisation.

    après des essais et des modifications, je me suis rendu compte qu'en modifiant l'openMode il les trouvait ouverts mais quand le fichier se fermait, la fonction les trouvait toujours ouverts.

    Voilà ou réside mon soucis.

    Merci à vous pour vous être penché sur mes ennuies.

    @+ Martipit


    • Modifié Martipit mercredi 9 mai 2012 13:03
    mercredi 9 mai 2012 13:01
  • Cher ami,

    Fais voir ton code de la procédure qui appel la fonction ?

    La fonction assigne un fichier puis lance le logiciel associé au fichier, ensuite et a priori c'est le logiciel qui ferme le fichier, mais le fichier est sans doute maintenu ouvert par ton code…

    Je crois que START est plus propice car il n'assigne pas de fichier.

    Tente de fermer le logiciel puis ton programme, et relance le logiciel manuellement (seul), et vois si des fichiers sont toujours déclarés ouverts ?

    Cordialement.



    Joseph Attila PUSZTAY
    EhJoe       Logiciels       Romans       Ecrire


    mercredi 9 mai 2012 13:49
  • Bonjour Martipit,
    Le 08/05/2012 16:09, Martipit a écrit :
     
    [...]
    >
    > Est-ce que cela pourrait avoir un lien avec le programme utilisé pour
    > l'ouverture du ficher ? Peut être que karafun n'est pas reconnu par le
    > IO.System ...
    >
     
    Je ne pense pas que IO.System soit en cause, mais la première
    proposition est une piste. Pour vérifier, tu peux utiliser
    'OpenedFilesView' de Nirsoft :
     
    en faisant deux raccourcis, un qui filtre sur wmplayer :
      OpenedFilesView /processFilter wmplayer.exe
     
    on obtiens ceci :
     
    où l'on voit que le .mp3 est bien ouvert.
     
    Avec un autre raccourci qui filtre sur KaraFunPlayer :
       OpenedFilesView.exe /processFilter KarafunPlayer.exe
     
    on obtiens ceci :
     
    où on constate que le .mp3 n'est pas ouvert. Je suppose qu'il doit
    l'être à un moment, mais de manière très fugace, puis ensuite un
    fonctionnement en cache ?
     
    NB : Si tu es en 64 bits, prends soin de télécharger la bonne version
         et d'accepter le "driver signing test mode".
     
    --
     
    Cordialement,
     
    Jacques.
     

    Cordialement, Jacques
    mercredi 9 mai 2012 15:54
  • Re

    Le code qui ouvre mon logiciel karafun et lance le fichier est le suivant :

    Shell("""" & TbCheminLogiciel.Text & """ """ & LbTitreChoisitAnnonce.Text & """")

    Si je passe par le process.start, lorsque je lance Karafun, il ne reconnait que les fichier.kfn. Il n'ouvre pas les kok ou les cdg si au préalable ils n'ont pas été modfiés en leur disant que karafun est le lecteur par défaut.

    La fonction utilisée pour savoir si mon fichiér est ouvert ou non est celle que pasacal hubert a donné précédemment, à savoir :

    Public Function FileInUse(ByVal MonFichier As String) As Boolean
            If File.Exists(MonFichier) Then
                Try
                    Dim F As Integer = FreeFile()
                    FileOpen(F, MonFichier, OpenMode.Binary, OpenAccess.ReadWrite, OpenShare.LockReadWrite)
                    FileClose(F)
                Catch
                    Return True
                End Try
            End If
            Return False
        End Function

    en ayant pris soin de mettre la commande Imports System.IO en début de code avant le class.

    Ensuite j'ai un bouton (pour l'instant et pour les tests) avec le code suivant :

     Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
            Dim MonFichier As Boolean = FileInUse(TbCheminFichierOuvert.Text)
            MsgBox(MonFichier)
        End Sub

    Une fois karafun ouvert soit par l'appli soit en utilisant l'icon prévu à cet effet j'ouvre le fichier .kfn soit par l'appli soit en passant directement par karaun puis je clique sur mon bouton. et là qu'leque soir la méthode d'ouverture de karafun et du fichier, la msgbox me donne la valeur false.

    Si je modifie l'openMode.binay en OpenMode. input là la msgbox me donne la valeur true. Par contre à la fermeture du fichier, soit à la fin de la lecture, la msgbox, si je clique sur mon bouton, continue de me donner la valeur true.

    Voilà.

    @+ Martipit

    mercredi 9 mai 2012 21:51
  • salut Jacques

    Je viens de tester le system dont tu m'a parlé ci dessus.

    effectivement, lorsque j'ouvre le fichier kfn, le nombre de fichier ouvert augmente de 1 et redescend de 1 aussitot. Il s'agit donc bien d'un fichier qui se charge et fonctionne en cache. lorsque je lance le fichier, il semblerait que tout se passe dans le fichier player.db car il change de couleur au lancement du fichier .kfn et il change également à la fermeture du fichier kfn.

    Par contre, si j'ouvre un kfn contenant de la vidéo, j'ai le fichier mpeg contenu dans le kfn qui s'affiche dans le petit programme que tu m'as conseillé.

    là, je crois que je vais butter bien longtemps avec cette fonction...

    Merci pour ta réponse.

    @+ Martipit


    • Modifié Martipit mercredi 9 mai 2012 22:21
    mercredi 9 mai 2012 22:13
  • Le 10/05/2012 00:13, Martipit a écrit :
    > salut Jacques
    >
    > Je viens de tester le system dont tu m'a parlé ci dessus.
    >
    > effectivement, lorsque j'ouvre le fichier kfn, le nombre de fichier
    > ouvert augmente de 1 et redescend de 1 aussitot. Il s'agit donc bien
    > d'un fichier qui se charge et fonctionne en cache. lorsque je lance le
    > fichier, il semblerait que tout se passe dans le fichier player.db car
    > il change de couleur au lancement du fichier .kfn et il change également
    > à la fermeture du fichier kfn.
    >
    > Par contre, si j'ouvre un kfn contenant de la vidéo, j'ai le fichier
    > mpeg contenu dans le kfn qui s'affiche dans le petit programme que tu
    > m'as conseillé.
     
    Petit, mais costaud :-)
     
    >
    > là, je crois que je vais butter bien longtemps avec cette fonction...
    >
     
    Plutôt que de se baser sur le fichier, ou le cache, dont on ignore le
    fonctionnement interne, ne serait il pas possible de tester la présence
    d'une fenêtre, en l’occurrence de la classe : 'TKFNViewFrm'
     
    ce n'est pas une garantie de pérennité, mais cette fenêtre apparait au
    début de la lecture d'un .mp3 et disparait à la fin du morceau. Ne
    connaissant pas KaraFun, je n'ai pas essayé d'autres situations.
     
    --
     
    Cordialement,
     
    Jacques.
     

    Cordialement, Jacques
    jeudi 10 mai 2012 01:07
  • Le 10/05/2012 00:13, Martipit a écrit :
    > salut Jacques
    >
    > Je viens de tester le system dont tu m'a parlé ci dessus.
    >
    > effectivement, lorsque j'ouvre le fichier kfn, le nombre de fichier
    > ouvert augmente de 1 et redescend de 1 aussitot. Il s'agit donc bien
    > d'un fichier qui se charge et fonctionne en cache. lorsque je lance le
    > fichier, il semblerait que tout se passe dans le fichier player.db car
    > il change de couleur au lancement du fichier .kfn et il change également
    > à la fermeture du fichier kfn.
    >
    > Par contre, si j'ouvre un kfn contenant de la vidéo, j'ai le fichier
    > mpeg contenu dans le kfn qui s'affiche dans le petit programme que tu
    > m'as conseillé.
    >
    > là, je crois que je vais butter bien longtemps avec cette fonction...
    >
    > Merci pour ta réponse.
    >
    > @+ Martipit
    >
    >
     
    Petite précision, il y a un utilitaire plus précis, c'est à dire lié à
    un process "ciblé", toujours chez NirSoft :
     
    malheureusement chez moi, avec KaraFun ça plante.
     
    mais ça resterai orienté accès fichier.
     
    --
     
    Cordialement,
     
    Jacques.
     

    Cordialement, Jacques
    jeudi 10 mai 2012 01:19
  • Bonjour,

    Je crois que la clé de votre problème réside dans le code de Karafun : tout dépende  sur le mode dans lequel le fichier .kfn est chargé, utilisé et libéré par Karafun et comme on n’a pas ces infos (on ne parle pas d’un produit Microsoft il est difficile trouver une solution concrète). La solution de Pascal fonctionne la plupart du temps (voir aussi cette discussion et ce thread) et puis pour les exécutables on peut aussi vérifier s’il y a un processus associé, mais cela n’assure pas que les résultats seront toutes les fois correctes.  

    Je vous donne un exemple : disons que Karafun lit les infos du fichier .kfn est puis le stream (utilisé pour charger les infos dans certaines objets) est fermé. Même si dans Karafun il semble que le fichier est en cours d’utilisation, la réalité peut être différente. En conclusion, je crois qu’il n’est pas facile implémenter votre algorithme sans savoir plus sur les fonctionnalités de Karafun.

    Bonne journée,

    Cipri


    Suivez MSDN sur Twitter   Suivez MSDN sur Facebook


    Ciprian DUDUIALA, MSFT  
    •Nous vous prions de considérer que dans le cadre de ce forum on n’offre pas de support technique et aucune garantie de la part de Microsoft ne peut être offerte.

    jeudi 10 mai 2012 14:36
  • Bonjour,

    Je n'ai pas fait la lecture de tout ce qui c'est dit ....

    Je pense avoir compris que vous souhaitez savoir si un fichier est ouvert par une application tierce

    Ce qu'il faut savoir concernant les ouverture de fichier :
    Il y a les ouvertures simple et les ouvertures en argument

    en donnant un exemple sur les ouvertures de fichier en argument c'est comme ouvrir un fichier au format texte c'est notepad qui va s’exécuter, on ne pourra pas voir le fichier ouvert directement par notepad mais il faudra lire les arguments du programme pour connaitre ce que notepad a ouvert

    Je pense que pour votre programme c'est la même chose.

    Imports System.Management
    
    Public Class Form1
    
        ' Changer [Monprogramme.exe] par le nom du programme concerncer sans les [ et ]
        Public Shared Function FileRun(MyFile) As Boolean
            Try
                Dim searcher As New ManagementObjectSearcher("root\CIMV2", "SELECT * FROM Win32_Process WHERE Caption = '[Monprogramme.exe]'")
    
                For Each queryObj As ManagementObject In searcher.Get()
                    If queryObj("CommandLine").ToString.Contains(MyFile) = True Then
                        Return True
                    End If
                Next
            Catch err As ManagementException
                MessageBox.Show(err.Message)
            End Try
            Return False
        End Function
    
        Private Sub Button1_Click(sender As System.Object, e As System.EventArgs) Handles Button1.Click
            ' changer le "Monfichier" par le nom du fichier que vous voulez rechercher
            MsgBox(FileRun("Monfichier"))
        End Sub
    End Class
    

    Aller dans le menu projet et ajouté une référence, rechercher System.Management


    Cordialement,

    jeudi 10 mai 2012 19:12
    Auteur de réponse
  • Le 10/05/2012 00:13, Martipit a écrit :
     
    Petite précision : si tu as installé / utilisé la version 64 bits de
    l'utilitaire "OpenedFilesView', il a du te demander de passer en mode
    'Driver non signé'. Tu peux repasser en mode 'Driver signé Microsoft' en
    faisant les choix :
        Aide -> Turn Off Test Mode
     
    Cela nécessite un reboot du système. Une méthode pour connaitre le mode
    dans lequel tu te trouve est de positionner la valeur :
         PaintDesktopVersion
     
    de la clé :
       HKEY_CURRENT_USER\Control Panel\Desktop
     
    à 1
     
    tu auras alors affiché en bas en droite de bureau ceci:
     
    --
     
    Cordialement,
     
    Jacques.
     

    Cordialement, Jacques
    vendredi 11 mai 2012 00:44
  • Bonjour à tous et merci pour l'intéret que vous portez à cette discussion.

    Suite aux tests effectués avec le programme dont jacques nous  parlé, j'ai pu cnstater différentes choses concernant l'ouverture des fichiers de type KFN.

    1°/ Si j'ouvre un kfn avec seulement de la musique, des images de fond et le texte des paroles, on ne voit aucun fichier KFN ouvert.

    2°/ Si j'ouvre un kfn contenant la musique, une vidéo et le texte des paroles on voit apparaitre le fichier vidéo ouvert ( Par exemple le fichier kfn a été créé avec une vidéo qui s'appelle Toto.AVI, eh bien je verrai dans le programme communiqué par Jacques comme fichier ouvert Toto.AVI

    Ce qui m'a amené à me poser la question desavoir comment était enregistré le fichier kfn. En fait ce ne doit pas être vraiement une extension de fichier mais plutot une extension qui regroupe plusieurs fichiers : Un pour le MP3, un pour la vidéo, un pour les images etc.... le mp3 étant bien entendu la clé de mon problème car  il ne me faudrait que des kfn vidéo pour faire ce que je demandais dans mon premier post et bien entendu en connaitre également le nom.

    Par la suite j'ai regardé le comportement des différents fichiers ouvert avec karafun et j'ai remarqué qu'à chaque ouverture d'un kfn ou toute autre extension lue et supportée par Karafun, le fichier played.db voyait sa date de modification changée. Il en est de même lors del a fermeture du fichier ouvert.

    Par conséquent, je pense pouvoir résoudre mon soucis en me  basant sur ces modifications de date.

    A l'ouverture d'un fichier, je prend en compte la date de modification du fichier played.db, je stock cette info en mémoire, je boucle sur cette info, tant qu'elle correspond a celle en memoire, l'appli me dit que le kjn est en cours de lecture si elle est différente, c'est que le fichier a été fermée et donc l'appli me dit que la lecture est terminée.

    Mahleureusement, ce ne sera fonctionnel qu'avec Karafun mais c'est le principal.

    Voilà, je pense que l'on peux considérer ce post résolu

    Merci à tous encore une fois.

    @+ Martipit

    vendredi 11 mai 2012 14:02
  • Le 11/05/2012 16:02, Martipit a écrit :
     
    Manifestement, la PJ n'est pas passée.
     
    ----------------------------------------------------------------
     
    Une dernière info, dont j'ignore si elle pourra t'être utile : le
    fichier 'played.db' est au format SQLite, dont il existe des
    implémentations pour .Net :
     voir les rubriques 'Precompiled Binaries For Windows' et 'Precompiled
    Binaries For .NET'.
     
    sqlite3_analyser.
     
    Mais là on sort du thème de ce groupe...
     
    --
     
    Cordialement,
     
    Jacques.
     

    Cordialement, Jacques
    vendredi 11 mai 2012 16:36
  • Re

    Après plusieurs test, en me basant sur le fichier Played.db, le résultat est plus qu'aléatoire et ne donne pas vraiement satisfacttion.

    Jacques, je viens de tester

    ca passe chez moi avec karafun là on constate qu'il ouvre effectivement tout un tas de fichiers dat log etc. Dans le count open et le count close il y a le même nombre donc effectivement, ouvert et fermé aussitot.

    Par contre un chose très intéressante, c'est qu'à l'ouverture de karafun, un répertoire Temp se créer. Il se ferme à la fermeture de karafun.

    A chaque ouverture d'un fichier kfn, dans ce r"épertoire se créer une répertoire dont le nom est sous la forme 01CD2FC2BE7F5830. celui-ci peut être soit vide soit contenir des fichiers en fonction du kfn.

    Peut être serait-il envisageable de travailler sur l'existance ou non de ce répertoire.

    @+ Martipit

    vendredi 11 mai 2012 22:10
  • Le 12/05/2012 00:10, Martipit a écrit :
    > Re
    >
    > Après plusieurs test, en me basant sur le fichier Played.db, le résultat
    > est plus qu'aléatoire et ne donne pas vraiement satisfacttion.
    >
    > Jacques, je viens de tester
    >
    >
    > ca passe chez moi avec karafun là on constate qu'il ouvre effectivement
    > tout un tas de fichiers dat log etc. Dans le count open et le count
    > close il y a le même nombre donc effectivement, ouvert et fermé aussitot.
    >
    > Par contre un chose très intéressante, c'est qu'à l'ouverture de
    > karafun, un répertoire Temp se créer. Il se ferme à la fermeture de karafun.
    >
    > A chaque ouverture d'un fichier kfn, dans ce r"épertoire se créer une
    > répertoire dont le nom est sous la forme 01CD2FC2BE7F5830. celui-ci peut
    > être soit vide soit contenir des fichiers en fonction du kfn.
    >
    > Peut être serait-il envisageable de travailler sur l'existance ou non de
    > ce répertoire.
    >
    > @+ Martipit
    >
     
    Cela pourrait effectivement être une piste. Il faudrait que j'arrive à
    faire fonctionner 'process_activity_view'
     
    Es tu en 32 ou en 64 bits ?
     
    --
     
    Cordialement,
     
    Jacques.
     

    Cordialement, Jacques
    vendredi 11 mai 2012 22:33
  • re

    j'ai fais les essais sur un 32 et un 64 bits j'ai les 2 versions.

    Suite à ce que j'a i énoncé dans le précédent post, j'ai mis le code suivant dans un timer que je déclenche lorsque j'ouvre le fichier karaokés via un bouton :

     If Directory.Exists("c:\Programdata\recisio\karafun\temp") = False Then Exit Sub
            Dim RepNames = Directory.EnumerateDirectories("c:\Programdata\recisio\karafun\temp")
            If RepNames.Count = 1 Then
                AfficheInfoEnCours()
                BtnAnnoncer.Enabled = False
                LabLectureEnCours.Visible = True
                PbLectureEnCours.Visible = True
            End If
            If RepNames.Count <> 1 Then
                BtnAnnoncer.Enabled = True
                LabLectureEnCours.Visible = False
                PbLectureEnCours.Visible = False
                TbInterpreteEnCours.Text = ""
                TbTitreEnCours.Text = ""
                Exit Sub
            End If

    et cela semble fonctionner à tous les coups.

    Merci à vous

    @+ Martipit

    samedi 12 mai 2012 00:16