1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147
|
Option Explicit On
Imports System.IO
Imports System.Runtime.InteropServices
Imports System.Threading
Public Class Form1
<DllImport("user32.dll")>
Shared Function SetWindowPos(ByVal hWnd As IntPtr, ByVal hWndInsertAfter As IntPtr, ByVal X As Integer, ByVal Y As Integer, ByVal cx As Integer, ByVal cy As Integer, ByVal uFlags As Integer) As Boolean
End Function
Dim FALire As System.IO.StreamReader
Dim CheminDuFichierABC As String = "D:\windows"
Dim NomDuFichierABC As String = "notepad.exe"
Dim CheminDuFichierTEXT As String = "D:\TEST"
Dim NomDuFichierTEXT As String = "TEXTE.txt"
Dim AttendreFichierDisponible As System.Threading.Thread = Nothing
Delegate Sub IsFichierDisponible(Resultat As Byte)
Dim FichierDisponible As Byte ' 0 = rien à faire : 1 = lecture : 2 = écriture
Dim Permission As Byte ' 0 = rien à faire : 1 = lecture : 2 = écriture
Private Sub BRun_ABC_Click(sender As Object, e As EventArgs) Handles BRun_ABC.Click
''Nettoie le fichier qui recevra le résultat ou cré le fichier s'il n'existe pas et éventuellement le répertoire
Using StreamToWriteOut As StreamWriter = File.CreateText(CheminDuFichierTEXT & "\" & NomDuFichierTEXT)
StreamToWriteOut.Write("Ceci est un test !") 'Enregistre en écrasant le fichier en place
'Await StreamToWriteOut.WriteAsync("Ceci est un test !") 'à utiliser si on travail en asynchrone
End Using
'début du process
Using myProcess2 As New Process
myProcess2.StartInfo.FileName = CheminDuFichierABC & "\" & NomDuFichierABC
myProcess2.Start() 'start process exe
'modifier dimension et position du cmd
Thread.Sleep(100)
SetWindowPos(myProcess2.MainWindowHandle, IntPtr.Zero, 1201, 0, 720, 800, 0)
'attendre la fin du process
ActiverSurveillanceFichier() 'Nota: Lorsque notepad est lancé cette routine continu jusqu'à end de ce sub or qu'elle doit attendre la fin de notepad ou l'action sur le bouton kill !
End Using
'ici vérifier si texte.txt est bien fermé avant de l'ouvrir pour charger les infos
' Lit la Solution dans le fichier "TEXTE.txt"
Dim monStreamReader2 As StreamReader
monStreamReader2 = New StreamReader(CheminDuFichierTEXT & "\" & NomDuFichierTEXT)
Dim SolutionBrut = ""
TextBox1.Text = ""
SolutionBrut += monStreamReader2.ReadToEnd()
'affiche la solution
TextBox1.Text = SolutionBrut
monStreamReader2.Close()
End Sub
Private Sub ActiverSurveillanceFichier()
AttendreFichierDisponible = New System.Threading.Thread(AddressOf SurveillanceFichier)
AttendreFichierDisponible.Start()
Try
If AttendreFichierDisponible.IsAlive Then
AttendreFichierDisponible.Join()
End If
Catch
End Try
End Sub
Private Sub SurveillanceFichier()
'boucle de test
While True
Dim localByName As Process() = Process.GetProcessesByName("notepad")
If localByName Is "" Then Permission = 1 : Exit While
End While
While True
If Permission = 0 Then
Exit While
Else
If System.IO.File.Exists(CheminDuFichierABC & "\" & NomDuFichierABC) Then
Try
If Permission = 1 Then ' ouvrir en lecture
FALire = New System.IO.StreamReader(CheminDuFichierABC & "\" & NomDuFichierABC)
'' FichierDisponible = 1 ' permettre la lecture des données
'Else ' si Permission = 2, ouvrir en écriture (rien à faire si permission 0)
' FAEcrire = New System.IO.StreamWriter(NomEtCheminDuFichier, True)
' '' FichierDisponible = 2 ' permettre l'écriture des données
End If
Exit While
Catch
' on continue la boucle des essais d'ouverture
End Try
Else
Try
If Permission = 2 Then ' si Permission = 2, créer le fichier pour écriture
' FAEcrire = New System.IO.StreamWriter(NomEtCheminDuFichier)
'' FichierDisponible = 2 ' permettre l'écriture des données pour la première fois
Else
Permission = 0 ' tentative de lecture d'un fichier non existant
End If
Exit While
Catch
' on continue la boucle des essais d'ouverture
End Try
End If
End If
End While
FichierDisponible = Permission
Me.BeginInvoke(New IsFichierDisponible(AddressOf ExploiteFichier), FichierDisponible)
End Sub
Private Sub ExploiteFichier(FichierDisponible As Byte)
Me.Refresh()
Select Case FichierDisponible
Case 0 'PERMISSION 0 : le fichier n'est pas ouvert
Case 1 'PERMISSION 1 : le fichier est ouvert en lecture CAR IL EXISTAIT
Case 2 'PERMISSION 2 : le fichier est ouvert en écriture
End Select
Permission = 0
End Sub
Private Sub BKill_ABC_Click(sender As Object, e As EventArgs) Handles BKill_ABC.Click
Dim P As System.Diagnostics.Process
Dim SolutionBrut = ""
Try
For Each P In System.Diagnostics.Process.GetProcesses
If P.ProcessName = NomDuFichierABC.Substring(0, NomDuFichierABC.IndexOf(".")) Then
P.Kill()
TextBox1.Text = ""
End If
Next
Catch
End Try
End Sub
End Class |
Partager