Καλησπέρα σε όλους.
Επειδή τελευταία ασχολούμαι αρκετά με τον προγραμματισμό (όχι, δεν είμαι προγραμματιστής, ηλεκτρολόγος σπουδάζω), βρήκα ότι κάποια πράγματα μου χρειάζονται πάντα, ανεξαρτήτως προγράμματος.
Οπότε λέω, αντί να τα γράφω όλη την ώρα.. δεν κάνω ένα module που να τα περιέχει, και να τα καλώ?? Κι αυτό έκανα.
Θέλω έμπειρους όμως να μου πουν την γνώμη τους για το τι έχω κάνει.. σίγουρα θα μπορούν να γίνουν πολλές βελτιώσεις. Παραθέτω λοιπόν τον κώδικα και στο τέλος θα πω 2 λόγια για τη ήθελα να κάνει το καθένα.
'Version 5.0.1 2011/12/25
Option Strict On
Imports System
Imports System.IO
Imports System.Net
Imports System.Diagnostics
Module modCommon
Public WindowsVersion As Integer = 32
Public CurrentLanguage As String = "English"
Public strRoot As String = My.Application.Info.DirectoryPath & "\"
Public strSettingsPath As String = strRoot & "Settings\"
Public strExtras As String = strRoot & "Extras\"
Public strLanguageFolders As String = strRoot & "Language\"
Public strSkin As String = strRoot & "Skins\"
Public strChangeLog As String = strRoot & "Changelog.txt"
Public strEULA As String = strRoot & "Eula.rtf"
Public strUniversal As String = strLanguageFolders & "UniversalStrings.txt"
Public strSettingsIni As String = strSettingsPath & "Settings.ini"
Public strSettingsOrig As String = strSettingsPath & "Settings.orig"
Public strExplorerExe As String = "explorer.exe"
Public strBrowser As String = Environment.GetEnvironmentVariable("programfiles") & "\Internet Explorer\iexplore.exe"
Public strUnrar As String = strExtras & "Unrarx86.exe"
Public strUnlocker As String = strExtras & "Unlockerx86.exe"
Public TextWrite_Persistent As TextWriter
Dim exeProcesses As New Process
Dim numOfPercents As Integer = 0
Public Sub ReadMainStrings()
If Directory.Exists(Environment.GetEnvironmentVariable("windir") & "\SysWOW64") Then
WindowsVersion = 64
strExplorerExe = Environment.GetEnvironmentVariable("windir") & "\SysWOW64\explorer.exe"
strUnlocker = strExtras & "Unlockerx64.exe"
ElseIf Directory.Exists(Environment.GetEnvironmentVariable("windir") & "\system32") Then
WindowsVersion = 32
strExplorerExe = Environment.GetEnvironmentVariable("windir") & "\system32\explorer.exe"
strUnlocker = strExtras & "Unlockerx86.exe"
End If
End Sub
Public Function isInternetAvailable(ByVal TestUrl As String) As Boolean
If My.Computer.Network.IsAvailable Then
' Returns True if connection is available
' is guaranteed to be online - perhaps your
' corporate site, or microsoft.com
Dim objUrl As New System.Uri(TestUrl)
' Setup WebRequest
Dim objWebReq As System.Net.WebRequest
objWebReq = System.Net.WebRequest.Create(objUrl)
Dim objResp As System.Net.WebResponse
Try
' Attempt to get response and return True
objResp = objWebReq.GetResponse
objResp.Close()
objWebReq = Nothing
Return True
Catch ex As Exception
' Error, exit and return False
objResp = Nothing
'objResp.Close()
objWebReq = Nothing
Return False
End Try
Else
Return False
End If
End Function
Public Function doProperPathName(ByVal TextToAmend As String) As String
If TextToAmend.EndsWith("\\") Then
TextToAmend = TextToAmend.Substring(0, TextToAmend.Length - 2)
ElseIf Not TextToAmend.EndsWith("\") Then
TextToAmend = TextToAmend & "\"
End If
Return TextToAmend
End Function
Public Function doResolveWildNames(ByVal TextToAmend As String) As String
If TextToAmend.Contains("%") Then
Dim chrNewPathName() As Char = TextToAmend.ToCharArray
Dim intStart As Integer = 0
Dim intEnd As Integer = 0
For i = 0 To chrNewPathName.Length - 1
If chrNewPathName(i) = "%" Then
numOfPercents += 1
End If
Next
If numOfPercents > 0 Then
If (numOfPercents Mod 2) = 0 Then
For i = 1 To (numOfPercents / 2)
Dim WildWord As String = ""
If chrNewPathName(intStart) <> "%" Then
Do While chrNewPathName(intStart) <> "%" 'Finding the first index of "%"
intStart += 1
Loop
End If
intStart += 2
intEnd = intStart - 1
If chrNewPathName(intEnd) <> "%" Then
Do While chrNewPathName(intEnd) <> "%"
intEnd += 1
Loop
End If
intEnd -= 1
WildWord = Mid(TextToAmend, intStart, intEnd)
If WildWord.ToUpper = "ROOT" Then
TextToAmend = TextToAmend.Replace("%" & WildWord & "%", strRoot)
Else
TextToAmend = TextToAmend.Replace("%" & WildWord & "%", Environment.GetEnvironmentVariable(WildWord))
End If
Next i
End If
End If
End If
numOfPercents = 0
Return TextToAmend
End Function
Public Sub RunOpenDir(ByRef PathName As String, Optional ByVal Arguments As String = "", Optional ByVal WaitForExit As Boolean = False, Optional ByVal ErrorMessage As String = "", Optional ByVal CannotFindFile As String = "Cannot find the specified file: ", Optional ByVal WithArguments As String = " with arguments: ", Optional ByVal WriteCrushFileAnyway As Boolean = False)
Dim TextWrite As TextWriter
PathName = doResolveWildNames(PathName)
Arguments = doResolveWildNames(Arguments)
If PathName.ToLower = "explorer" Or PathName.ToLower = "explorer.exe" Then
PathName = strExplorerExe
End If
If File.Exists(PathName) Then
exeProcesses.StartInfo.FileName = PathName
exeProcesses.StartInfo.Arguments = Arguments
exeProcesses.Start()
If WaitForExit = True Then
exeProcesses.WaitForExit()
End If
Else
If ErrorMessage <> "" Or WriteCrushFileAnyway = True Then
If ErrorMessage <> "" Then
MsgBox(ErrorMessage)
End If
TextWrite = File.CreateText(My.Computer.FileSystem.SpecialDirectories.Desktop & "\Crush " & Today.Day & "-" & Today.Month & "-" & Today.Year & " " & My.Computer.Clock.LocalTime.Minute & " " & My.Computer.Clock.LocalTime.Second & ".txt")
TextWrite.WriteLine(My.Application.Info.AssemblyName)
TextWrite.WriteLine(CannotFindFile & """" & PathName & """" & WithArguments & """" & Arguments & """")
TextWrite.Flush()
TextWrite.Close()
End If
End If
End Sub
Public Sub CloseForm(ByVal frm As Form, Optional ByVal ClosingPromptText As String = "")
If ClosingPromptText = "" Then
frm.Close()
Else
Dim UserResponse = MsgBox(ClosingPromptText, MsgBoxStyle.YesNo)
If UserResponse = vbYes Then
frm.Close()
End If
End If
End Sub
Public Function RemBtnHotLetter(ByVal btn As Button) As String
Dim ResultString As String
ResultString = "<" & btn.Text.Replace("&", "") & ">"
Return ResultString
End Function
Public Function RemMniHotLetter(ByVal mni As ToolStripMenuItem) As String
Dim ResultString As String
ResultString = "<" & mni.Text.Replace("&", "") & ">"
Return ResultString
End Function
Public Sub ReadToString(ByVal FileName As String, ByRef StringToFill As String, Optional ByVal ReadMethod As String = "ReadToEnd", Optional isCyphered As Boolean = False)
Dim TextRead As TextReader
TextRead = File.OpenText(FileName)
If ReadMethod.ToLower = "readline" Then
StringToFill = TextRead.ReadLine
Else
StringToFill = TextRead.ReadToEnd
End If
TextRead.Close()
If isCyphered Then
Dim StringArrayToFill(0) As String
StringArrayToFill(0) = StringToFill
StringToFill = Decypher(StringArrayToFill, 1)
End If
End Sub
Public Sub ReadToTextbox(ByVal FileName As String, ByVal TextboxToFill As TextBox, Optional ByVal ReadMethod As String = "ReadToEnd", Optional isCyphered As Boolean = False)
Dim TextRead As TextReader
TextRead = File.OpenText(FileName)
If ReadMethod.ToLower = "readline" Then
TextboxToFill.Text = TextRead.ReadLine
Else
TextboxToFill.Text = TextRead.ReadToEnd
End If
TextRead.Close()
If isCyphered Then
TextboxToFill.Text = Decypher(TextboxToFill.Lines, 1)
End If
End Sub
Public Sub WriteText(ByVal FileName As String, ByVal TextToWrite As String, Optional ByVal WriteMethod As String = "Write")
'Methods: Write / WriteLine / Continue / ContEnd / End
'TODO On WriteLine TextWrite should also be closed on the calling-sub's Catch Exception by WriteText(FileName,"","End")
If WriteMethod.ToLower = "write" Then
Dim TextWrite As TextWriter
TextWrite = File.CreateText(FileName)
TextWrite.Write(TextToWrite)
TextWrite.Flush()
TextWrite.Close()
ElseIf WriteMethod.ToLower = "writeline" Then
TextWrite_Persistent = File.CreateText(FileName)
TextWrite_Persistent.WriteLine(TextToWrite)
ElseIf WriteMethod.ToLower = "continue" Or WriteMethod.ToLower = "cont" Then
TextWrite_Persistent.WriteLine(TextToWrite)
ElseIf WriteMethod.ToLower = "contend" Then
TextWrite_Persistent.WriteLine(TextToWrite)
TextWrite_Persistent.Flush()
TextWrite_Persistent.Close()
ElseIf WriteMethod.ToLower = "end" Then
TextWrite_Persistent.Flush()
TextWrite_Persistent.Close()
End If
End Sub
Public Sub CreateCrushFile(ByVal CrushStr As String)
WriteText(strExtras & "Crush ex " & My.Computer.Clock.GmtTime.Year & My.Computer.Clock.GmtTime.Month & My.Computer.Clock.GmtTime.Day & My.Computer.Clock.GmtTime.Hour & My.Computer.Clock.GmtTime.Minute & ".txt", CrushStr)
End Sub
End Module
Το ReadMainStrings() το έβαλα για να βλέπω αν ο υπολογιστής που τρέχει το πρόγραμμα είναι 32 ή 64 bit, και να φορτώνει τα paths αναλόγως.
Το InternetAvailability μιλάει απο μόνο του..
Το doProperPathName Κοιτάει ένα path και το κάνει να τελειώνει πάντα σε "\". πχ να είναι C:\ όχι "C:" ή "C:\\"
Το doResolveWildNaes Βρήσκει τα %Something% και τα κάνει resolve
Το RunOpenDir τρέχει ένα πρόγραμμα ή ανοίγει ένα παράθυρο
To CloseForm κλείνει μια φόρμα, ή ρωτάει τον χρήστη αν είναι σίγουρος ότι θέλει να κλείσει.
Το RemBtnHotLetter γυρνάει ένα String με το όνομα ενός κουμπιού χωρίς το hotkey του όμως, επειδή πολλές φορές γράφω μηνύματα του τύπου "πατήστε το τάδε κουμπί"
Το ReadToString διαβάζει ένα txt αρχείο και ότι περιέχεται σε αυτό, το γυρνάει σε ένα string.
------------
Έκανα ξεχωριστό για textbox γιατί όταν έδινα στο παραπάνω το textbox.text δεν λειτουργούσε - δεν έχω ιδέα γιατί.
-----------
To WriteText δημιουργεί ένα αρχείο και γράφει μέσα σε αυτό.