Il componente ci dovrebbe essere lo stesso, non so se è già abilitato, in Office 2007 si doveva abilitare, basta che lanci l'installazione di Office 2016 e scegli l'opzione aggiungi/rimuovi caratteristiche, e controlla se risulta installato: Microsoft Office Document Imaging (vedi foto che già ti ho inviato).
Poi nel progetto VisualStudio devi aggiungere il riferimento com.
Apri un nuovo progetto VisualBasic/WindowsDesktop/App Widows Form (.Net Framework) e chiamalo OCR.
Vai su esplora soluzioni: guarda l'immagine che si chiama riferimento.
Scegli il componente com: guarda l'immagine che si chiama Imaging (da me il componente si chama Microsoft Office Document Imaging 12.0...), il tuo sarà una versione successiva.
a questo punto, il tuo progetto VS può usare l'OCR di Office.
Imports MODI
' necessita di office 2003 o successivo installato,
' nella personalizzazione dell'installazione di Office
' abilitare alla voce: Strumenti di Office -> Microsoft Office Document Imaging
' Interop.MODI.dll deve risultare tra i riferimenti
Public Class Form1
Dim Percorso As String
Private Sub Form1_Load(sender As Object, e As EventArgs) Handles MyBase.Load
Percorso = Application.StartupPath & "\"
Me.Text = "OCR fom screen, cartella di lavoro: " & Percorso
TexNOMEFILES.Text = "OCR_immagine_01"
ButTOPMOST.Text = "^ Top Most ^"
ButENGLISH.Text = "OCR English"
ButITALIANO.Text = "OCR Italiano"
Me.MinimumSize = New Size(426, 290)
Me.TopMost = True
LabAREA.BackColor = Color.Gray
Me.TransparencyKey = Color.Gray
Me.BackColor = Color.DarkGray
End Sub
Private Sub ButENGLISH_Click(sender As Object, e As EventArgs) Handles ButENGLISH.Click
Decodifica(MiLANGUAGES.miLANG_ENGLISH)
End Sub
Private Sub ButITALIANO_Click(sender As Object, e As EventArgs) Handles ButITALIANO.Click
Decodifica(MiLANGUAGES.miLANG_ITALIAN)
End Sub
Sub Decodifica(lingua As MODI.MiLANGUAGES)
Dim bmp As New Bitmap(LabAREA.Width, LabAREA.Height) ' dimensioni bmp, come label trasparente
Dim g As Graphics = Graphics.FromImage(bmp) ' layer grafico
Dim OffSetLEFT = 20 ' centraggio immagine, cambia in base allo stile di visualizzazione in win
Dim OffSetTOP = 39 ' centraggio immagine, cambia in base allo stile di visualizzazione in win
' copia lo schermo in accordo con le dimensioni attuali
g.CopyFromScreen(Me.Left + OffSetLEFT, Me.Top + OffSetTOP, 0, 0, New Size(bmp.Width, bmp.Height), CopyPixelOperation.SourceCopy)
' salvataggio bmp per verifica centraggio e archiviazione
bmp.Save(Percorso & Trim(TexNOMEFILES.Text) & ".bmp")
Me.Enabled = False ' form disattivato mentre si effetua la conversione
Try
Dim md As MODI.Document = New MODI.Document()
' caricamento in md dell'immagine bmp salvata
md.Create(Convert.ToString(Percorso & Trim(TexNOMEFILES.Text) & ".bmp"))
md.OCR(lingua, True, True) ' scelta lingua
Dim image As MODI.Image = CType(md.Images(0), MODI.Image) ' immagine convertibile in testo
RichTextBox1.Text = image.Layout.Text ' conversione e visualizzazione
' salvataggio testo
RichTextBox1.SaveFile(Percorso & Trim(TexNOMEFILES.Text) & ".txt", RichTextBoxStreamType.PlainText)
Catch ex As Exception
' errori se: Office non è installato, si inquadra un'area vuota, la bmp è troppo piccola.
RichTextBox1.Text = ex.Message
End Try
Me.Enabled = True
End Sub
Private Sub ButTOPMOST_Click(sender As Object, e As EventArgs) Handles ButTOPMOST.Click
Me.TopMost = Not Me.TopMost
If Me.TopMost Then
ButTOPMOST.Text = "^ Top Most ^"
Else
ButTOPMOST.Text = "_ Top Most _"
End If
End Sub
End Class
nel form devi inserire una label: LabAREA
tre bottoni: ButENGLISH, ButITALIANO, ButTOPMOST
una RichTextBox: RichTextBox1
una TextBox: TexNOMEFILES
Guarda l'immagine: Progettazione
La label: LabArea è quella che ha il BackColor trasparente e ti farà vedere il desktop.
Dovrai anche mettere tutti gli ancoraggi per fare in modo che al ridimensionamento gli strumenti si adeguino di conseguenza.
Il programma salva nel percorso dell'eseguibile una BMP e un TXT.
Se hai dubbi, magari ho dimenticato di spiegare qualcosa che do per scontato, chiedi.
Se non comprendi il funzionamento del codice, chiedi.
Allegati: