Vous ne trouvez pas de réponse à votre problème ? Alors posez la question dans le forum. Souvenez-vous qu'il n'y a jamais de question bête, mais rester dans l'ignorance parce que l'on n'ose pas poser une question, ça c'est une erreur !

Sujet : Mon IHM est bloqué et je veut cliquer :-( [ Divers / Débutant(e) ] (nerone21)

jeudi 4 janvier 2007 à 11:31:11 | Mon IHM est bloqué et je veut cliquer :-(

nerone21

Bonjour a vous les codeurs et bonne année bien sur!

alors ti probleme assez recurent mais j'ai beau parcourir le forum je comprend pas.

De maniere général je ne comprend pas la facon et a quel occasion utiliser les threads ou les timers mais je sais que dans mon probleme actuel je vais en avoir besoin,

je suis en train de creer une appli qui utilise une fonction de recherche dans les dossiers certains type de fichiers, jusque la tout va bien, mon ihm se separe en 2 boites de dialogues:

- la premiere qui permet de determiner quoi et où chercher
- la deuxieme qui est celle de recherche et donc c'est dans la deuxieme que j'ai un probleme:

la recherche s'effectue dés l'initialisation de la deuxieme fenetre mais si par un malheureux hasard de mon envie, je veut appuyer sur un bouton "arret recherche" et bien je ne peut pas car la fenetre est bloqué jusqu'a ce que la fonction de recherche se termine.

et donc en definitive j'aimerais que la fenetre reste active et que je puisse detecter, pendant la recherche, l'appui sur le bouton... alors je suis desolé, je sais que ce genre de questions a été posée des milliers de fois mais malgré mais recherches assidues, je n'ai pas trouvé.

et voila en gros mes fonctions de recherche:

void RechercherFichiers (char NomDossier[MAX_PATH])
{
    WIN32_FIND_DATA Find;
    HANDLE            hFind;
    BOOL            Finished=FALSE;
    char            NomFichier[MAX_PATH*2];
    if (SetCurrentDirectory (NomDossier)==FALSE)
        return;

    // Recherche premier fichier
    hFind=FindFirstFile ("*.*", &Find);
    if (hFind==INVALID_HANDLE_VALUE)
       {
        // pas de fichier
          Finished=TRUE;
    }
    else
    {
        // Fichier trouvé
        wsprintf (NomFichier, "%s%s", NomDossier,Find.cFileName);
        Extens(NomFichier);
    }
    // Les autres fichiers
    while (!Finished)
    {
           if (!FindNextFile (hFind, &Find))
            // Plus de fichier
              Finished=TRUE;
        else
        {
            // Fichier trouvé
            wsprintf (NomFichier, "%s%s", NomDossier,Find.cFileName);
            Extens(NomFichier);
        }
    }

    FindClose (hFind);
}



// Recherche les fichiers textes dans le dossier spécifié
// Cette fonction est récursive, elle s'apelle à chaque fois
// pour évoluer dans la hiérarchie des dossiers

void RechercherDossiers (char NomDossier[MAX_PATH])
{
    WIN32_FIND_DATA Find;
    HANDLE            hFind;
    BOOL            Finished=FALSE;
    char            Buffer[MAX_PATH*2];


    if (SetCurrentDirectory (NomDossier)==FALSE)
        return;

    if (NomDossier[lstrlen(NomDossier)-1]!='\\')
        lstrcat (NomDossier, "\\");

    // Recherche les fichiers multimedias du dossier
    RechercherFichiers(NomDossier);

    // Recherche premier sous dossier
    hFind=FindFirstFile ("*.", &Find);
    if (hFind==INVALID_HANDLE_VALUE)
        // Pas de dossier
          Finished=TRUE;
    else
    {
        // Récupère le nom du dossier et lance la recherche si le dossier est valide
        // c'est à dire que c'est bien un dossier, autre que '.' et '..'

        wsprintf(Buffer,"%s%s", NomDossier, Find.cFileName);
        if (DossierValide(&Find))
            RechercherDossiers(Buffer);
    }

    // Recherche les autres dossiers
    while (!Finished)
    {
         if (!FindNextFile (hFind, &Find))
        // Plus de dossier
              Finished=TRUE;
      else
      {
        // Récupère le nom du dossier et lance la recherche si le dossier est valide
        // c'est à dire que c'est bien un dossier, autre que '.' et '..'

        wsprintf(Buffer,"%s%s", NomDossier, Find.cFileName);
        if (DossierValide (&Find))
            RechercherDossiers(Buffer);
      }
    }
    FindClose (hFind);
}


Et l'initialisation de la fenetre de recherche si ca peut servir:
case WM_INITDIALOG:
            nIndex=(int) lParam;
            hWndResults=hWnd;
           
// Affiche la fenêtre
            ShowWindow (hWnd, SW_SHOW);
            UpdateWindow(hWnd);
            NbrFilesINT=0;
            if (nIn
dex==0)
            {
                // Recherche dans tous les lecteurs

                nCount=(int) SendDlgItemMessage (hWndMain, IDC_LECTEURS, CB_GETCOUNT, (WPARAM) 0, (LPARAM) 0);
                for (i=1;i<nCount;i++)
                {
                    SendDlgItemMessage (hWndMain, IDC_LECTEURS, CB_GETLBTEXT, (WPARAM) i, (LPARAM) (LPCSTR) strDriveSelected);

                    // On veut que par exemple C:\ et pas C:\ [NOM DU VOLUME]
                    strDriveSelected[3]='\0';
                    RechercherDossiers (strDriveSelected);
                }
            }
            else
            {

                // Recherche dans le lecteur spécifié
                SendDlgItemMessage (hWndMain, IDC_LECTEURS, CB_GETLBTEXT, (WPARAM) nIndex, (LPARAM) (LPCSTR) strDriveSelected);
                // On veut que par exemple C:\ et pas C:\ [NOM DU VOLUME]
                strDriveSelected[3]='\0';
                RechercherDossiers (strDriveSelected);
            }
            SetDlgItemText (hWnd, IDC_MESSAGEFIN, "Le programme a trouvé le(s) extension(s) spécifiée(s) dans le(s) fichier(s) suivant(s).\n\nSélectionnez un fichier et cliquez sur Ouvrir pour visualiser le fichier.");
            sprintf(NbrFilesCHAR,"%d",NbrFilesINT);
            strcat(Nbrfile,NbrFilesCHAR);
            postab=0;
            return TRUE;


Merci bien a vous si vous pouvez m'apporter de l'aide.

Bonne continuation.

jeudi 4 janvier 2007 à 11:38:49 | Re : Mon IHM est bloqué et je veut cliquer :-(

nerone21

c'est encore moi, j'en profite pdt ke je parle de thread pour aussi demander autre chose:

- mon programme doit s'executer au demarrage de windows avec une recherche direct dés le demarrage et dc comme le processus de recherche est assez lourd pour le processeur, j'aimerais a la limte qu'il s'allume avec un processus de type priorité basse, c'est a dire qu'il ne gene pas trop trop le reste des programmes qui serait amener a tourner en même temps.

- et aussi j'aimerais savoir si c'est possible de rendre un processus recursif, imaginons que l'utilisateur l'arrete grace a CTRL+ALT+SUPPR, j'aimerais que ce soit detecté et qu'il se relance de lui-même, un peu comme explorer.

merci et encore dsl de poser tant de question.

jeudi 4 janvier 2007 à 14:37:27 | Re : Mon IHM est bloqué et je veut cliquer :-(

racpp

Administrateur CodeS-SourceS
Salut,
Effectivement, dans ce genre de cas un thread est indispensable. Voici une page d'un chapitre sur les threads. Elle contient un lien vers un exemple complet:
http://bob.developpez.com/tutapiwin/article_50.php
Ton thread pourra ouvrir sa propre boite de dialogue et effecuer les recherches en permettant d'interrompre l'opération en cliquant sur un bouton de la boite mère.

Pour que le programme s'exécute au démarrage, tu as deux choix:
1- Ajouter le chemin de ton exe dans l'une des clés suivantes de la base de registres:
-HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Run
-HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Run
2- Créer un service Windows.

Pour empêcher l'arrêt de ton programme, je pense qu'il faudra passer par un driver. Voici un code source permettant de cacher un processus:
CACHER-PROCESSUS-CHOIX-DRIVER
Tu peux soit utiliser le driver fourni avec le source ou le créer si tu as la DDK.
Une autre solution consiste à relancer le programme juste après sa fin en interceptant un message du système. La encore un driver est indispensable.


jeudi 4 janvier 2007 à 15:39:22 | Re : Mon IHM est bloqué et je veut cliquer :-(

nerone21

merci a toi rapcc, mais j'ai deja trouvé cette page et ca m'avance pas plus pakeu je sais pa du tout où demarrer mes threads, je saurai où les arreter mais pas exactement quand les demarrer...

a la limite ce que j'aimerais trouver c'est une source avec une boite de dialogue toute simple avec un bouton qui ouvre une autre boite de dialogue qui ferrait tourner une boucle infinie ou un truc du genre et un bouton arreter pour la stopper. avec ca je saurai m'adapter et je comprendrais le processus du truc...

merci pour le reste par contre et bonne continuation.



Cette discussion est classé dans : dossier, recherche, find, hfind, nomdossier


Répondre à ce message

Sujets en rapport avec ce message

recherche du dossier application data [ par fuliculi ] Bonjour à tous,je cherche le répertoire "application data" de la session en court pour y retrouver des fichiers de flash *.sol (shared object) histoir PB pour parcourir tout les dossiers [ par supers03 ] Bonjours à tousJ'ai écrit un programme qui parcour un dossier et ses sous-dossier, avec une fonction qui "s'auto appel" :void cherche(char *s){    HAN retour d'une fonction [ par noulii ] J'ai utilisé la fonction suivante, venant de "bruno" que j'ai trouvé sur ce site :HANDLE hfind;WIN32_FIND_DATA wfd;// Initialise la recherchehfind = F Fichier corbeille [ par akalys ] BonjourJ'aimerais afficher dans une listview les fichiers contenu dans la corbeille.Voici mon code :            HANDLE hfind;        WIN32_FIND_DATA w recherche d'un dossier [ par zemzemi ] bonjouraide moi svp de trouver de codes sources en CPP ou C qui donnée la possibilite la recherche d'un fichier ou d'un dossier exist dans la PCmercib recherche exemple [ par doberman7578 ] Dans le cadre d'un projet en bts informatique(en C sous linux), je dois effectué un sereur client transfert d'image ( ce que j'aieffectué) mais je doi recherche de fichier pour le language C [ par Cyr62110 ] Savez vous ou l'on pourait avoir les fichier :-Stdio.h-Stdlib.h-Temp.hSi quelqu'un serait me dire où me les procurer, je lui en serait reconnaissant. recherche d'un fichier sous lunix [ par zemzemi ] salut mon travail s'agit d'implimente en c\cpp et sous linux un prog qui prent comme entre un nom de fichier et donne en sortie si cette fichier exis ToolBar InternetExplorer [ par oliversleep ] Salut tout le monde, voilà je suis à la recherche de documentation pour la réalisation d'une appli (DLL ou EXE) qui serai mise dans l'interface d'In Recherche logiciels [ par ralebole ] Je recherche des logiciels complet gratuit sans bug (pas la source et pas de net framwork) pour mon site TOUT-FREEWARE  http://herve22.ifrance.com   S


Nos sponsors

Sondage...

CalendriCode

Décembre 2008
LMMJVSD
1234567
891011121314
15161718192021
22232425262728
293031    

Consulter la suite du CalendriCode

Téléchargements

Logiciels à télécharger sur le même thème :



Développement réalisé par Nicolas SOREL (Nix) avec l'aide de : Cyril DURAND et Emmanuel BAÏSE, 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
Temps d'éxécution de la page : 0,468 sec

Google Coop CodeS-SourceS Google Coop CodeS-SourceS


Certaines images présentes sur le site (notament certains avatars) sont issues des collections IconShock, donc si vous souhaitez utiliser ces icons vous devez les acheter, ne les copiez pas et ne utilisez pas dans vos sites et applications sans les avoir commandé.