locked
Orientation avec Winspool RRS feed

  • Question

  • L'entreprise dans laquelle je travail à créé une application en Toolbook (pour ceux qui connaissent). Ce langage ne permet pas de modifier le paramétrage des imprimantes lors des impressions (si ce n'est modifié l'imprimante par défaut). J'ai donc voulu créer une DLL en c++ que j'ai linké au programme Toolbook. J'ai déja réussi à créer une DLL permettant de modifier les paramètres de l'imprimante par défaut à l'aide de la librairie Winspool. Jusque la aucun problème mais le fonctionnement n'est pas optimum en effet mon programme étant multi-utilisateurs cela peut provoquer des conflits lors d'impressions simultanée (modifications définitives de la configuration de l'imprimante par défaut). J'ai donc essayé de refaire une DLL qui modifierais les paramètres de l'imprimante mais uniquement pour l'application courante (pas de modifications sur la configuration par défaut). Je m'intéresse pour l'instant uniquement à l'orientation. Mon code semble fonctionner correctement (les objets sont bien modifiés au sain du code) mais aucun changement au niveau de mon application. J'ai le même problème avec n'importe quelle application Windows.
    Des idées ?
    Je joint mon code ci-dessous et vous remercie d'avance de l'aide que vous pourrez m'apporter.

        DWORD pcchBuffer,dwNeeded,dwRet;
    HANDLE hPrinter;
    HWND hwnd;

    /*
    * Etape 1 :
    * Identification de la fenêtre Windows
    */
    hwnd = GetActiveWindow();
    /*
    * Etape 2 :
    * Récupération de l'imprimante par défaut
    */
    GetDefaultPrinter(NULL,&pcchBuffer);
    TCHAR* PrinterName = new TCHAR[pcchBuffer];
    GetDefaultPrinter(PrinterName,&pcchBuffer);
    /*
    * Etape 3 :
    * On ouvre l'imprimante
    */
    if (!OpenPrinter(PrinterName, &hPrinter, NULL))
    return;
    /*
    * Etape 4 :
    * Allocation de la taille du buffer
    */
    dwNeeded = DocumentProperties(0,hPrinter,PrinterName,NULL,NULL,0);
    DEVMODE* pDevMode = (LPDEVMODE)malloc(dwNeeded);
    /*
    * Etape 5 :
    * Récupération du DevMode
    */
    dwRet = DocumentProperties(hwnd,hPrinter,PrinterName,pDevMode,NULL,DM_OUT_BUFFER);
    if (dwRet != IDOK)
    {
    free(pDevMode);
    ClosePrinter(hPrinter);
    return;
    }
    /*
    * Etape 5 :
    * Modification de l'orientation
    */
    if (pDevMode->dmFields & DM_ORIENTATION)
    pDevMode->dmOrientation = DMORIENT_LANDSCAPE;
    /*
    * Etape 6 :
    * Enregistrement des modifications dans le DevMode
    */
    dwRet = DocumentProperties(hwnd,hPrinter,PrinterName,pDevMode,pDevMode,DM_IN_BUFFER | DM_OUT_BUFFER);
    /*
    * Etape 7 :
    * Fermeture de l'imprimante et désalocation des variables
    */
    ClosePrinter(hPrinter);
    if (dwRet != IDOK)
    {
    free(pDevMode);
    return;
    }
    return;
    jeudi 16 juillet 2009 12:43