Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- Add-Type -AssemblyName System.Windows.Forms
- # Définir le chemin du fichier de configuration JSON
- $configFile = "config.json"
- # Fonction pour sauvegarder les paramètres dans un fichier JSON
- function SaveToFile($filePath, $isChecked, $isAutoSearchChecked) {
- $jsonObject = @{
- "FilePath" = $filePath
- "IsChecked" = $isChecked
- "IsAutoSearchChecked" = $isAutoSearchChecked
- } | ConvertTo-Json
- $jsonObject | Out-File -FilePath $configFile -Encoding UTF8
- }
- # Fonction pour charger les paramètres depuis le fichier JSON
- function LoadFileSelection() {
- if (Test-Path $configFile) {
- $jsonObject = Get-Content -Path $configFile | ConvertFrom-Json
- $filePath = $jsonObject.FilePath
- $isChecked = $jsonObject.IsChecked
- $isAutoSearchChecked = $jsonObject.IsAutoSearchChecked
- return $filePath, $isChecked, $isAutoSearchChecked
- }
- return $null, $null, $null
- }
- # Fonction pour rechercher la dernière ligne contenant "0x" dans un fichier
- function FindLastLineWithHex($filePath) {
- $content = Get-Content -Path $filePath
- $lastLine = $content | Where-Object { $_ -match "0x" }
- if ($lastLine.Count -gt 0) {
- $lastLine = $lastLine | Select-Object -Last 1
- return $lastLine
- }
- return $null
- }
- # Crée un formulaire
- $form = New-Object Windows.Forms.Form
- $form.Text = "Sélectionner un fichier et écrire dans un autre"
- $form.Size = New-Object Drawing.Size(600, 300)
- $form.StartPosition = "CenterScreen"
- # Crée une case à cocher pour sélectionner un fichier
- $checkBoxSelectFile = New-Object Windows.Forms.CheckBox
- $checkBoxSelectFile.Text = "Sélectionner un fichier"
- $checkBoxSelectFile.Location = New-Object Drawing.Point(20, 20)
- # Charge le chemin du fichier sélectionné et l'état de recherche depuis le fichier JSON
- $filePath, $isChecked, $isAutoSearchChecked = LoadFileSelection
- $checkBoxSelectFile.Checked = $isChecked
- $form.Controls.Add($checkBoxSelectFile)
- # Crée une case à cocher pour activer/désactiver la recherche automatique
- $checkBoxAutoSearch = New-Object Windows.Forms.CheckBox
- $checkBoxAutoSearch.Text = "Recherche automatique"
- $checkBoxAutoSearch.Location = New-Object Drawing.Point(20, 50)
- $checkBoxAutoSearch.Checked = $isAutoSearchChecked
- $form.Controls.Add($checkBoxAutoSearch)
- # Crée un champ de texte pour afficher/écrire le chemin du fichier sélectionné
- $textBoxFilePath = New-Object Windows.Forms.TextBox
- $textBoxFilePath.Location = New-Object Drawing.Point(20, 90)
- $textBoxFilePath.Width = 400
- $form.Controls.Add($textBoxFilePath)
- # Crée un champ de texte pour le nom du fichier cible
- $textBoxTargetFileName = New-Object Windows.Forms.TextBox
- $textBoxTargetFileName.Location = New-Object Drawing.Point(20, 130)
- $textBoxTargetFileName.Width = 400
- $textBoxTargetFileName.Text = "result.txt"
- $form.Controls.Add($textBoxTargetFileName)
- # Crée un bouton pour lancer la recherche manuellement
- $buttonWriteLine = New-Object Windows.Forms.Button
- $buttonWriteLine.Text = "Lancer la recherche et Sauvegarder"
- $buttonWriteLine.Location = New-Object Drawing.Point(20, 170)
- $form.Controls.Add($buttonWriteLine)
- # Gérer l'événement Click du bouton "Lancer la recherche"
- $buttonWriteLine.Add_Click({
- if ($filePath -and (Test-Path $filePath)) {
- $targetFile = Join-Path -Path (Get-Location) -ChildPath $textBoxTargetFileName.Text
- $lastLine = FindLastLineWithHex $filePath
- if ($lastLine) {
- $currentContent = ""
- if (Test-Path $targetFile) {
- $currentContent = Get-Content -Path $targetFile -Raw
- }
- $newContent = $currentContent + $lastLine
- $newContent | Out-File -FilePath $targetFile -Encoding UTF8
- Write-Host "Dernière ligne écrite dans '$targetFile'."
- }
- else {
- [System.Windows.Forms.MessageBox]::Show("Aucune ligne contenant '0x' n'a été trouvée dans le fichier sélectionné.", "Erreur", [System.Windows.Forms.MessageBoxButtons]::OK, [System.Windows.Forms.MessageBoxIcon]::Error)
- }
- }
- else {
- [System.Windows.Forms.MessageBox]::Show("Veuillez sélectionner un fichier valide.", "Erreur", [System.Windows.Forms.MessageBoxButtons]::OK, [System.Windows.Forms.MessageBoxIcon]::Error)
- }
- })
- # Gérer l'événement CheckedChanged de la case à cocher pour afficher le OpenFileDialog
- $checkBoxSelectFile.Add_CheckedChanged({
- $buttonWriteLine.Enabled = -not $checkBoxSelectFile.Checked
- if ($checkBoxSelectFile.Checked) {
- # Afficher la boîte de dialogue pour sélectionner un fichier
- $openFileDialog = New-Object Windows.Forms.OpenFileDialog
- $openFileDialog.Title = "Sélectionner un fichier"
- $openFileDialog.Filter = "Tous les fichiers (*.*)|*.*"
- $result = $openFileDialog.ShowDialog()
- if ($result -eq [Windows.Forms.DialogResult]::OK) {
- $filePath = $openFileDialog.FileName
- $textBoxFilePath.Text = $filePath
- # Sauvegarder l'état de la case à cocher dans le fichier JSON
- SaveToFile $filePath $checkBoxSelectFile.Checked $checkBoxAutoSearch.Checked
- }
- }
- else {
- # Effacer le chemin du fichier sélectionné
- $filePath = $null
- $textBoxFilePath.Text = ""
- # Sauvegarder l'état de la case à cocher dans le fichier JSON
- SaveToFile $filePath $checkBoxSelectFile.Checked $checkBoxAutoSearch.Checked
- }
- })
- # Gérer l'événement CheckedChanged de la case à cocher pour la recherche automatique
- $checkBoxAutoSearch.Add_CheckedChanged({
- # Sauvegarder l'état de la case à cocher dans le fichier JSON
- SaveToFile $filePath $checkBoxSelectFile.Checked $checkBoxAutoSearch.Checked
- if ($checkBoxAutoSearch.Checked) {
- # Désactiver le bouton "Lancer la recherche" lorsque la recherche automatique est activée
- $buttonWriteLine.Enabled = $false
- # Lancer la recherche automatiquement si la case "Recherche automatique" est cochée
- $buttonWriteLine.PerformClick()
- } else {
- # Activer le bouton "Lancer la recherche" lorsque la recherche automatique est désactivée
- $buttonWriteLine.Enabled = $true
- }
- })
- # Mettre à jour l'affichage initial des contrôles en fonction de l'état des cases à cocher
- $buttonWriteLine.Enabled = -not $checkBoxSelectFile.Checked
- # Charger le chemin du fichier sélectionné au démarrage de l'application
- $textBoxFilePath.Text = $filePath
- # Si le chemin du fichier est défini et la case est cochée, recherchez automatiquement la dernière ligne contenant "0x" et enregistrez-la dans un fichier
- if ($filePath -and $isChecked -and $isAutoSearchChecked -and (Test-Path $filePath)) {
- $targetFile = Join-Path -Path (Get-Location) -ChildPath $textBoxTargetFileName.Text
- $lastLine = FindLastLineWithHex $filePath
- if ($lastLine) {
- $currentContent = ""
- if (Test-Path $targetFile) {
- $currentContent = Get-Content -Path $targetFile -Raw
- }
- $newContent = $currentContent + $lastLine
- $newContent | Out-File -FilePath $targetFile -Encoding UTF8
- Write-Host "Dernière ligne écrite dans '$targetFile'."
- }
- }
- # Affiche le formulaire
- $form.ShowDialog() | Out-Null
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement