domingo, 2 de setembro de 2012
MUDE PARA O WINDOWS 8
O novo sistema operacional da Microsoft é tudo e mais um pouco!
Após ler durante duas semanas sobre o uso da aplicação por outros blogs de tecnologia confesso que fiquei tentado a realizar o upgrade para o novo sistema operacional.
A Microsoft deu um passo importante para isso: disponibilizou uma versão do Windows 8 que funciona por 90 dias gratuitamente:
http://msdn.microsoft.com/en-us/evalcenter/jj554510.aspx
Após instalar em meu notebook Toshiba com um processador Intel Duo Core posso afirmar que o sistema operacional é significativamente uma grande mudança em relação ao Windows 7.
Meu notebook desliga e inicia agora em 3 segundos!
É surpreendente a velocidade com que o Windows 8 trabalha na inicialização e no encerramento.
Li muitos artigos sobre o grande debate do sumiço do menu Iniciar. Acreditem! Ele não faz falta! É muito simples apertar a tecla Windows + R ou Windows + W ou Windows + Q para executar um comando, abrir Configurações ou ver uma pesquisa e os aplicativos, respectivamente.
De todos os artigos, recomendo que você leia este:
http://www.hanselman.com/blog/Windows8ProductivityWhoMovedMyCheeseOhThereItIs.aspx
Há muitas explicações sobre os botões e modo de uso do Windows 8. Este artigo fala adequadamente para aqueles que pretendem usar à sério o Windows 8 sem cair em alardes e saudosismos sobre o menu Iniciar e outros quitutes.
Instalei aplicativos no Windows 7 como o Starcraft Anthology. Tudo o que foi necessário fazer foi ir até a pasta do Windows.old e copiar a pasta do jogo para o Program Files (x86) e a aplicação funcionou adequadamente.
A rapidez de execução dos aplicativos é surpreendente!
O que me deixou um pouco frustrado foi identificar que o Kaspersky Internet Security 2012 ainda não é compatível e adquiri três licenças do software recentemente. Terei que fazer a instalação da versão 2013 do Kaspersky que será compatível com o Windows 8. Para quem fez a aquisição de licenças recentes de alguns softwares talvez isto seja um problema. A Kaspersky ainda não me sinalizou se poderei utilizar uma de minhas licenças na versão 2013, mas provavelmente terei que adquirir uma nova.
Aproveitando a pegada fiz a instalação do Visual Studio Ultimate 2012 que funciona somente no Windows 7 e no Windows 8.
Mais uma vez a rapidez é extraordinária e a aplicação surpreende.
Recomendo que você pense seriamente em realizar a mudança de seu sistema operacional para o Windows 8.
Até o momento, tenho que dizer que está sendo extraordinário!
Sucesso a todos!!
domingo, 12 de agosto de 2012
DTS COM O VISUAL STUDIO 2010 - SQLBULKCOPY
O Visual Studio 2010 incorporou diversas ferramentas práticas para que um desenvolvedor realize trabalhos variados sem muito esforço com várias ferramentas da Microsoft. A melhor delas talvez esteja relacionada com a utilização do SQL Server e a facilidade de se criar packages e DTS para se integralizar dados com o Bussines Intelligence (lembra do Visual Studio 2008?)
O SqlBulkcopy é uma ferramenta tipada que possibilita aos desenvolvedores criarem um tipo de DTS incorporado ao código-fonte de suas aplicações. Não é necessário ir até o SQL Server para que o DTS seja executado. Você pode abrir uma base de dados, zerá-la e copiar dados diretamente para outra base de dados sem problemas.
Um DTS trabalha internamente dentro do próprio SQL Server para copiar dados entre tabelas ou executar funcionalidades específicas como atualizar automaticamente dados seguindo determinados critérios estabelecidos. Geralmente utilizamos um DTS para copiar bases de dados de produção para uma base de testes ou para migrar informações necessárias em outros sistemas com outras bases de dados.
Para obter informações sobre a classe:
http://msdn.microsoft.com/pt-br/library/system.data.sqlclient.sqlbulkcopy.aspx
Abaixo, o módulo-exemplo em VB.NET:
Module Module1
Sub Main() Dim connectionString As String = GetConnectionString()
' Open a connection to the AdventureWorks database.
Using sourceConnection As SqlConnection = _
New SqlConnection(connectionString)
sourceConnection.Open()
' Perform an initial count on the destination table.
Dim commandRowCount As New SqlCommand( _
"SELECT COUNT(*) FROM dbo.BulkCopyDemoMatchingColumns;", _
sourceConnection)
Dim countStart As Long = _
System.Convert.ToInt32(commandRowCount.ExecuteScalar())
Console.WriteLine("Starting row count = {0}", countStart)
' Get data from the source table as a SqlDataReader.
Dim commandSourceData As SqlCommand = New SqlCommand( _
"SELECT ProductID, Name, ProductNumber " & _
"FROM Production.Product;", sourceConnection)
Dim reader As SqlDataReader = commandSourceData.ExecuteReader
' Open the destination connection. In the real world you would
' not use SqlBulkCopy to move data from one table to the other
' in the same database. This is for demonstration purposes only.
Using destinationConnection As SqlConnection = _
New SqlConnection(connectionString)
destinationConnection.Open()
' Set up the bulk copy object.
' The column positions in the source data reader
' match the column positions in the destination table,
' so there is no need to map columns.
Using bulkCopy As SqlBulkCopy = _
New SqlBulkCopy(destinationConnection)
bulkCopy.DestinationTableName = _
"dbo.BulkCopyDemoMatchingColumns"
Try
' Write from the source to the destination.
bulkCopy.WriteToServer(reader)
Catch ex As Exception
Console.WriteLine(ex.Message)
Finally
' Close the SqlDataReader. The SqlBulkCopy
' object is automatically closed at the end
' of the Using block.
reader.Close()
End Try
End Using
' Perform a final count on the destination table
' to see how many rows were added.
Dim countEnd As Long = _
System.Convert.ToInt32(commandRowCount.ExecuteScalar())
Console.WriteLine("Ending row count = {0}", countEnd)
Console.WriteLine("{0} rows were added.", countEnd - countStart)
Console.WriteLine("Press Enter to finish.")
Console.ReadLine()
End Using
End Using
End Sub
Private Function GetConnectionString() As String
' To avoid storing the sourceConnection string in your code,
' you can retrieve it from a configuration file.
Return "Data Source=(local);" & _
"Integrated Security=true;" & _
"Initial Catalog=AdventureWorks;"
End Function
End Module
Veja que a função trabalha com duas conexões realizando a transferência de uma base de dados para outra.
A facilidade apresentada pode ser realizada sem a criação de qualquer DTS nas base de dados de origem ou destino, simplesmente utilizando o Visual Studio 2010 para realizar este trabalho.
Reúna a coragem que lhe resta e atreva-se a fazer um DTS através de um código-fonte!
Sucesso a todos!
domingo, 5 de agosto de 2012
O FUTURO COM O KINECT - GUITAR HERO SEM AS MÃOS
A Microsoft recentemente requisitou vários pedidos de patentes para dispositivos que manipulam hardware com as mãos somente.
Um deles chega a ser promissor: trata-se de um bracelete que lê os impulsos elétricos enviados pelo cérebro até suas mãos e os traduz em comandos a serem enviados ao computador. Há inclusive um post no Youtube apresentando a tecnologia. O bracelete é colocando na altura de seu antebraços e os sinais são enviados ao dispositivo eletrônico que realiza a leitura de que dedos das mãos foram ativados.
Todas as patentes parecem tratar do mesmo assunto: precisão.
Pode-se esperar que os futuros dispositivos a evoluírem do Kinect seja promissores.
O que mais poderá ser integrado à plataforma do novo sistema operacional da Microsoft a ser lançado em dois meses? O que poderemos ver dentro do Windows 8?
É esperar para ver.
Veja este artigo:
http://www.extremetech.com/extreme/133732-microsoft-demos-muscle-computer-interface-air-guitar-hero-now-a-reality
Um deles chega a ser promissor: trata-se de um bracelete que lê os impulsos elétricos enviados pelo cérebro até suas mãos e os traduz em comandos a serem enviados ao computador. Há inclusive um post no Youtube apresentando a tecnologia. O bracelete é colocando na altura de seu antebraços e os sinais são enviados ao dispositivo eletrônico que realiza a leitura de que dedos das mãos foram ativados.
Todas as patentes parecem tratar do mesmo assunto: precisão.
Pode-se esperar que os futuros dispositivos a evoluírem do Kinect seja promissores.
O que mais poderá ser integrado à plataforma do novo sistema operacional da Microsoft a ser lançado em dois meses? O que poderemos ver dentro do Windows 8?
É esperar para ver.
Veja este artigo:
http://www.extremetech.com/extreme/133732-microsoft-demos-muscle-computer-interface-air-guitar-hero-now-a-reality
terça-feira, 31 de julho de 2012
VB.NET - OBTER USUÁRIOS DO ACTIVE DIRECTORY
Uma dessas funções que você precisa vez ou outra para obter os usuários de uma rede e salvá-los em uma tabela qualquer, seja no SQL Server, seja no MYSQL ou mesmo no Microsoft Access.
Leve-se em conta o comando dsquery: O dsquery por default não se encontra disponível dentro do Windos XP porque se trata de uma aplicação para o Windows 2000.
Para utilizar o dsquery na sua estação, basta instalar o adminpak com o qual você poderá realizar as consultas.
Link para download ou no CD do Windows: http://www.microsoft.com/downloads/details.aspx?FamilyID=c16ae515-c8f4-47ef-a1e4-a8dcbacff8e3&displaylang=en
Vamos ver uma simples função que criei com esta finalidade.
A função em si executa um arquivo bath que simplesmente contêm o comando que faz a geração do dsquery para um arquivo-texto qualquer usado o comando dsget:
Comando no arquivo-bath:
dsquery user -limit
2500 "OU=MAO,OU=Regio1,DC=CPP,DC=CPP,DC=gov" |dsget user
-display -samid -email -office > C:\Temp\users.txt
A função primeiramente deleta o arquivo-texto caso ele exista. Em seguida, gera um novo arquivo-texto com os dados dos usuários usando o arquivo cmd criado e que simplesmente contêm o comando informado acima. O detalhe é o tempo de espera para a execução do arquivo bath:
listFiles.WaitForExit(90000)
Esta linha aguarda cerca de um minuto e meio até que a execução do arquivo bath seja finalizada e o arquivo-texto seja totalmente gerado. Isso é necessário para que a aplicação espere a finalização da geração do arquivo-texto. Você pode alterar esse tempo para que atenda às suas necessidades. No meu caso, verifiquei que o tempo de espera ideal girava em torno de um minuto e meio.
Continuando, a função abre este arquivo-texto gerado e faz sua leitura inserindo em uma tabela todos aqueles que não existirem dentro da mesma.
Private Sub AtualizarUsuarios()
Dim sPercentual As Double = 0
Application.DoEvents()
'Deletar o arquivo existente anteriormente
If IO.File.Exists("c:\Intel\users3.txt") Then
File.Delete("C:\Intel\users3.txt")
End If
Dim psi As New _
System.Diagnostics.ProcessStartInfo("C:\Intel\Gera_user.cmd")
psi.RedirectStandardOutput = True
psi.WindowStyle = ProcessWindowStyle.Hidden
psi.UseShellExecute = False
Dim listFiles As System.Diagnostics.Process
listFiles = System.Diagnostics.Process.Start(psi)
Dim myOutput As System.IO.StreamReader _
= listFiles.StandardOutput
listFiles.WaitForExit(90000)
If listFiles.HasExited Then
'abrir o arquivo-texto gerado na pasta c:\Intel
Dim oLeitura As System.IO.StreamReader
oLeitura = File.OpenText("c:\Intel\users3.txt")
Dim fluxoTexto As IO.StreamReader
Dim linhaTexto As String
Dim sContaLinhas As Integer = 0
If IO.File.Exists("c:\Intel\users3.txt") Then
fluxoTexto = New IO.StreamReader("c:\Intel\users3.txt")
linhaTexto = fluxoTexto.ReadLine
sContaLinhas = sContaLinhas + 1
While linhaTexto <> Nothing
linhaTexto = fluxoTexto.ReadLine
sContaLinhas = sContaLinhas + 1
End While
fluxoTexto.Close()
Dim sTotal As Integer = sContaLinhas
ProgressBar1.Maximum = sContaLinhas
ProgressBar1.Value = 0
ProgressBar1.Visible = True
LbPercent.Visible = True
sContaLinhas = 1
fluxoTexto = New IO.StreamReader("c:\Intel\users.txt")
linhaTexto = fluxoTexto.ReadLine
While linhaTexto <> Nothing
If sContaLinhas > 1 Then
Dim sUsuario As String = Trim(Mid(linhaTexto, 1, 15))
Dim sNome As String = Trim(Mid(linhaTexto, 15, 40))
Dim eEmail As String = Trim(Mid(linhaTexto, 124, 40))
' Comparar com o que está na tabela
If sUsuario <> "" Then
Dim sPesq As String = "Jabil\" + sUsuario
sSQL = "SELECT * FROM ADUsers WHERE Usu_Login = '" & sPesq & "'"
Dim myConnection2 As OleDbConnection
Dim myCommand2 As OleDbCommand
Dim ds As OleDbDataReader
myConnection2 = New OleDbConnection(connString)
myConnection2.Open()
myCommand2 = New OleDbCommand(sSQL, myConnection2)
ds = myCommand2.ExecuteReader()
If ds.Read = False Then
'Inserir o usuário na tabela
'INSERIR NA GRID
sSQL = "INSERT INTO ADUsers (Usu_Login,Usu_Nome,Usu_Email) VALUES ('" & sPesq & "', '" &
sNome & "','" & eEmail & "')"
myCommand2 = New OleDbCommand(sSQL, myConnection2)
Ra = myCommand2.ExecuteNonQuery()
End If
ds.Close()
End If
'se não existir a linha na tabela, insere
End If
'ler o conteúdo do arquivo-texto
linhaTexto = fluxoTexto.ReadLine
sContaLinhas = sContaLinhas + 1
ProgressBar1.Value = sContaLinhas
sPercentual = 100 * sContaLinhas / sTotal
LbPercent.Text = CStr(FormatNumber(sPercentual, 2)) + " %"
LbMessagem.Text = "Linhas processadas: " + CStr(sContaLinhas)
Application.DoEvents()
If sContaLinhas = (sTotal - 1) Then
GoTo sSaida
End If
End While
sSaida:
fluxoTexto.Close()
Else
LbMessagem.Text = "Arquivo não existe"
'MessageBox.Show("Arquivo não existe")
End If
'Fechar o arquivo-texto
oLeitura.Close()
Application.DoEvents()
LbMessagem.Text = "Atualização efetuada com sucesso!!! Linhas Processadas no Total: " + CStr(sContaLinhas)
PreencherGrid("select * from ADUsers")
End If
listFiles.Close()
End Sub
Sucesso a todos e aproveitem o quitute!!
By
Leonardo Metelys
segunda-feira, 16 de julho de 2012
COPIANDO DADOS DO MYSQL 3.5 PARA O MYSQL 5.5
Dentre as muitas necessidades que eventualmente poderemos encontrar com relação a inovações uma delas diz respeito a atualizações de bancos de dados.
Há grandes diferenças entre as versões do MySQL inferiores a 4.0. Mostrarei aqui um dos caminhos para que se possa utilizar dados de uma versão antiga do MYSQL com a nova versão do MYSQL 5.5 a fim de que uma nova aplicação possa ser criada com o Visual Studio 2010.
No servidor antigo é preciso conseguir uma cópia da base de dados de modo a ser instalada na nova versão. O caminho mais comum para isto é utilizar o comando mysqldump:
mysqldump -u root -p NOME_DA_BASE > arquivo.sql
o arquivo .sql precisa ser ainda preparado para que possa ser lançado na nova base de dados. Deve-se ter em mente que o padrão latin não é o mesmo no MySQL 5.5 que trabalha com o padrão uft8.
Esta discrepância causará o problema com os acentos que deverá ser tratado na nova base de dados. Todos os acentos deverão ser corrigidos para a nova base de dados se a transferência for efetuada sem se levar em conta o padrão diferente entre o latin e o uft8.
A maioria dos desenvolvedores pode resolver o problema de acentos realizando updates na base de dados ou criando um pequeno aplicativo que possa corrigir todos os acentos via software. Isso pode ficar a critério de cada desenvolvedor.
Continuando, o nosso arquivo .sql precisará ser editado a fim de que possamos ver algumas de suas peculiaridades. Veja:
-- MySQL dump 8.22
--
-- Host: localhost Database: pagelog
---------------------------------------------------------
-- Server version 3.23.52-nt
--
-- Table structure for table 'pagsegurodesc '
--
CREATE TABLE pagsegurodesc (
wemp int(11) NOT NULL default '0',
ano int(11) NOT NULL default '0',
cod varchar(10) NOT NULL default '',
codes int(11) NOT NULL default '0',
pedes double default NULL,
mes1 int(11) default NULL,
mes2 int(11) default NULL,
PRIMARY KEY (wemp,anolet,codalu,coddes)
) TYPE=MyISAM;
--
-- Dumping data for table 'alunodesc'
--
Todas as linhas com "--" devem ser removidas e o TYPE = MyISAM precisa ser retirado do arquivo .sql a fim de que possa ser utilizado na nova versão em MySQL 5.5. Retirados esses dados a base de dados pode então ser transferida, desde que você não se esqueça de se corrigir os problemas com os acentos na base de dados.
O MYSQL Query Browser pode ser utilizado tanto para se lançar os dados do script dentro da nova base de dados quanto para se testar se os dados estão acessíveis e corretamente catalogados. Recomenda-se que primeiro sejam criadas as tabelas na base de dados e em seguida seus dados sejam lançados em cada uma delas.
Para realizar este trabalho, você pode copiar a estrutura apresentada acima para o MySQL Browser e executá-la. Em seguida, deve copiar os dados abaixo da estrutura ou salvá-los em um arquivo .sql à parte e abri-los no próprio MySQL Browser selecionando a opção Arquivo -> Abrir Query. Quando os dados forem apresentando no MySQL Broser clique em Execute e os dados começarão a ser transferidos.
Após a transferência de dados, você pode testar a base de dados em MySQL 5.5 criando uma pequena aplicação para saber se a mesma esta acessível e correta.
Este trabalho será árduo e um pouco demorado, mas garantirá com certeza que todas as informações serão transferidas de modo correto para a nova versão do banco de dados MYSQL. Com paciência e perseverança você será capaz de transferir todas as informações de seu banco de dados mais antigo para a nova engine do MYSQL e se aproveitar do uso da mesma em novas tecnologias como o Visual Studio 2010.
Sucesso a todos!!
quarta-feira, 2 de maio de 2012
GLPI - CONFIGURANDO NOVOS TIPOS DE TICKET
O GLPI é um dos muitos tipos de aplicativos helpdesk free existentes na internet. O fórum do mesmo pode ser encontrado neste link:
Recentemente tive a necessidade de acrescentar mais opções aos tipos de chamado do mesmo para um cliente. O que consegui descobrir pesquisando no fórum é que isso só seria possível mexendo no núcleo do PHP da aplicação. Apesar de não entender muito de PHP consegui encontrar os pontos onde as mudanças eram necessárias.
Vamos a elas!
Primeiro, precisamos alterar o ticket.class.php (pasta inc da aplicação) e acrescentar mais constantes de tipo de ticket. No meu caso, coloquei mais oito tipos:
// Request type
const INCIDENT_TYPE = 1;
// Demand type
const DEMAND_TYPE = 2;
// defeitos - Normal
const TEST_TYPE = 3;
// defeitos - Defeitos - Urgente
const DEF_URGENTE = 4;
// Dem. Op - Normal
const DEM_OP = 5;
// Dem. Op - Urgente
CONST DEM_URG = 6;
// Melhorias - Normal
CONST MELHORIA_NORMAL = 7;
// Melhorias - Urgente
CONST MELHORIA_URG = 8;
const INCIDENT_TYPE = 1;
// Demand type
const DEMAND_TYPE = 2;
// defeitos - Normal
const TEST_TYPE = 3;
// defeitos - Defeitos - Urgente
const DEF_URGENTE = 4;
// Dem. Op - Normal
const DEM_OP = 5;
// Dem. Op - Urgente
CONST DEM_URG = 6;
// Melhorias - Normal
CONST MELHORIA_NORMAL = 7;
// Melhorias - Urgente
CONST MELHORIA_URG = 8;
Depois disso, é preciso alterar a função GetTypes () localizada neste mesmo arquivo:
static function getTypes() {
global $LANG;
$options[self::INCIDENT_TYPE] = $LANG['job'][1];
$options[self::DEMAND_TYPE] = $LANG['job'][2];
$options[self::TEST_TYPE] = $LANG['job'][57];
$options[self::DEF_URGENTE] = $LANG['job'][58];
$options[self::DEM_OP] = $LANG['job'][59];
$options[self::DEM_URG] = $LANG['job'][60];
$options[self::MELHORIA_NORMAL] = $LANG['job'][61];
$options[self::MELHORIA_URG] = $LANG['job'][62];
return $options;
}
global $LANG;
$options[self::INCIDENT_TYPE] = $LANG['job'][1];
$options[self::DEMAND_TYPE] = $LANG['job'][2];
$options[self::TEST_TYPE] = $LANG['job'][57];
$options[self::DEF_URGENTE] = $LANG['job'][58];
$options[self::DEM_OP] = $LANG['job'][59];
$options[self::DEM_URG] = $LANG['job'][60];
$options[self::MELHORIA_NORMAL] = $LANG['job'][61];
$options[self::MELHORIA_URG] = $LANG['job'][62];
return $options;
}
Veja que acrescentamos mais tipos $LANG.
O $LANG tem a ver com a linguagem utilizada pelo GLPI. No meu caso é português. Assim sendo é preciso acrescentar esses novos tipos de $LANG definidos acima no arquivo pt-BR.php.
Vá até a pasta locales e abra o arquivo pt-BR.PHP. Localize neste arquivo o ['job'] associado acima e acrescentes os novos tipos que definiu:
$LANG['job'][57]="Defeitos - Normal";
$LANG['job'][58]="Defeitos - Urgente";
$LANG['job'][59]="Dem. Op - Normal";
$LANG['job'][60]="Dem. Op - Urgente";
$LANG['job'][61]="Melhorias - Normal";
$LANG['job'][62]="Melhorias - Urgente";
Feito isso, os novos tipos de ticket estarão definidos para o GLPI. Para ver os mesmos, abra um novo chamado e clique no combo Tipo.
Para alterar os arquivos PHP utilizei o aplicativo Textpad que é free e você baixa em qualquer site de downloads da internet.
Sucesso a todos!
domingo, 29 de abril de 2012
ASP.NET - PRINT SCREEN DE UMA PÁGINA ASP.NET
Recentemente, deparei-me com a necessidade de retirar print screen de uma página em ASP.NET em um dado momento via código sem a interação do usuário.
Quem trabalha com o ASP.NET deve saber que todas as páginas visualizadas em um browser na verdade estão sendo executadas dentro do servidor. Então retirar um print screen via código é uma tarefa mais complicada porque a execução do código irá em busca de uma página que está em execução no servidor ASP.NET onde a página se encontra e não realmente no browser ativo no momento.
Minha saída para este problema:
Um aplicativo em separado estaria em execução na máquina cliente onde o browser está em execução.
Esse aplicativo se encarregaria de fazer um print screen da tela ativa salvando na página c:\temp, Em seguida, obteria esta imagem do diretório c:\temp e a salvaria em um arquivo pdf na própria pasta c:\temp.
Quando houvesse a necessidade de realizar um print screen esse pequeno aplicativo seria acionado - executarservico seria setado em 1, fazendo o print screen da tela e gerando a imagem requisitada e salvando-a em arquivo pdf. Este pequeno aplicativo teria um timer que de 15 em 15 segundos verificaria
se o ExecutarServico na tabela está setado em 1 ou não. No momento em que o Executarservico estiver setado em 1 a imagem seria gerada e o arquivo pdf criado.
Utilizei o ASP.NET com o VB.Net para gerar o código.
Os imports associados a isso estão listados abaixo:
Imports System.IO
Imports System.Drawing
Imports System.Drawing.Imaging
Imports System.Windows.Forms
Para gerar o print screen via código:
'Ler se ExecutarServico está setado em 1
myCommand = New OleDbCommand("select ExecutarServico,linha from Parametros", myConnection)
ds = myCommand.ExecuteReader()
While ds.Read()
sValor = ds.Item("ExecutarServico")
sLinha = ds.Item("Linha")
End While
'Se o valor padrão foi 1, dispara a cópia da imagem
If sValor = "1" Then
'Grava o nome do arquivo com a linha associada ao mesmo
Dim sNomeArquivo = sLinha + "_" + DateTime.Now.ToString("yyMMddhhmmss") + ".jpg"
arquivoWS.WriteLine("Captura de Tela iniciada... " & DateTime.Now)
arquivoWS.Flush()
Try
Dim image As New Bitmap(Screen.PrimaryScreen.Bounds.Width, Screen.PrimaryScreen.Bounds.Height, PixelFormat.Format32bppArgb)
Dim g As Graphics = Graphics.FromImage(image)
g.CopyFromScreen(Screen.PrimaryScreen.Bounds.X, Screen.PrimaryScreen.Bounds.Y, 0, 0, Screen.PrimaryScreen.Bounds.Size, CopyPixelOperation.SourceCopy)
image.Save("c:\temp\" + sNomeArquivo, ImageFormat.Jpeg)
Catch ex As Exception
arquivoWS.WriteLine("Erro na Captura de Tela efetuada... " & DateTime.Now)
arquivoWS.Flush()
End Try
End If
Caso um erro ocorra na geração da imagem, o mesmo será gerado no arquivo de log criado.
A geração do arquivo pdf com a imagem criada é mostrado abaixo:
'Recuperar o nome do arquivo de imagem na base de dados
sSQL = "select ExecutarServico,nomearquivo,diretorio from Parametros where linha = '" & sLinhaSelecionada & "' and ROTA = '" & sRotaSelecionada & "' and computador = '" & shostname & "'"
myCommand = New OleDbCommand(sSQL, myConnection)
ds = myCommand.ExecuteReader()
'Recuperar nome e caminho do arquivo na base de dadps
While ds.Read()
sLimpaArquivoJPG = ds.Item("nomearquivo")
sDiretorioArquivo = ds.Item("diretorio")
End While
ds.Close()
'Gerar arquivo PDF com a imagem criada
''Gravar a imagem dentro do arquivo PDF
''baseado em : http://www.dotnetspark.com/kb/1364-add-image-to-pdf-document-using-itextsharp.aspx
Dim imageFilePath As String = sDiretorioArquivo + sLimpaArquivoJPG
Dim test As iTextSharp.text.Image = iTextSharp.text.Image.GetInstance(imageFilePath)
'Resize image depend upon your need
'logo.ScaleToFit(280.0F, 260.0F)
test.ScaleToFit(600.0F, 600.0F)
'Give space before image
test.SpacingBefore = 30.0F
'Give some space after the image
test.SpacingAfter = 1.0F
test.Alignment = Element.ALIGN_CENTER
Dim hoje As DateTime = DateTime.Now
Dim arquivoPDF = sLinhaSelecionada & "_" & sRotaSelecionada & "_" & DateTime.Now.ToString("yyMMddhhmmss") & ".pdf"
'Grava o arquivo PDF no modo retrato
Dim doc As New Document(iTextSharp.text.PageSize.A4_LANDSCAPE, 2, 2, 42, 42)
PdfWriter.GetInstance(doc, New FileStream(sDiretorioArquivo + "\" & arquivoPDF, FileMode.Create))
doc.Open()
doc.Add(test)
doc.Close()
Desse modo, teremos um arquivo pdf com a imagem da tela desejada em seu interior.
Sucesso a todos!
quinta-feira, 26 de abril de 2012
CONFIGURANDO IIS PARA O WINDOWS 7
Recentemente, ao trabalhar com o Windows 7 deparei com o problema relativo a se fazer o registro do IIS para o ASP gerando o seguinte erro:
An error has occurred: 0x8007b799
You must have administrative rights on this machine in order to run this tool.
O que ocorre: É necessário um novo tipo de configuração para o Windows 7. Para corrigir esse tipo de erro imediatamente, você precisa desativar o seu nível de UAC :
Start > Control Panel > System and Security > Action Center > Choose Your UAC Level - Set this to Never Notify;
Após alterar o nível, você deve reiniciar o computador e adentrar novamente com usuário e senha.
Após isso, ao tentar novamente registrar o IIS na máquina você terá sucesso:
Além disso, ao tentar se publicar uma página que tenha sido criada no Visual Studio 2010 com o ASP.NET em uma máquina com o Windows 7 será necessário antes de tentar publicar e após registrar o IIS com sucesso instalar o IIS 6 Metabase.
O IIS 6 Metabase pode ser obtido na página da Microsoft.
An error has occurred: 0x8007b799
You must have administrative rights on this machine in order to run this tool.
O que ocorre: É necessário um novo tipo de configuração para o Windows 7. Para corrigir esse tipo de erro imediatamente, você precisa desativar o seu nível de UAC :
Start > Control Panel > System and Security > Action Center > Choose Your UAC Level - Set this to Never Notify;
Após alterar o nível, você deve reiniciar o computador e adentrar novamente com usuário e senha.
Após isso, ao tentar novamente registrar o IIS na máquina você terá sucesso:
Além disso, ao tentar se publicar uma página que tenha sido criada no Visual Studio 2010 com o ASP.NET em uma máquina com o Windows 7 será necessário antes de tentar publicar e após registrar o IIS com sucesso instalar o IIS 6 Metabase.
O IIS 6 Metabase pode ser obtido na página da Microsoft.
DANFE EM VISUAL STUDIO 2010 E CRYSTAL REPORTS 2010
Olá, pessoal!
Venho através desta informar que a DANFE desenvolvida em VB.NET está agora atualizada para a versão mais nova do Visual Studio, o Visual Studio 2010.
Os relatórios da DANFE também foram atualizados para a nova versão do Crystal Reports.
A partir da versão 2010 do Visual Studio o Crystal Reports deixou de ser incluído com a aplicação. Para instalar o Crystal Reports você deve ir até a páginada SAP Bussines e baixar a versão disponível para integração com o Visual Studio 2010:
http://www.businessobjects.com/jump/xi/crvs2010/us2_default.asp
A opção a ser selecionada é a primeira da lista desta página e mostrada abaixo:
SAP Crystal Reports, version for Visual Studio 2010 - Standard
Standard EXE installation package which installs the software into the Visual Studio IDE.
O arquivo possui 295MB de tamanho e deve ser instalado a fim de que você possa criar relatório com o Crystal Reports no Visual Studio 2010.
O site oficial do Visual Studio 2010 é apresentado abaixo:
http://www.microsoft.com/visualstudio/pt-br/home-produtos
A DANFE possui a partir de agora uma função a mais que permite selecionar o modo de impressão da mesma, retrato ou paisagem. As versões antigas somente realizam a impressão em modo retrato e precisavam ter o relatório em Crystal Reports configurado a fim de que a impressão em paisagem pudesse ser possível. Com a nova funcionalidade um relatório no modo paisagem em Crystal Reports foi incluso ao código-fonte a fim de permitir que o mesmo seja impresso em modo paisagem.
Código que faz com que o relatório seja impresso em modo paisagem:
'DESCOMENTAR AQUI PARA VER A DANFE INICIAL 07/11/2010 23:05
'DANFE INICIAL
Dim myRelatorio As New Danfe_paisagem()
'Mudar formato para Paisagem
myRelatorio.PrintOptions.PaperOrientation = PaperOrientation.Landscape myRelatorio.SetDataSource(myDs1)
Me.CrvXml.ReportSource = myRelatorio
Me.CrvXml.Visible = True
Danfe_paisagem(0 é o nome do novo relatório em Crystal Reports para impressão da DANFE em modo de paisagem.
Lembro a todos que o código-fonte desta DANFE continua a ser
comercializado para os que necessitarem disto para o desenvolvimento da
nota fiscal eletrônica.
Também vale ressaltar que a parte de leitura do XML deste aplicativo pode ser utilizado para se obter os dados de qualquer XML de nota fiscal eletrônica a fim de que os mesmos possam ser acrescentados em uma tabela de qualquer base de dados - SQL SERVER, MUSQL, ORACLE, INFORMIX, etc.
Sucesso a todos!!
By
Leonardo Metelys
Desenvolvedor ASP.NET / VB.NET / C#.NET / Delphi
Assinar:
Postagens (Atom)
UM APLICATIVO PARA LEITURA DEVOCIONAL ANUAL DA BIBLIA EM ANDROID
Olá, pessoal! Este novo projeto foi criado em Visual Studio 2019 em C#.Net com o Xamarin. Já está disponível no Google Play para vocês baix...
-
As funções abaixo ajudam na leitura de um arquivo XML da NF-e. Você só precisa fazer a leitura das tags corretas e lançá-las na base de dado...
-
O GLPI é um dos muitos tipos de aplicativos helpdesk free existentes na internet. O fórum do mesmo pode ser encontrado neste link: ...
-
Olá, pessoal! Esse projeto foi criado em 2017 e aprimorado agora em 2018. Foi também criado com o Visual Studio 2015 em C#.NET com o Xa...