<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<meta name="description" content="VB6Parse Library Reference - environ - Environment">
<title>environ - Environment - VB6Parse Library Reference</title>
<link rel="stylesheet" href="../../../assets/css/style.css">
<link rel="stylesheet" href="../../../assets/css/docs-style.css">
<link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/highlight.js/11.9.0/styles/github-dark.min.css">
<script src="../../../assets/js/theme-switcher.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/highlight.js/11.9.0/highlight.min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/highlight.js/11.9.0/languages/vbnet.min.js"></script>
<script>hljs.highlightAll();</script>
</head>
<body>
<header class="docs-header">
<div class="container">
<h1><a href="../../../index.html">VB6Parse</a> / <a href="../../../library/index.html">Library</a> / <a href="../../../library/functions/environment/index.html">Environment</a> / environ</h1>
<p class="tagline">VB6 Library Reference</p>
</div>
</header>
<nav class="docs-nav">
<div class="container">
<a href="../../../index.html">Home</a>
<a href="../../../library/index.html">Library Reference</a>
<a href="../../../documentation.html">Documentation</a>
<a href="https://docs.rs/vb6parse" target="_blank">API Docs</a>
<a href="https://github.com/scriptandcompile/vb6parse" target="_blank">GitHub</a>
<button id="theme-toggle" class="theme-toggle" aria-label="Toggle theme">
<span class="theme-icon">🌙</span>
</button>
</div>
</nav>
<main class="container">
<article class="library-item">
<h1 id="environ-function">Environ Function</h1>
<p>Returns the String value associated with an operating system environment variable.</p>
<h2 id="syntax">Syntax</h2>
<pre><code class="language-vbnet">Environ(envstring | number)</code></pre>
<h2 id="parameters">Parameters</h2>
<ul>
<li><strong>envstring</strong>: Optional (if number provided). String expression containing the name of an
environment variable.</li>
<li><strong>number</strong>: Optional (if envstring provided). Numeric expression corresponding to the
numeric order of an environment string in the environment-string table. The number argument
can be any numeric expression, but is rounded to a whole number before it is evaluated.</li>
</ul>
<h2 id="return-value">Return Value</h2>
<p>Returns a String containing the value assigned to envstring or the environment variable at
position number. Returns a zero-length string ("") if envstring is not found or if there is
no environment string at position number.</p>
<h2 id="remarks">Remarks</h2>
<p>The <code>Environ</code> function retrieves values from the operating system's environment variables.
Environment variables are system-level or user-level settings that provide information about
the operating system environment.
<strong>Important Characteristics:</strong>
- Reads environment variables from the operating system
- Can access by name (string) or position (number)
- Case-insensitive on Windows
- Returns empty string if variable not found
- Position-based access starts at 1 (not 0)
- Number of environment variables varies by system
- Environment changes during execution are not reflected
- Snapshot taken at application start
- Cannot modify environment variables (read-only)
- Different users may have different environment variables</p>
<h2 id="common-environment-variables">Common Environment Variables</h2>
<p><strong>Windows:</strong>
- <code>PATH</code> - Executable search path
- <code>TEMP</code> or <code>TMP</code> - Temporary files directory
- <code>USERNAME</code> - Current user name
- <code>USERPROFILE</code> - User's profile directory
- <code>COMPUTERNAME</code> - Computer name
- <code>SYSTEMROOT</code> - Windows system directory
- <code>PROGRAMFILES</code> - Program Files directory
- <code>HOMEDRIVE</code> - User's home drive (e.g., C:)
- <code>HOMEPATH</code> - User's home directory path
- <code>APPDATA</code> - Application data directory
- <code>WINDIR</code> - Windows directory
- <code>PROCESSOR_ARCHITECTURE</code> - CPU architecture
- <code>NUMBER_OF_PROCESSORS</code> - Number of CPU cores
- <code>OS</code> - Operating system name</p>
<h2 id="examples">Examples</h2>
<h3 id="basic-usage">Basic Usage</h3>
<pre><code class="language-vbnet">' Get environment variable by name
Dim userName As String
userName = Environ("USERNAME")
MsgBox "Current user: " & userName
' Get temp directory
Dim tempDir As String
tempDir = Environ("TEMP")
' Get by position
Dim firstEnvVar As String
firstEnvVar = Environ(1)</code></pre>
<h3 id="check-if-variable-exists">Check if Variable Exists</h3>
<pre><code class="language-vbnet">Function EnvironVarExists(varName As String) As Boolean
EnvironVarExists = (Len(Environ(varName)) > 0)
End Function
' Usage
If EnvironVarExists("JAVA_HOME") Then
MsgBox "Java is configured"
Else
MsgBox "Java not found"
End If</code></pre>
<h3 id="build-file-paths">Build File Paths</h3>
<pre><code class="language-vbnet">Function GetTempFilePath(fileName As String) As String
Dim tempDir As String
tempDir = Environ("TEMP")
If Right(tempDir, 1) <> "\" Then
tempDir = tempDir & "\"
End If
GetTempFilePath = tempDir & fileName
End Function</code></pre>
<h2 id="common-patterns">Common Patterns</h2>
<h3 id="get-user-directories">Get User Directories</h3>
<pre><code class="language-vbnet">Function GetUserProfile() As String
GetUserProfile = Environ("USERPROFILE")
End Function
Function GetAppDataPath() As String
GetAppDataPath = Environ("APPDATA")
End Function
Function GetDesktopPath() As String
GetDesktopPath = Environ("USERPROFILE") & "\Desktop"
End Function
Function GetMyDocuments() As String
GetMyDocuments = Environ("USERPROFILE") & "\Documents"
End Function</code></pre>
<h3 id="system-information">System Information</h3>
<pre><code class="language-vbnet">Function GetComputerName() As String
GetComputerName = Environ("COMPUTERNAME")
End Function
Function GetProcessorCount() As Integer
Dim procCount As String
procCount = Environ("NUMBER_OF_PROCESSORS")
If IsNumeric(procCount) Then
GetProcessorCount = CInt(procCount)
Else
GetProcessorCount = 1
End If
End Function
Function GetSystemArchitecture() As String
GetSystemArchitecture = Environ("PROCESSOR_ARCHITECTURE")
End Function</code></pre>
<h3 id="list-all-environment-variables">List All Environment Variables</h3>
<pre><code class="language-vbnet">Sub ListAllEnvironmentVariables()
Dim i As Integer
Dim envVar As String
i = 1
Do
envVar = Environ(i)
If envVar = "" Then Exit Do
Debug.Print i & ": " & envVar
i = i + 1
Loop
End Sub</code></pre>
<h3 id="parse-environment-variable">Parse Environment Variable</h3>
<pre><code class="language-vbnet">Function GetEnvironVarName(envString As String) As String
Dim equalPos As Integer
equalPos = InStr(envString, "=")
If equalPos > 0 Then
GetEnvironVarName = Left(envString, equalPos - 1)
Else
GetEnvironVarName = ""
End If
End Function
Function GetEnvironVarValue(envString As String) As String
Dim equalPos As Integer
equalPos = InStr(envString, "=")
If equalPos > 0 Then
GetEnvironVarValue = Mid(envString, equalPos + 1)
Else
GetEnvironVarValue = ""
End If
End Function</code></pre>
<h3 id="safe-path-construction">Safe Path Construction</h3>
<pre><code class="language-vbnet">Function BuildSafePath(envVar As String, subPath As String) As String
Dim basePath As String
basePath = Environ(envVar)
If basePath = "" Then
BuildSafePath = ""
Exit Function
End If
' Ensure path ends with backslash
If Right(basePath, 1) <> "\" Then
basePath = basePath & "\"
End If
' Remove leading backslash from subPath if present
If Left(subPath, 1) = "\" Then
subPath = Mid(subPath, 2)
End If
BuildSafePath = basePath & subPath
End Function</code></pre>
<h3 id="configuration-file-paths">Configuration File Paths</h3>
<pre><code class="language-vbnet">Function GetConfigFilePath(appName As String, fileName As String) As String
Dim appDataPath As String
Dim configDir As String
appDataPath = Environ("APPDATA")
configDir = appDataPath & "\" & appName
' Create directory if it doesn't exist
If Dir(configDir, vbDirectory) = "" Then
MkDir configDir
End If
GetConfigFilePath = configDir & "\" & fileName
End Function</code></pre>
<h3 id="search-path-variable">Search PATH Variable</h3>
<pre><code class="language-vbnet">Function FindInPath(executable As String) As String
Dim pathVar As String
Dim paths() As String
Dim i As Integer
Dim testPath As String
pathVar = Environ("PATH")
paths = Split(pathVar, ";")
For i = LBound(paths) To UBound(paths)
testPath = paths(i) & "\" & executable
If Dir(testPath) <> "" Then
FindInPath = testPath
Exit Function
End If
Next i
FindInPath = ""
End Function</code></pre>
<h3 id="check-operating-system">Check Operating System</h3>
<pre><code class="language-vbnet">Function IsWindows() As Boolean
Dim osVar As String
osVar = UCase(Environ("OS"))
IsWindows = (InStr(osVar, "WINDOWS") > 0)
End Function
Function GetWindowsDirectory() As String
GetWindowsDirectory = Environ("WINDIR")
End Function
Function GetSystemRoot() As String
GetSystemRoot = Environ("SYSTEMROOT")
End Function</code></pre>
<h3 id="program-files-paths">Program Files Paths</h3>
<pre><code class="language-vbnet">Function GetProgramFilesPath() As String
GetProgramFilesPath = Environ("PROGRAMFILES")
End Function
Function GetProgramFilesX86Path() As String
GetProgramFilesX86Path = Environ("PROGRAMFILES(X86)")
End Function
Function FindProgramPath(programName As String) As String
Dim progFiles As String
Dim testPath As String
' Check Program Files
progFiles = Environ("PROGRAMFILES")
testPath = progFiles & "\" & programName
If Dir(testPath, vbDirectory) <> "" Then
FindProgramPath = testPath
Exit Function
End If
' Check Program Files (x86)
progFiles = Environ("PROGRAMFILES(X86)")
If progFiles <> "" Then
testPath = progFiles & "\" & programName
If Dir(testPath, vbDirectory) <> "" Then
FindProgramPath = testPath
Exit Function
End If
End If
FindProgramPath = ""
End Function</code></pre>
<h2 id="advanced-usage">Advanced Usage</h2>
<h3 id="environment-variable-dictionary">Environment Variable Dictionary</h3>
<pre><code class="language-vbnet">Function GetEnvironmentDictionary() As Collection
Dim dict As New Collection
Dim i As Integer
Dim envVar As String
Dim varName As String
Dim varValue As String
Dim equalPos As Integer
i = 1
Do
envVar = Environ(i)
If envVar = "" Then Exit Do
equalPos = InStr(envVar, "=")
If equalPos > 0 Then
varName = Left(envVar, equalPos - 1)
varValue = Mid(envVar, equalPos + 1)
On Error Resume Next
dict.Add varValue, UCase(varName)
On Error GoTo 0
End If
i = i + 1
Loop
Set GetEnvironmentDictionary = dict
End Function</code></pre>
<h3 id="expand-environment-variables-in-string">Expand Environment Variables in String</h3>
<pre><code class="language-vbnet">Function ExpandEnvironmentString(inputString As String) As String
Dim result As String
Dim startPos As Integer
Dim endPos As Integer
Dim varName As String
Dim varValue As String
result = inputString
' Find %VAR% patterns
Do
startPos = InStr(result, "%")
If startPos = 0 Then Exit Do
endPos = InStr(startPos + 1, result, "%")
If endPos = 0 Then Exit Do
varName = Mid(result, startPos + 1, endPos - startPos - 1)
varValue = Environ(varName)
result = Left(result, startPos - 1) & varValue & Mid(result, endPos + 1)
Loop
ExpandEnvironmentString = result
End Function
' Usage
expandedPath = ExpandEnvironmentString("%TEMP%\myfile.txt")</code></pre>
<h3 id="create-application-log-file">Create Application Log File</h3>
<pre><code class="language-vbnet">Function CreateLogFile(appName As String) As String
Dim logDir As String
Dim logFile As String
Dim dateStamp As String
logDir = Environ("TEMP") & "\Logs"
' Create logs directory
If Dir(logDir, vbDirectory) = "" Then
MkDir logDir
End If
dateStamp = Format(Date, "yyyy-mm-dd")
logFile = logDir & "\" & appName & "_" & dateStamp & ".log"
CreateLogFile = logFile
End Function</code></pre>
<h3 id="check-development-environment">Check Development Environment</h3>
<pre><code class="language-vbnet">Function IsDevelopmentEnvironment() As Boolean
' Check for common development environment variables
IsDevelopmentEnvironment = (Len(Environ("VSCODE_PID")) > 0) Or _
(Len(Environ("TERM_PROGRAM")) > 0) Or _
(Len(Environ("VSAPPIDDIR")) > 0)
End Function
Function GetJavaHome() As String
GetJavaHome = Environ("JAVA_HOME")
End Function
Function GetPythonPath() As String
GetPythonPath = Environ("PYTHONPATH")
End Function</code></pre>
<h3 id="build-connection-string">Build Connection String</h3>
<pre><code class="language-vbnet">Function BuildConnectionString() As String
Dim server As String
Dim database As String
server = Environ("DB_SERVER")
database = Environ("DB_NAME")
If server = "" Then server = "localhost"
If database = "" Then database = "default"
BuildConnectionString = "Server=" & server & ";Database=" & database
End Function</code></pre>
<h3 id="export-environment-to-file">Export Environment to File</h3>
<pre><code class="language-vbnet">Sub ExportEnvironmentToFile(filePath As String)
Dim fileNum As Integer
Dim i As Integer
Dim envVar As String
fileNum = FreeFile
Open filePath For Output As #fileNum
Print #fileNum, "Environment Variables"
Print #fileNum, "Generated: " & Now
Print #fileNum, String(80, "-")
i = 1
Do
envVar = Environ(i)
If envVar = "" Then Exit Do
Print #fileNum, envVar
i = i + 1
Loop
Close #fileNum
End Sub</code></pre>
<h3 id="portable-path-builder">Portable Path Builder</h3>
<pre><code class="language-vbnet">Function GetPortableAppPath(relativePath As String) As String
Dim basePath As String
' Try to get from environment first
basePath = Environ("APP_BASE_PATH")
' Fall back to current directory
If basePath = "" Then
basePath = App.Path
End If
If Right(basePath, 1) <> "\" Then
basePath = basePath & "\"
End If
GetPortableAppPath = basePath & relativePath
End Function</code></pre>
<h2 id="error-handling">Error Handling</h2>
<pre><code class="language-vbnet">Function SafeEnviron(varName As String, Optional defaultValue As String = "") As String
On Error Resume Next
SafeEnviron = Environ(varName)
If Err.Number <> 0 Or SafeEnviron = "" Then
SafeEnviron = defaultValue
End If
End Function
Function GetEnvironWithFallback(preferredVar As String, fallbackVar As String) As String
GetEnvironWithFallback = Environ(preferredVar)
If GetEnvironWithFallback = "" Then
GetEnvironWithFallback = Environ(fallbackVar)
End If
End Function</code></pre>
<h3 id="common-errors">Common Errors</h3>
<ul>
<li><strong>Error 5</strong> (Invalid procedure call): Invalid number argument (< 1)</li>
<li>No error for missing variables (returns empty string)</li>
</ul>
<h2 id="performance-considerations">Performance Considerations</h2>
<ul>
<li><code>Environ</code> is relatively fast (direct OS call)</li>
<li>Environment snapshot taken at application start</li>
<li>Cache frequently used values to avoid repeated calls</li>
<li>Position-based enumeration stops at first empty string</li>
<li>String comparison is case-insensitive on Windows</li>
</ul>
<h2 id="best-practices">Best Practices</h2>
<h3 id="always-check-for-empty-string">Always Check for Empty String</h3>
<pre><code class="language-vbnet">' Good - Check before using
tempDir = Environ("TEMP")
If tempDir = "" Then
tempDir = "C:\Temp" ' Fallback
End If
' Avoid - Assuming variable exists
tempDir = Environ("TEMP") ' May be empty!</code></pre>
<h3 id="use-constants-for-variable-names">Use Constants for Variable Names</h3>
<pre><code class="language-vbnet">' Good - Constants for maintainability
Const ENV_TEMP = "TEMP"
Const ENV_USERNAME = "USERNAME"
tempDir = Environ(ENV_TEMP)
userName = Environ(ENV_USERNAME)</code></pre>
<h3 id="provide-defaults">Provide Defaults</h3>
<pre><code class="language-vbnet">Function GetTempDir() As String
GetTempDir = Environ("TEMP")
If GetTempDir = "" Then GetTempDir = Environ("TMP")
If GetTempDir = "" Then GetTempDir = "C:\Temp"
End Function</code></pre>
<h3 id="case-insensitive-on-windows">Case Insensitive on Windows</h3>
<pre><code class="language-vbnet">' All equivalent on Windows
userName = Environ("USERNAME")
userName = Environ("username")
userName = Environ("UserName")</code></pre>
<h2 id="comparison-with-other-methods">Comparison with Other Methods</h2>
<h3 id="environ-vs-registry">Environ vs Registry</h3>
<pre><code class="language-vbnet">' Environ - Quick, read-only access to environment
tempDir = Environ("TEMP")
' Registry - More control, can read/write, more complex
' (Requires Windows API or Registry object)</code></pre>
<h3 id="environ-vs-command-line">Environ vs Command Line</h3>
<pre><code class="language-vbnet">' Environ - Environment variables
userName = Environ("USERNAME")
' Command - Command line arguments
args = Command()</code></pre>
<h2 id="limitations">Limitations</h2>
<ul>
<li>Read-only access (cannot modify environment variables)</li>
<li>Snapshot at application start (changes not reflected)</li>
<li>Position-based enumeration order not guaranteed</li>
<li>Cannot create or delete environment variables</li>
<li>Limited to process environment (not system-wide)</li>
<li>No wildcard or pattern matching</li>
<li>Case-sensitive on Unix/Linux (VB6 primarily Windows)</li>
</ul>
<h2 id="related-functions">Related Functions</h2>
<ul>
<li><code>Command</code>: Returns command-line arguments</li>
<li><code>CurDir</code>: Returns current directory</li>
<li><code>ChDir</code>: Changes current directory</li>
<li><code>App.Path</code>: Returns application path</li>
<li><code>Shell</code>: Executes external programs (can set environment)</li>
<li><code>GetSetting</code>: Reads application settings from registry</li>
<li><code>SaveSetting</code>: Writes application settings to registry</li>
</ul>
</article>
<div style="margin-top: 3rem; padding-top: 2rem; border-top: 1px solid var(--border-color);">
<p>
<a href="index.html">← Back to Environment</a> |
<a href="../index.html">View all functions</a>
</p>
</div>
</main>
<footer>
<div class="container">
<p>© 2024-2026 VB6Parse Contributors. Licensed under the MIT License.</p>
</div>
</footer>
</body>
</html>