begin process at 2010 02 10 11:51:08
  Trouver un code source :
 
dans
 
Accueil > Forum > 

C++ & C++ .NET

 > 

Système

 > 

Autre

 > 

Subclassage de Word 2007


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

Subclassage de Word 2007

mardi 23 juin 2009 à 16:20:14 | Subclassage de Word 2007

braxivamov

Bonjour dans mon projet je subclasse l'application word 2007 pour y ajouter un bouton.
J'ai donc implémenté dans une dll un hook shell ou je ne subclasse que les fenêtres "OpusApp".
Jusqu'ici tout marchait bien mais en faisant plusieurs tests je me suis aperçu que si j'ouvre plusieurs fenêtres, que j'en ferme une seule et que je veux en ré ouvrir une, elle crashent toutes.

C'est un programme console qui lance une fonction exportée d'une dll. Cette fonction met en place le hook.

//J'ai un tableau dans lequel je stocke tous les hwnd subclassés, num me donne le nombre de fenêtres subclassées
LRESULT CALLBACK hookProc( int nCode, WPARAM wParam, LPARAM lParam ) {

    DWORD        tid, pid;
    int                   resNotif = -1;
    int                   count = 0;

    TCHAR nom[50];
    GetClassName( ((HWND)wParam), nom, 50 );
    int res = strcmp( "OpusApp", nom );


if( nCode >= 0 ){

    if( nCode == HSHELL_WINDOWCREATED && res == 0){

         for ( count=0; count<=Num; count++ ){

                    tid = ::GetWindowThreadProcessId( (HWND)wParam, &pid );

                    for ( int i = 0; i <= Num; i++) {
       
                        if( Hndll[i].pid == pid || Hndll[i].tid == tid ) {
                            SameProc = TRUE;
                            log("fenetre creee sous un pid/tid connu pas d'incrementation de la lib\n");
                        }
                    }

                    if( SameProc == FALSE) {

                        char libname[MAX_PATH];
                        ::GetModuleFileName( ThisMod, libname, MAX_PATH );

                        if( !::LoadLibrary(libname) ){
                            log("Le chargement de la librairie a echoue (shell creation)\n");
                            goto END;
                        }
                    }

                    //Ce tab contient les originaux
                   OldWndHndl[count] = SetWindowLong( (HWND)wParam, GWL_WNDPROC, (long)WindowProc );

                    if( !OldWndHndl[count] ){
                        log("Le subclassage de %s a echoue (creation)\n", nom);
                    }else{
                        Hndll[count].hwnd = (HWND)wParam;
                        tid = ::GetWindowThreadProcessId( (HWND)wParam, &pid );
                        Hndll[count].pid = pid;
                        Hndll[count].tid = tid;
                        Num++;
                        printf("bla\");
                     }
               }
        }
END:
    SameProc = FALSE;
    return CallNextHookEx( Hhk, nCode, wParam, lParam );
}

Donc si j'ouvre 50 words tout marche bien mais si je ferme une fenêtre et que j'en réouvre un c'est le crash apres m''avoir affiché bla...
Les fenêtres word sont créées sous un même pid et sous un même threadId, je pense que le problème viens de là mais impossible de trouver vraiment la cause du problème et donc de le résoudre.

J'ai mis ce code car je pense c'est le plus important mais je peux vous fournir le reste si besoin.

Dans le rapport d'erreurs ce code est généré : 0xc00000fb
Error Code: 0xC00000FB
Error Translation: BERR_ACCNT_LM_ERROR
Problem: Unable to create a Windows NT account for user %1. %2

Si ce message peut vous aidez, moi il ne m'a servit a rien .... : /

Merci par avance à toute personne qui se pencherait sur mon cas =)









Cette discussion est classée dans : count, hwnd, wparam, pid, tid


Répondre à ce message

Sujets en rapport avec ce message

Pb sur un ptit bout de prog en DirectX.... [ par Haldwin ] Salut a tous....Voila j'ai deux ptits pbs quand je lance cette appli ci-dessous... (VC++)La première est q'une fois sur deux ma variable hWnd apres le pb a la fermeture de win [ par stick ] bonjours,alors voilou, je fais une appli en utilisant l'api window, mais si je ferme windows sans quitter le programme auparavant, celui ci plante et Dll Visual Aide [ par TheMaster ] Salut!j'ai un probleme, j'ai créer un logiciel permettant de visualiser des images.Les images sont stocke en ressource dans un dll.Mais je n'arrive pa Probleme applic windows simple [ par zzzzzz ] #include #include "resource.h"HWND handleee;HINSTANCE hinstanceee;const char ClasseWindows[] = "NomClasseWindows";LRESULT CALLBACK WindowProcedure(HWN Probleme SendMessage(...) [ par Hevelina ] SendMessage(HWND hWnd, UINT Msg, WPARAM wParam, LPARAM lParam ); Bonjour j ai quelques problemes.Je doit faire un programme de lecture de musique pour Edit Control [ par cybermatthieu ] Bonjours,Je suis en Train d'apprendre comment progrmmer en Win32 avec la Class Windows.h. Ce petit programme ne fait q'afficher des caracter mais j'ai crer "dialog non modal" [ par comfm ] BonjourJe n'arrive pas à créer une boite de dialogue non modal, c'est à dire celle qui permet d'être tjs affichée et on peut cliquer derriere sans pro ouvrir une 2eme fenetre avec editbox et tout et tout, c'est possible? [ par Arnaud16022 ] Hello tout le monde!je voudrais mettre un bouton dans une fenetre (ca c'est facile), mais seulement quand on clique dessus un autre fenetre s'ouvre, a thread sur WndProc [ par kidpigeyre ] G une fonction WndProc chargé de réaliser tout mon programme (application GUI) (avec fenetre windows) et jmerai pouvoir faire un thread de cette fonct PB EditBox [ par SfyLer ] Bonjour à tous !J'ai créé un scanner de port sous dos, et j'ai commencer a le faire sous windows, j'ai presque fini le seul pb que j'ai c'est que je n


Nos sponsors


Sondage...

Comparez les prix

CalendriCode

Février 2010
LMMJVSD
1234567
891011121314
15161718192021
22232425262728

Consulter la suite du CalendriCode

 
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 : 8,986 sec (4)

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