|
Trouver une ressource
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)
Informations & options pour cette discussion
|
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 (nIndex==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
|
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.phpTon 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-DRIVERTu 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
Livres en rapport
|
Téléchargements
Logiciels à télécharger sur le même thème :
|