Utilizar a tecla "Print Screen"

Fórum sobre a linguagem CA-Clipper.

Moderador: Moderadores

Avatar do usuário
Pablo César
Usuário Nível 7
Usuário Nível 7
Mensagens: 5312
Registrado em: 31 Mai 2006 10:22
Localização: Curitiba - Paraná

Mensagem por Pablo César »

Nunca usei o conteúdo da SAVESCREEN e acho que o Maligno tem razão em remover antes o atributo, pois isso iria interferir na impressão. Mas a questão de imprimir a tela não seria o problema Rochinha, em primeiro lugar eu queria saber qual seria o código equivalente à tecla PRINT SCREEN que parece não possuir LIB algum para interceptá-la. E segundo originou-se (sem querer) outra questão baseada no uso de uns aplicativo que capturam telas e são impressas. estes aplicativos apresentados (PRINTNOW e HARDCOPY), capturam a tela ora colocada na área de transferência do Windows e é impressa, mas quando a sessão DOS estiver em tela cheia, daí não imprime. Por isso fiz outra apelação aos colegas, para nos ajudarem a entender tal comportamento. A minha dedução é que quando o conteúdo da área de transferência for do tipo DIB (imagem) ele processa a impressão em forma gráfca, mas quanto está em modo TEXTO simplesmente a ignora (porque até daria para imprimir também). Com isto podemos dizer que se existe diferenciação do conteúdo da área de transferência (de DIB para TEXTO), então podemos achar uma forma "gambiarristica" para saber se a sessão está em modo JANELADA ou TELA-CHEIA. Entenderam ?
Um clip-abraço !

Pablo César Arrascaeta
Compartilhe suas dúvidas e soluções com todos os colegas aqui do fórum.
Evite enviar as dúvidas técnicas por MPs ou eMails, assim todos iremos beneficiar-nos.
Avatar do usuário
Maligno
Membro Master
Membro Master
Mensagens: 6398
Registrado em: 06 Jul 2004 01:40
Localização: Londrina/PR

Mensagem por Maligno »

Aliás, complementando, para quem quiser saber: os atributos de cor, que devem ser removidos, são os caracteres pares da string devolvida por SaveScreen().
[]'s
Maligno
---
Não respondo questões técnicas através de MP ou eMail. Não insista.
As dúvidas devem ser postadas no fórum. Desta forma, todos poderão
se beneficiar das respostas.

---
Se um dia precisar de uma transfusão de sangue você perceberá como
é importante a figura do doador. Procure o hemocentro de sua cidade e
se informe sobre a doação de sangue, plaquetas e medula óssea. Doe!
Avatar do usuário
Pablo César
Usuário Nível 7
Usuário Nível 7
Mensagens: 5312
Registrado em: 31 Mai 2006 10:22
Localização: Curitiba - Paraná

Mensagem por Pablo César »

Eu utilizo VTELA:=CHARODD(SCREENSTR(00,24,80)) para obter string da tela e é linha por linha. Não sei se funcionaria isto: VTELA:=CHARODD(SAVESCREEN(00,00,24,80)) para remover esses atributos, mas teria que compor a tela linha a linha. Fazendo deste modo:

Código: Selecionar todos

SET ALTERNATE TO TELA.TXT
SET ALTERNATE ON
FOR I=0 TO 24
     IF I=0
         ?? CHARODD(SCREENSTR(00,I,80))
     ELSE
         ? CHARODD(SCREENSTR(00,I,80))
     ENDIF
NEXT
SET ALTERNATE OFF
SET ALTERNATE TO
COPY FILE("TELA.TXT") TO ("LPT1")
ou então:

Código: Selecionar todos

PRINTSCR() // da CA-TOOLS.LIB
os atributos de cor, que devem ser removidos, são os caracteres pares da string devolvida por SaveScreen()
Esclarecendo um pouco mais: cria um caracter antes de cada caracter da tela. portanto deve se compor de dois em dois a concatenação de cada linha e ainda acrescentar o CHR(10)+CHR(13) para finalizar cada linha e depois poder imprimí-la.
Um clip-abraço !

Pablo César Arrascaeta
Compartilhe suas dúvidas e soluções com todos os colegas aqui do fórum.
Evite enviar as dúvidas técnicas por MPs ou eMails, assim todos iremos beneficiar-nos.
Avatar do usuário
rochinha
Administrador
Administrador
Mensagens: 4664
Registrado em: 18 Ago 2003 20:43
Localização: São Paulo - Brasil
Contato:

Tecla PRTSCRN

