[RESOLVIDO] capturar porta de impressora padrão do windows

Discussão em 'EMS , HCM e Totvs 11' iniciado por LimBh, Novembro 1, 2013.

Status do Tópico:
Não esta aberto para novas mensagens.
  1. LimBh

    LimBh Sem Pontuação

    Pessoal,

    Estou com um problema, o app server está rodando no linux, banco Oracle. Fiz a gravação de um arquivo em um diretório do Linux, mapeado no Windows (samba). Preciso imprimi-lo no ambiente Windows, para isto preciso capturar a porta da impressora padrão da estação de onde está rodando o Datasul (Totvs 11). O comando session printer-port só funciona para Windows! Teria uma outra maneira de capturar a porta da impressora padrão definida na estação?
    Desde já agradeço.
  2. fdantas

    fdantas Administrator Moderador

    Amigo, achei alguns códigos na net veja se algum deles te ajuda.
    Vou postar todos aqui, pois pode ajudar outras pessoas.

    Segue

    Código:
    OS-COMMAND NO-WAIT "COPY c:\ticket.txt file://printserver/printer1".
    OS-COMMAND NO-WAIT "COPY c:\ticket.txt LPT1.
    OS-COMMAND NO-WAIT PRINT "c:\ticket.txt"
    OS-COMMAND NO-WAIT COPY "c:\ticket.txt" > LPT1

    Código:
    DEFINE VARIABLE viReturnCode AS INTEGER NO-UNDO.
    DEFINE VARIABLE fileName AS CHARACTER NO-UNDO.
    
    fileName = "c:\ticket.txt":U.
    RUN ShellExecuteA(0,
                    "print":U,
                    fileName,
                    "":U,
                    "":U,
                    0,
                    OUTPUT viReturnCode).
    
    PROCEDURE ShellExecuteA EXTERNAL "shell32.dll":U:
      /* Handle to parent window */     
      DEFINE INPUT PARAMETER plHWND      AS LONG      NO-UNDO.
      /* Operation to perform: open, print */
      DEFINE INPUT PARAMETER pcOperation  AS CHARACTER NO-UNDO.
      /* Document or executable name */
      DEFINE INPUT PARAMETER pcFile      AS CHARACTER NO-UNDO.
      /* Command line parameters to executable in File */
      DEFINE INPUT PARAMETER pcParameters AS CHARACTER NO-UNDO.
      /* Default directory */
      DEFINE INPUT PARAMETER pcDirectory  AS CHARACTER NO-UNDO.
      /* whether shown when opened:
          0 hidden, 1 normal, minimized 2, maximized 3,
          0 if File is a document */
      DEFINE INPUT PARAMETER plShowCmd    AS LONG      NO-UNDO.
      /* Return Code: less than or equal to 32 */
      DEFINE RETURN PARAMETER plInstance  AS LONG      NO-UNDO.
    END.
    Código:
    DEFINE VARIABLE whand AS HANDLE NO-UNDO.
    DEFINE VARIABLE file-to-print AS CHARACTER NO-UNDO INITIAL "c:\ticket.txt".
    DEFINE VARIABLE p_FontNumber AS INTEGER NO-UNDO INITIAL 12.
    DEFINE VARIABLE p_UseDialog AS INTEGER NO-UNDO INITIAL 0.
    DEFINE VARIABLE p_PageSize AS INTEGER NO-UNDO INITIAL 20.
    DEFINE VARIABLE p_PageCount AS INTEGER NO-UNDO INITIAL 0.
    DEFINE VARIABLE p_Printed AS LOGICAL NO-UNDO.
    DEFINE VARIABLE vPrinter AS CHARACTER NO-UNDO.
    vprinter = '"' + SESSION:pRINTER-NAME + '"'.
    
    ASSIGN whand = CURRENT-WINDOW.
    RUN setKey ("Windows", "Device", "TSP100,WinSpool,Ne01:").
    SESSION:pRINTER-CONTROL-HANDLE = 0.
    
    RUN adecomm\_osprint.p (INPUT whand,
    INPUT file-to-print,
    INPUT p_FontNumber,
    INPUT p_UseDialog,
    INPUT p_PageSize,
    INPUT p_PageCount,
    OUTPUT p_Printed).
    /*
    IF p_Printed = TRUE THEN
    MESSAGE "Print successful!" VIEW-AS ALERT-BOX.
    
    ELSE
    MESSAGE "Print failed." VIEW-AS ALERT-BOX.
    */
    PROCEDURE SetKey:
    DEFINE INPUT PARAMETER pSection AS CHAR NO-UNDO.
    DEFINE INPUT PARAMETER pEntry AS CHAR NO-UNDO.
    DEFINE INPUT PARAMETER pString AS CHAR NO-UNDO.
    DEFINE VAR result AS INT NO-UNDO.
    RUN WriteProfileStringA(pSection,pEntry,pString, OUTPUT result).
    END PROCEDURE.
    PROCEDURE WriteProfileStringA EXTERNAL "KERNEL32.DLL":
    DEFINE INPUT PARAMETER lpszSection AS CHAR.
    DEFINE INPUT PARAMETER lpszEntry AS CHAR.
    /*DEFINE INPUT PARAMETER lpszString AS CHAR.*/
    DEFINE INPUT PARAMETER pString AS CHAR NO-UNDO.
    DEFINE RETURN PARAMETER result AS LONG.
    END.
    
  3. LimBh

    LimBh Sem Pontuação

    Obrigado. Vou fazer uns testes e retorno para a comunidade.
Status do Tópico:
Não esta aberto para novas mensagens.

Compartilhe esta Página