IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Windows Discussion :

Trouble avec Excel avec un programme qui utilise un Hook.


Sujet :

Windows

  1. #1
    Nouveau Candidat au Club
    Profil pro
    Inscrit en
    Février 2005
    Messages
    2
    Détails du profil
    Informations personnelles :
    Localisation : Canada

    Informations forums :
    Inscription : Février 2005
    Messages : 2
    Points : 1
    Points
    1
    Par défaut Trouble avec Excel avec un programme qui utilise un Hook.
    Salut

    J'ai un problème assez bizzard.
    Ou je travail je crée un programme qui dois absolument utiliser un hook pour attrapper les messages system "SetFocus". Jusque la aucun problème, ca marche a merveille. Sauf qu'on a remarqué que lorsque l'on ouvre Excel et que l'on sélectionne "File/Open"(excuser il est en anglais), on se retrouve dans le répertoire "Office11" et non dans le répertoire "My Documents". Et seul Execel fait ca. Ca embête beaucoup mon patron, qui utilise excel tous les jours.

    Voici des parcelle de code pour mieux voir le problème
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    DTIToolsExport BOOL HOOK_Init(void)
    
    {
    
    	// Initialisation
    
    	g_Memory = NULL;
    
    	g_hMemShare = NULL;
    
    
    
    	// Get share memory
    
    	if((g_Memory = sHOOK_GetShareMem(&g_hMemShare)) == NULL)
    
    		EXIT(ERROR);
    
    
    
    	// Get system windows handle
    
    	g_Memory->ProcessID = GetCurrentProcessId();
    
    	g_Memory->hShell_TrayWnd = FindWindowEx(NULL,NULL,"Shell_TrayWnd",NULL);
    
    	g_Memory->hReBarWindow32 = FindWindowEx(g_Memory->hShell_TrayWnd,NULL,"ReBarWindow32",NULL);
    
    	g_Memory->hMSTaskSwWClass = FindWindowEx(g_Memory->hReBarWindow32,NULL,"MSTaskSwWClass",NULL);
    
    	g_Memory->hSysTabControl32 = FindWindowEx(g_Memory->hMSTaskSwWClass,NULL,"SysTabControl32",NULL);
    
    
    
    	// Set new hook
    
    	if((g_Memory->hHook = SetWindowsHookEx(WH_CBT,sHOOK_Proc,g_hInstance,0)) == NULL)
    
    		EXIT(ERROR);
    
    
    
    	FlushViewOfFile(g_Memory,sizeof(SHAREMEM));
    
    
    
    	return(TRUE);
    
    
    
    ON_EXIT(ERROR)
    
    
    
    	return(FALSE);
    
    }
    
    
    
    LRESULT WINAPI sHOOK_Proc(int nCode,WPARAM wParam,LPARAM lParam)
    
    {
    
    	SHAREMEM	*ShareMem;
    
    	HHOOK		hHook;
    
    	HANDLE		hShareMem;
    
    	
    	
    	// Initialisation
    
    	if((ShareMem = sHOOK_GetShareMem(&hShareMem)) == NULL)
    
    		EXIT(ERROR);
    
    
    
    	hHook = ShareMem->hHook;
    
    
    
    
    	// ... le code du hook, j'ai le même problème si je le mets en commentaire, alors je l'ai enlevé pour être plus facile à lire.
    
    
    	sHOOK_ReleaseShareMem(&ShareMem,&hShareMem);
    
    
    
    	return(CallNextHookEx(hHook,nCode,wParam,lParam));
    
    
    
    ON_EXIT(ERROR)
    
    
    
    	return(0);
    
    }
    Si quelqu'un a déjà eu se problème, et a la solution ca serais apprécié.

  2. #2
    Expert éminent sénior

    Homme Profil pro
    pdg
    Inscrit en
    Juin 2003
    Messages
    5 752
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : pdg

    Informations forums :
    Inscription : Juin 2003
    Messages : 5 752
    Points : 10 683
    Points
    10 683
    Billets dans le blog
    3
    Par défaut
    Bizarre en effet.
    Peut être que ta dll hook effectue (directement ou indirectement via une autre dll) un changement de répertoire courant.
    Juste pour tester, que se passe-t-il si dans sHOOK_Proc tu rajoutes un SetCurrentDirectory sur Mes Documents avant l'appel à CallNextHookEx ?

  3. #3
    Nouveau Candidat au Club
    Profil pro
    Inscrit en
    Février 2005
    Messages
    2
    Détails du profil
    Informations personnelles :
    Localisation : Canada

    Informations forums :
    Inscription : Février 2005
    Messages : 2
    Points : 1
    Points
    1
    Par défaut
    J'ai trouver la réponse.

    Le dll ou il y a le hook étais assez volumineux, j'ai transporter les fonction du hook dans un dll apart. Tous est redevenu à la normal.

    D'après moi excel utilise la fonction GetOpenFileName de l'API de windows et utilise la variable lpfnhook de la structure OPENFILENAME. Il avait une interférance dans ma dll qui empêchait à excel d'utiliser son hook. En mettant mon hook dans un nouveau dll, il n'y a plus d'interférence et le hook de excel marche comme il faut.

    Je te remerci tous de même de ton aide.

  4. #4
    Expert éminent sénior

    Homme Profil pro
    pdg
    Inscrit en
    Juin 2003
    Messages
    5 752
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : pdg

    Informations forums :
    Inscription : Juin 2003
    Messages : 5 752
    Points : 10 683
    Points
    10 683
    Billets dans le blog
    3
    Par défaut
    Excel utilise sa propre dialogue GetOpenFileName il me semble (regarde bien, elle est pas tout à fait pareil).
    L'interférence peut se produire aillleurs, au niveau du chemin par défaut ou du répertoire courant. Bref tu as résolu le pblm c'est l'essentiel.

  5. #5
    Expert éminent sénior
    Avatar de Médinoc
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2005
    Messages
    27 379
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2005
    Messages : 27 379
    Points : 41 573
    Points
    41 573
    Par défaut
    Il se peut qu'ils utilisent quand même GetOpenFileName() et un hook: La fonction est assez personalisable pour cela.

  6. #6
    Expert éminent sénior

    Homme Profil pro
    pdg
    Inscrit en
    Juin 2003
    Messages
    5 752
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : pdg

    Informations forums :
    Inscription : Juin 2003
    Messages : 5 752
    Points : 10 683
    Points
    10 683
    Billets dans le blog
    3
    Par défaut
    Oui tout est possible. Mais je crois me souvenir avoir constaté un comportement différent avec la "liste à gauche" d'emplacements que tu peux personnaliser dans cette boite, ce que j'avais fait sauf que Office s'en fichait.
    Et j'avais déjà lu quelque part que Office utilisait ses propres styles / boites (y'a qu'à voir le look de Office 2003, y'a presque rien de standard Win32, et Excel 11 n'est pas lié statiquement à comctl32.dll), simplement pour que même sur un vieux Windows il ait un style moderne.

Discussions similaires

  1. Réponses: 0
    Dernier message: 24/03/2014, 10h30
  2. [AC-2000] Automation avec Excel : lancer une macro qui trie les données
    Par fredschmidt dans le forum VBA Access
    Réponses: 3
    Dernier message: 02/09/2009, 14h47
  3. [MySQL] Requete sql avec 2 id different mais qui utilise la meme table
    Par guigui69 dans le forum PHP & Base de données
    Réponses: 3
    Dernier message: 05/11/2008, 16h32
  4. Envoi de mail avec excel (avec message et p.jointe)
    Par Obelix73 dans le forum Macros et VBA Excel
    Réponses: 1
    Dernier message: 05/05/2007, 00h04
  5. Fusion de cellules avec données avec Excel
    Par griese dans le forum Excel
    Réponses: 8
    Dernier message: 28/07/2006, 17h02

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo