n° 219
Novembre 2017
Luglio 16, 2018, 10:56:34 *
Benvenuto! Accedi o registrati.
Hai dimenticato l'e-mail di attivazione?

Accesso con nome utente, password e durata della sessione
Notizia:
 
   Indice   Linux Windows Techassistance Gameassistance videogame hardware Aiuto Ricerca Agenda Downloads Accedi Registrati  


* Messaggi recenti
Messaggi recenti
Pagine: 1 [2]   Vai giù
  Stampa  
Autore Discussione: "Leggere" l esecuzione di un programmi cmd  (Letto 7266 volte)
0 utenti e 1 Utente non registrato stanno visualizzando questa discussione.
nimitz
Newbie
*

Karma: +0/-0
Scollegato Scollegato

Messaggi: 0


Mostra profilo
VB
« Risposta #15 inserita:: Settembre 08, 2005, 06:08:58 »

beh, credo di aver già risolto con il seguente codice:
(scusate se il post è lunghetto, ma potrebbe servire ad altre persone)

Codice:
Private Declare Function CreatePipe Lib \"kernel32\" (phReadPipe As Long, phWritePipe As Long, lpPipeAttributes As SECURITY_ATTRIBUTES, ByVal nSize As Long) As Long
Private Declare Sub GetStartupInfo Lib \"kernel32\" Alias \"GetStartupInfoA\" (lpStartupInfo As STARTUPINFO)
Private Declare Function CreateProcess Lib \"kernel32\" Alias \"CreateProcessA\" (ByVal lpApplicationName As String, ByVal lpCommandLine As String, lpProcessAttributes As Any, lpThreadAttributes As Any, ByVal bInheritHandles As Long, ByVal dwCreationFlags As Long, lpEnvironment As Any, ByVal lpCurrentDriectory As String, lpStartupInfo As STARTUPINFO, lpProcessInformation As PROCESS_INFORMATION) As Long
Private Declare Function SetWindowText Lib \"user32\" Alias \"SetWindowTextA\" (ByVal hwnd As Long, ByVal lpString As String) As Long
Private Declare Function ReadFile Lib \"kernel32\" (ByVal hFile As Long, lpBuffer As Any, ByVal nNumberOfBytesToRead As Long, lpNumberOfBytesRead As Long, lpOverlapped As Any) As Long
Private Declare Function SendMessage Lib \"user32\" Alias \"SendMessageA\" (ByVal hwnd As Long, ByVal wMsg As Long, ByVal wParam As Long, lParam As Any) As Long
Private Declare Function CloseHandle Lib \"kernel32\" (ByVal hObject As Long) As Long

Private Type SECURITY_ATTRIBUTES
  nLength As Long
  lpSecurityDescriptor As Long
  bInheritHandle As Long
End Type

Private Type PROCESS_INFORMATION
  hProcess As Long
  hThread As Long
  dwProcessId As Long
  dwThreadId As Long
End Type

Private Type STARTUPINFO
  cb As Long
  lpReserved As Long
  lpDesktop As Long
  lpTitle As Long
  dwX As Long
  dwY As Long
  dwXSize As Long
  dwYSize As Long
  dwXCountChars As Long
  dwYCountChars As Long
  dwFillAttribute As Long
  dwFlags As Long
  wShowWindow As Integer
  cbReserved2 As Integer
  lpReserved2 As Byte
  hStdInput As Long
  hStdOutput As Long
  hStdError As Long
End Type

Private Type OVERLAPPED
    ternal As Long
    ternalHigh As Long
    offset As Long
    OffsetHigh As Long
    hEvent As Long
End Type

Private Const STARTF_USESHOWWINDOW = &H1
Private Const STARTF_USESTDHANDLES = &H100
Private Const SW_HIDE = 0
Private Const EM_SETSEL = &HB1
Private Const EM_REPLACESEL = &HC2

Private Sub Command1_Click()
  Command1.Enabled = False
  Redirect Text1.Text, Text2
  Command1.Enabled = True
End Sub
Private Sub Form_Load()
    Text1.Text = \"ping 127.0.0.1\"
End Sub
Private Sub Form_QueryUnload(Cancel As Integer, UnloadMode As Integer)
  If Command1.Enabled = False Then Cancel = True
End Sub

