Questo sito utilizza cookies solo per scopi di autenticazione sul sito e nient'altro. Nessuna informazione personale viene tracciata. Leggi l'informativa sui cookies.
Username: Password: oppure
Visual Basic 6 - Trasferimento Immagini con Winsock
Forum - Visual Basic 6 - Trasferimento Immagini con Winsock

Pagine: [ 1 2 ] Precedente | Prossimo
Avatar
roberto82 (Normal User)
Newbie


Messaggi: 5
Iscritto: 26/08/2008

Segnala al moderatore
Postato alle 22:09
Martedì, 26/08/2008
Questo topic è stato chiuso dal moderatore

Salve a tutti, sto realizzando un programma in VB6 che permetta di effettuare una teleassistenza tipo remote desktop.
Il programma è diviso in due parti: un client ed un server.
Utilizzando alcune API di windows sono riuscito ad effettuare il controllo del mouse, ciò che mi manca è poter visualizzare nel programma server ciò che succede nello schermo del programma client, per fare ciò ho ho utilizzato l'API Keydb_event per simulare il PrintScreen dello schermo ed avere un'immagine da poter trasferire al programma server. Inizialmente ho seguito questa pista: Ho salvato su file l'immagine catturata con il PrintScreen; ho inviato il file al programma server che ricevuto lo stesso lo salva su disco per poterlo poi caricare in un controllo image. Essendo però, la funzione, all'interno di un timer con intervallo settato ad 1 mSec tutti i salvataggi e gli accessi a disco rigido mi "inchiodano" il programma!

Vorrei sapere se esiste un modo per poter inviare il file dal programma client al programma server senza dover per forza salvare lo stesso su disco prima di poterlo caricare su un controllo image.

Grazie Anticipatamente!

PM
Avatar
GrG (Member)
Guru^2


Messaggi: 3430
Iscritto: 21/08/2007

Segnala al moderatore
Postato alle 11:41
Mercoledì, 27/08/2008
mi spiace ma penso che tu debba per forza salvare prima l'immagine su HD e poi caricarla nel controllo image o picturebox.

PM
Avatar
Overflow (Normal User)
Expert


Messaggi: 334
Iscritto: 11/01/2008

Segnala al moderatore
Postato alle 16:24
Mercoledì, 27/08/2008
non so se è possibile inviare il contenuto della clipboard tramite winsock.

Codice sorgente - presumibilmente Plain Text

  1. winsock1.senddata clipboard.getdata(vbcfbitmap)



ma non so come ricevere dall'altra parte.

PM
Avatar
roberto82 (Normal User)
Newbie


Messaggi: 5
Iscritto: 26/08/2008

Segnala al moderatore
Postato alle 20:18
Mercoledì, 27/08/2008
Grazie mille! l'idea Winsock1.SendData (vbcfBitmap) è buona! ora cercherò di creare la controparte per ricevere il file poichè se vado sull'evento data_arrival del server per ora mi restituisce un numero tipo: -958754754.
Grazie ancora a tutti, vi farò sapere...


PM
Avatar
roberto82 (Normal User)
Newbie


Messaggi: 5
Iscritto: 26/08/2008

Segnala al moderatore
Postato alle 20:21
Lunedì, 01/09/2008
Salve a Tutti! credo di aver risolto in parte il mio problema, ho utilizzato 3 API per trasformare l'immagine in un array dove sono memorizzati i pixel dell'immagine con i rispettivi colori da 0 a 255. Le API in questione sono: GetObject, GetBitmapBits e SetBtmapBits. Il problema che ho ora è un'altro: Credo, correggetemi se sbaglio, che la funzione Winsock1.SendData, o il controllo Winsock, permettano di spedire massimo 4096 KB di dati alla volta, infatti l'mmagine che ricevo nel programma server è dimezzata. Qualcuno sa indicarmi, sempre che la mia supposizione sia giusta, se esiste un modo per aumentare la capienza dei dati da inviare???

Grazie ancora a tutti!

PM
Avatar
GrG (Member)
Guru^2


Messaggi: 3430
Iscritto: 21/08/2007

Segnala al moderatore
Postato alle 21:11
Lunedì, 01/09/2008
bè un limite c'è (ora nn ricordo se è cm quello ke dici tu)...

Cmq devi "spezzare" il file e mandarlo in più pacchetti...

In pratica devi utilizzare qualche ciclo...

Farebbe comodo se posti il codice che usi...

PM
Avatar
roberto82 (Normal User)
Newbie


Messaggi: 5
Iscritto: 26/08/2008

Segnala al moderatore
Postato alle 19:48
Martedì, 02/09/2008
Ti posto il codice che ho utilizzato:


‘’’’ LATO CLIENT ‘’’’


Private Sub InviaDesktop()

If teleassistenza = True And SockMain.State = sckConnected Then

    ‘ posiziona il cursore in base alle coordinate ricevute

    SetCursorPos Val(Text1.Text), Val(Text2.Text)    
    On Error Resume Next
  
   ‘ esegue il print dello schermo

    PrintScreen (False)

    ‘carica l’immagine nel controllo picture

    Picture1.Picture = Clipboard.GetData(vbCFBitmap)  
    GetObject Picture1.Picture, Len(PicInfo), PicInfo  
    BytesPerLine = (PicInfo.bmWidth * 3 + 3) And &HFFFFFFFC

   'questo array (picbits) è molto grande
   ' dell'ordine PicBits(7000000) as byte
    ReDim PicBits(1 To BytesPerLine * PicInfo.bmHeight * 3) As Byte

    'Copia i bit dell’immagine in un array

    GetBitmapBits Picture1.Image, UBound(PicBits), PicBits(1)
    
   ‘ invia l’array di bits

    SockTele.SendData (PicBits)
    DoEvents
    
End If
End Sub



‘’’’ LATO SERVER ‘’’’



Private Sub SockMain_DataArrival(ByVal bytesTotal As Long)
Dim dati As String

SockMain.GetData dati
If dati = "disconnetti" Then
    txtLog.Text = txtLog.Text & "@ DISCONNESSIONE @ {HOST: " & SockMain.RemoteHostIP & " - PORTA: " & SockMain.RemotePort & "}" & vbCrLf
Else
‘ recupera i bits dell’array inviato dal client e li imposta nel controllo picture
    SetBitmapBits Picture1.Image, UBound(dati), dati(1)
    Refresh
    Picture1.Refresh
End If

End sub

Grazie ancora una volta del tempo che mi dedichi!

Ultima modifica effettuata da roberto82 il 02/09/2008 alle 19:51
PM
Avatar
GrG (Member)
Guru^2


Messaggi: 3430
Iscritto: 21/08/2007

Segnala al moderatore
Postato alle 19:55
Martedì, 02/09/2008
Bè prima di tutto ti devi assicurare che il client invia tutti i dati....

io metterei un ciclo qui:

‘ invia l’array di bits

SockTele.SendData (PicBits)
DoEvents

End If
End Sub


trasformandolo in:
dim i as integer
‘ invia l’array di bits
for i = 0 to Ubound(PicBits)
SockTele.SendData PicBits(i)
next i
DoEvents

End If
End Sub

Così il client invierà tutti i dati nell'arrai...

e dovresti fare anche un ciclo quando ricevi i dati...

PM
Avatar
roberto82 (Normal User)
Newbie


Messaggi: 5
Iscritto: 26/08/2008

Segnala al moderatore
Postato alle 16:11
Sabato, 06/09/2008
Grazie mille! l'idea del ciclo è stata ottima!
Grazie ancora di tutto!

Buona giornata

Roberto

PM
Pagine: [ 1 2 ] Precedente | Prossimo