Mensagem por rochinha »

Amiguinho

Segundo o site da Micro$oft( http://msdn2.microsoft.com/en-us/library/8c6yea83.aspx ) os aplicativos não poderão fazer uso direto da tecla PRINT SCREEN.

A mesma não tem código ASCII usável, ficando então, embassado o seu uso.
OPS! LINK QUEBRADO? Veja ESTE TOPICO antes e caso não encontre ENVIE seu email com link do tópico para [url=mailto://fivolution@hotmail.com]fivolution@hotmail.com[/url]. Agradecido.

@braços : ? )

A justiça divina tarda mas não falha, enquanto que a justiça dos homens falha porque tarda.
Avatar do usuário
Pablo César
Usuário Nível 7
Usuário Nível 7
Mensagens: 5312
Registrado em: 31 Mai 2006 10:22
Localização: Curitiba - Paraná

Mensagem por Pablo César »

rochinha escreveu:Segundo o site da Micro$oft( http://msdn2.microsoft.com/en-us/library/8c6yea83.aspx ) os aplicativos não poderão fazer uso direto da tecla PRINT SCREEN.
Parece ter algum nexo porque não ví aplicativo algum acionando diretamente a tecla PRTSCRN.

Neste seguinte Download do PRINTNOW tem nesse arquivo zipado, os fonte desse aplicativo e que é da autoria da PCMagazine. Então se a tecla PRTSCRN não tem acionamento direto, tal aplicativo deve ser acionado pelo método interno do Windows na hora que coloca a tela na áera de transferência. Acho que isso está no arquivo PNDLG.CPP onde diz "Custom window message identifiers" e seu define WM_MY_PRINT_CLIPBOARD.

Agora só resta entender se há possibilidades de saber se há cómo diferenciar o conteúdo da tela capturada se for DIB ou TEXT.
Um clip-abraço !

Pablo César Arrascaeta
Compartilhe suas dúvidas e soluções com todos os colegas aqui do fórum.
Evite enviar as dúvidas técnicas por MPs ou eMails, assim todos iremos beneficiar-nos.
Dudu_XBase
Membro Master
Membro Master
Mensagens: 1071
Registrado em: 25 Ago 2003 16:55

Mensagem por Dudu_XBase »

Eu fiz dessa forma quando tive tal problema...
Substitui o printscreen por f12

Código: Selecionar todos

SETKEY(K_F12,{||duduprn()})

Código: Selecionar todos

*********************************************************
* Fun‡ao criado por dudu_xbase para printscreen em xp
********************************************************
Function duduprn()
Local telasuja, telalimpa, x

* Salvo a Tela
telasuja := savescreen()

* remove os caracteres coloridos
telalimpa := ""
for x := 1 to len(telasuja) step 2
  telalimpa += substr(telasuja,x,1)
next

* Pego a impressora que esta instalada na lpt1
//cPrinter := printerporttoname("lpt1",.t.) // xharbour
cPrinter := "LPT1" // clipper
if empty(cPrinter)
   tone(2000,2)
   tone(1000,2)
   return
endif

* Ativo a Impressao
set printer to &cPrinter.
set (_SET_DEVICE, "PRINTER")
set printer on
set console off

* Imprimo a tela limpa
for x := 1 to len(telalimpa) step 80
 @ prow()+1,00 say substr( telalimpa, x, 80)
next
eject

* Libero o Buffer da impressÆo que o XP segura
set printer to
set console on
set printer off
set device to screen
set printer to


return



________________________________________________________________________________________________________
(Aow Saudade) Clipper 5.2e, Blinker 7, RDD SIXNSX, DBFCDX /Xharbour 1.0, Rdd Mediator (Mysql) Free , RDD Sqlrdd (Sql Server) Comercial
(Hoje) C# Python Sql Server e Oracle




Avatar do usuário
Pablo César
Usuário Nível 7
Usuário Nível 7
Mensagens: 5312
Registrado em: 31 Mai 2006 10:22
Localização: Curitiba - Paraná

Mensagem por Pablo César »

E se quiser imprimir numa segunda impressora que não está capturada, o quê me recomenda fazer DUDU ? Utilizar o NETREDIR ? (eu nunca usei. Utilizei o USB ou WAPI e prendem as máquinas. Engraçado, ne ?
Um clip-abraço !

Pablo César Arrascaeta
Compartilhe suas dúvidas e soluções com todos os colegas aqui do fórum.
Evite enviar as dúvidas técnicas por MPs ou eMails, assim todos iremos beneficiar-nos.
Responder