Sub Redirect(cmdLine As String, txtOut As TextBox)
  Dim i%, t$
  Dim pa As SECURITY_ATTRIBUTES
  Dim pra As SECURITY_ATTRIBUTES
  Dim tra As SECURITY_ATTRIBUTES
  Dim pi As PROCESS_INFORMATION
  Dim sui As STARTUPINFO
  Dim hRead As Long
  Dim hWrite As Long
  Dim bRead As Long
  Dim lpBuffer(1024) As Byte
 
 
  pa.nLength = Len(pa)
  pa.lpSecurityDescriptor = 0
  pa.bInheritHandle = True
 
  pra.nLength = Len(pra)
  tra.nLength = Len(tra)

  If CreatePipe(hRead, hWrite, pa, 0) <> 0 Then \'creo la pipe per scambiare i dati tra processi
    sui.cb = Len(sui)    \' preparo la stuttura di startup per il processo dos
    GetStartupInfo sui
    sui.hStdOutput = hWrite \'specifico l\'handle tornato dalla funzione CreatePipe
    sui.hStdError = hWrite
    sui.dwFlags = STARTF_USESHOWWINDOW Or STARTF_USESTDHANDLES \' questi flag vanno specificati senno alcuni  campi della struttura di startup vengono ignorati
    sui.wShowWindow = SW_HIDE \' con questo flag il processo viene creato ma non si vede
    If CreateProcess(vbNullString, cmdLine, pra, tra, True, 0, Null, vbNullString, sui, pi) <> 0 Then  \' creo il processo dos
     
      txtOut = \"\"
      Do \' looppo fino a quando non c\'è piu niente da leggere
        Erase lpBuffer() \' svuoto l\'array del buffer
        If ReadFile(hRead, lpBuffer(0), 1023, bRead, ByVal 0& ) Then \' con questa funzione leggo l\'altra estremità della pipe cioe quella dove il dos indirizza l\'output
          SendMessage txtOut.hwnd, EM_SETSEL, -1, 0 \' deseleziono il testo nella text box output
          SendMessage txtOut.hwnd, EM_REPLACESEL, False, lpBuffer(0) \' siccome non c\'è nessuna selezione il testo viene appeso
          DoEvents \'necessario per non fare impallare tutto
        Else
            \' non c\'è piu niente da leggere e chiudo il processo dos
          CloseHandle pi.hThread
          CloseHandle pi.hProcess
          Exit Do
        End If
        CloseHandle hWrite \' si chiudono gli handle della pipe
      Loop
      CloseHandle hRead
    End If
  End If
End Sub
Registrato
capsiu
Jr. Member
**

Karma: +0/-0
Scollegato Scollegato

Messaggi: 53


Mostra profilo E-mail
« Risposta #16 inserita:: Maggio 08, 2008, 01:47:13 »

ciao.. mi rivolgo a voi esperti programmatori.. per richiedere un "piccolo" aiuto... come tesi dovrei leggere in locale le informazioni del pc (utente) che si registra al mio database... per ora sono riuscito a leggere il mac address della nic.. pero' inquanto rappresenta un controllo raggirabile in pochi minuti, volevo domandarvi se il codice riportato qui sopra potrebbe essermi di aiuto...(per conoscere meglio la mia idea di tesi potete trovarla sulle discussioni dedicate ad altri linguaggi di programmazione)
Attualmente ho visual express 5.0
Quello utilizzato sopra e' il 6? e alcune istruzioni  non sono compatibili con il 5? o no?
Nella speranza di poter contare sulla vostra conoscenza in campo informatico...
saluti
Registrato
Hyde
Global Moderator
Hero Member
*****

Karma: +47/-8
Scollegato Scollegato

Messaggi: 3277


I am a man who walks alone


Mostra profilo WWW
« Risposta #17 inserita:: Maggio 14, 2008, 07:52:42 »

ciao.. mi rivolgo a voi esperti programmatori.. per richiedere un "piccolo" aiuto... come tesi dovrei leggere in locale le informazioni del pc (utente) che si registra al mio database... per ora sono riuscito a leggere il mac address della nic.. pero' inquanto rappresenta un controllo raggirabile in pochi minuti, volevo domandarvi se il codice riportato qui sopra potrebbe essermi di aiuto...(per conoscere meglio la mia idea di tesi potete trovarla sulle discussioni dedicate ad altri linguaggi di programmazione)
Attualmente ho visual express 5.0
Quello utilizzato sopra e' il 6? e alcune istruzioni  non sono compatibili con il 5? o no?
Nella speranza di poter contare sulla vostra conoscenza in campo informatico...
saluti

Il codice postato serve esclusivamente a ridirigere l'output di un programma e non ha nulla a che vedere con la tua esigenze.
Inoltre... Visual express 5.0 che roba è?!
Registrato

I Moderatori invitano tutti gli utenti a prendere visione del REGOLAMENTO e a rispettarlo.
http://myitside.blogspot.com
Pagine: 1 [2]   Vai su
  Stampa  
 
Vai a:  

Copyright © 2017 Edizioni Master SpA. p.iva : 02105820787

Tutti i diritti di proprietà letteraria e artistica riservati. - Privacy



powered by Simple Machines