AskOverflow.Dev

AskOverflow.Dev Logo AskOverflow.Dev Logo

AskOverflow.Dev Navigation

  • Início
  • system&network
  • Ubuntu
  • Unix
  • DBA
  • Computer
  • Coding
  • LangChain

Mobile menu

Close
  • Início
  • system&network
    • Recentes
    • Highest score
    • tags
  • Ubuntu
    • Recentes
    • Highest score
    • tags
  • Unix
    • Recentes
    • tags
  • DBA
    • Recentes
    • tags
  • Computer
    • Recentes
    • tags
  • Coding
    • Recentes
    • tags
Início / computer / Perguntas / 1889805
Accepted
Jim Orcheson
Jim Orcheson
Asked: 2025-04-03 23:01:22 +0800 CST2025-04-03 23:01:22 +0800 CST 2025-04-03 23:01:22 +0800 CST

Como determino os tamanhos reais de mídia para uma impressora no win32?

  • 772

Estou tentando determinar os tamanhos reais de mídia (Carta, A4, etc.) suportados por uma impressora usando a API do Win32 (Winspool). De acordo com a documentação, EnumFormsela enumera os formatos (tamanhos de mídia) suportados por uma impressora, mas, para todas as impressoras, retorna todos os formulários registrados no computador.

DeviceCapabilitiespode retornar três informações diferentes relacionadas aos tamanhos de mídia:

DC_PAPERNAMESretorna os nomes de todos os tamanhos de mídia suportados por uma impressora, mas esses nomes não correspondem aos nomes dos formulários retornados por EnumForms. Além disso, os nomes dos formulários estão sempre em inglês e, portanto, não correspondem de forma alguma aos DC_PAPERNAMESretornados para outros idiomas.

DC_PAPERSIZEretorna os tamanhos de todas as mídias suportadas por uma impressora, mas esses tamanhos não correspondem exatamente aos tamanhos nos formulários retornados por EnumForms. Além disso, não há informações de margem.

DC_PAPERSretorna o valor dmPaperSize do Windows para cada tamanho de mídia suportado. No entanto, não parece haver nenhuma maneira de determinar o formato correspondente.

Como posso obter os valores dos tamanhos de mídia realmente suportados (como form_info_X)?

windows
  • 1 1 respostas
  • 31 Views

1 respostas

  • Voted
  1. Best Answer
    Jim Orcheson
    2025-04-27T19:42:03+08:002025-04-27T19:42:03+08:00

    Para obter informações de tamanho para cada tamanho de mídia, primeiro é necessário obter todos os tamanhos suportados pela impressora. Isso pode ser obtido solicitando o recurso DC_PAPERS chamando DeviceCapabilities. Os valores retornados são os mesmos usados ​​no campo dmPaperSize da estrutura DEVMODE. Mais sobre isso em breve. Embora os Device Capabilities possam ser usados ​​para recuperar os nomes de papel (DC_PAPERNAMES) e os tamanhos de papel (DC_PAPERSIZE), não os queremos porque os nomes de papel são específicos de localidade e não podemos ter certeza do que é retornado para tamanhos de papel personalizados. Da mesma forma, mais de um tamanho de mídia pode ter o mesmo tamanho de papel físico, que é tudo o que é retornado por DC_PAPERSIZE. DC_PAPERS retorna uma lista de números que usaremos para recuperar as informações de tamanho de papel para cada impressora.

    GetDeviceCaps pode ser usado para recuperar o tamanho físico da mídia (largura e altura), a área de imagem (novamente largura e altura) e o deslocamento do canto superior esquerdo da área de impressão (x e y) do tamanho de mídia definido atualmente. A partir desses valores, é possível calcular as margens para o tamanho do papel.

    Portanto, para obter todas as informações de tamanho de mídia para um tamanho de papel, é necessário definir a mídia da impressora para o tamanho de mídia (tamanho do papel) para o qual queremos as informações de tamanho e, em seguida, chamar GetDeviceCaps para recuperar as informações de tamanho para esse tamanho de papel.

    Definir o tamanho de papel atual para uma impressora é um processo de duas etapas. As etapas pressupõem que já recuperamos as informações PRINTER_INFO_8 da impressora. Outras estruturas PRINTER_INFO também podem ser usadas, desde que contenham a estrutura DEVMODE.

    1. Defina o campo dmPaperSize da estrutura DEVMODE na estrutura PRINTER_INFO_8 como o valor DC_PAPERS para o tamanho de papel para o qual deseja obter informações de tamanho e defina os dmFields DEVMODE como DC_PAPERS.
    2. Chame SetPrinter passando a estrutura PRINTER_INFO_8 e, em seguida, chame ResetDC passando a estrutura DEVMODE incluída na estrutura PRINTER_INFO_8.

    Feito isso, chame GetDeviceCaps várias vezes para recuperar cada uma das seguintes informações: PHYSICALWIDTH, PHYSICALHEIGHT, OFFSETX, OFFSETY, HORZRES E VERTRES.

    Para recuperar as informações de tamanho de cada tamanho de mídia, basta repetir esse processo para cada valor DC_PAPERS.

    • 0

relate perguntas

  • Como desativar a aceleração do mouse em um touchpad de precisão do Windows?

  • renomear em massa conjuntos de arquivos de imagem

  • Qual seria o equivalente em lote do argumento "pass" do Python?

  • Comunique-se com o daemon do Docker no Windows

  • atalho do shell da área de trabalho no painel lateral do explorer

Sidebar

Stats

  • Perguntas 205573
  • respostas 270741
  • best respostas 135370
  • utilizador 68524
  • Highest score
  • respostas
  • Marko Smith

    Como posso reduzir o consumo do processo `vmmem`?

    • 11 respostas
  • Marko Smith

    Baixar vídeo do Microsoft Stream

    • 4 respostas
  • Marko Smith

    O Google Chrome DevTools falhou ao analisar o SourceMap: chrome-extension

    • 6 respostas
  • Marko Smith

    O visualizador de fotos do Windows não pode ser executado porque não há memória suficiente?

    • 5 respostas
  • Marko Smith

    Como faço para ativar o WindowsXP agora que o suporte acabou?

    • 6 respostas
  • Marko Smith

    Área de trabalho remota congelando intermitentemente

    • 7 respostas
  • Marko Smith

    O que significa ter uma máscara de sub-rede /32?

    • 6 respostas
  • Marko Smith

    Ponteiro do mouse movendo-se nas teclas de seta pressionadas no Windows?

    • 1 respostas
  • Marko Smith

    O VirtualBox falha ao iniciar com VERR_NEM_VM_CREATE_FAILED

    • 8 respostas
  • Marko Smith

    Os aplicativos não aparecem nas configurações de privacidade da câmera e do microfone no MacBook

    • 5 respostas
  • Martin Hope
    Vickel O Firefox não permite mais colar no WhatsApp web? 2023-08-18 05:04:35 +0800 CST
  • Martin Hope
    Saaru Lindestøkke Por que os arquivos tar.xz são 15x menores ao usar a biblioteca tar do Python em comparação com o tar do macOS? 2021-03-14 09:37:48 +0800 CST
  • Martin Hope
    CiaranWelsh Como posso reduzir o consumo do processo `vmmem`? 2020-06-10 02:06:58 +0800 CST
  • Martin Hope
    Jim Pesquisa do Windows 10 não está carregando, mostrando janela em branco 2020-02-06 03:28:26 +0800 CST
  • Martin Hope
    andre_ss6 Área de trabalho remota congelando intermitentemente 2019-09-11 12:56:40 +0800 CST
  • Martin Hope
    Riley Carney Por que colocar um ponto após o URL remove as informações de login? 2019-08-06 10:59:24 +0800 CST
  • Martin Hope
    zdimension Ponteiro do mouse movendo-se nas teclas de seta pressionadas no Windows? 2019-08-04 06:39:57 +0800 CST
  • Martin Hope
    jonsca Todos os meus complementos do Firefox foram desativados repentinamente, como posso reativá-los? 2019-05-04 17:58:52 +0800 CST
  • Martin Hope
    MCK É possível criar um código QR usando texto? 2019-04-02 06:32:14 +0800 CST
  • Martin Hope
    SoniEx2 Altere o nome da ramificação padrão do git init 2019-04-01 06:16:56 +0800 CST

Hot tag

windows-10 linux windows microsoft-excel networking ubuntu worksheet-function bash command-line hard-drive

Explore

  • Início
  • Perguntas
    • Recentes
    • Highest score
  • tag
  • help

Footer

AskOverflow.Dev

About Us

  • About Us
  • Contact Us

Legal Stuff

  • Privacy Policy

Language

  • Pt
  • Server
  • Unix

© 2023 AskOverflow.DEV All Rights Reserve