Repository navigation
Releases: izolini/GameCompanion
Release list
2.9-Windows
New feature:
Added the ability to drag and drop utilities or games (.lnk or .exe files).
When dropped to the main window, Game Companion will open the "new game" window with proper fields pre-filled.
When dropped to the "new utility" or "new game" window, Game Companion will fill the fields accordingly.
2.8-Windows
New Features:
-
Monitor utilities after game start. If an utility crashes and is marked as auto-restart, then it will be started again (up to three times).
If it fails more than three times, GameCompanion will not try to start it again on the same gaming session. -
Inserted a cancel button on all modals to allow user to cancel edits without having to scroll to top, because now modals can't be closed by simply clicking outside them as before.
v2.0.0-Windows
1. High-Performance Logging (Multi-Process Safe)
Persistent Handles: App now maintains a persistent file handle rather than opening/closing it for every line. This significantly reduces disk I/O overhead.
2. Efficient Process Monitoring & Detection
- Tiered PID Check: The isPidAlive function now uses a faster tiered approach:
-- It first tries OpenProcess with PROCESS_QUERY_LIMITED_INFORMATION. This is nearly instantaneous and doesn't require a system snapshot.
-- It falls back to a system-wide snapshot ONLY if access is denied (typical for some Anti-Cheats). - Native Iteration: getProcessPID and checkProcessRunning now use the golang.org/x/sys/windows package more natively, improving stability and clarity.
3. Asset & UI Speedups
- Fast Icon Extraction: Icon extraction was refactored to use direct pixel buffer manipulation. This makes icon extraction (e.g., when adding a new game without explicit image selection) much faster.
- Smart Image Resizing: process and resize images now checks dimensions using image.DecodeConfig before fully decoding the image. If the image is already small enough, it returns immediately without using extra memory.
- Non-Blocking Persistence: App now performs JSON marshalling outside of the file lock, ensuring that the app's internal locks are released as quickly as possible.
4. Modernization
- Drag and drop implemented on all categories (no more clumsy arrows!!). Changing cards order in categories other than the ALL category will affect the order on the ALL category as well.
- Scroll of main window now affects only the game cards.
5. Security and Compatibility
- Replaced several manual syscall.LazyDLL calls with standard functions from golang.org/x/sys/windows (e.g., windows.ShellExecute, windows.CreateMutex, windows.FindWindow), trying to get better AV compatibility and less false positives. Enhanced concurrency security and explicit pointer closing at App's exiting.
2.7.1-Windows
Performance enhancements: optimize runtime footprint and fix autoclose race condition (v2.7.1)
- Fix data race on
autocloseflag: replaced unguarded global bool with
atomic.Boolfield on App struct, eliminating concurrent read/write
between the monitoring goroutine and AutoClose() - Cache exe directory via sync.Once (getExeDir): removed repeated
os.Executable() syscalls from getCacheDir, setupLogging, ReadLogFile
and NewApp — most notably from the asset server hot path, which was
called on every image request from the WebView2 gallery - Cache GetAppInfo result via sync.Once: wails.json is embedded at
compile time and never changes; json.Unmarshal now runs only once - Cache isAdmin result via sync.Once and promote IsUserAnAdmin to a
package-level proc var, consistent with all other Win32 proc declarations - Eliminate redundant file open in processAndResizeImage: image is now
opened once; io.Seek(0, SeekStart) rewinds the reader when a full
decode is needed, removing a second syscall on every image cache write
2.7-Windows
New feature
Option to unlink start and stop sequence lists by game, allowing to put utilities in stop list that aren't started by the app (to deal with some games that start services/apps by themselves and doesn't properly close them at the end).
2.6-Windows
New Feature:
Added ability to select different audio output and windows power scheme (by game) before starting the game, restoring previous settings after it ends.
v2.5-Windows
v2.5 Windows
UI Enhancements:
- scroll screen to top after saving utility;
- drag and drop to sort utilities lists;
New features:
- when registering a game, you can find it's executable file by using file selection or from a list of running processes (in this last case, the game must be running already, of course);
- start minimized and use the system tray, calling games via menu by right clicking tray icon;
- toast notifications
- emergency panic key: now you can force kill game and utilities if the game freezes or you want to rage quit with style;
- utilities preset lists, turning it easy to apply same utility sequences to several games;
v2.1.0.0 Windows
Added option to minimize Game Companion's window upon game launch.
Skip time waits when utilities are already running.
v1.4.2.2 Windows
Refactored Game Monitoring to Event-Driven System
Replace the previous polling mechanism with native Windows event-driven monitoring (WaitForSingleObject).
Key benefits of this architectural update:
- 0% CPU Usage (Efficiency): The application no longer actively "polls" the system every few seconds to check if a game is running. Instead, it natively suspends the thread and is efficiently woken up by the Windows OS exactly when the process terminates, eliminating continuous CPU overhead.
- Instantaneous Detection: Game closures are now detected in real-time. The delay associated with polling intervals has been completely removed, allowing the Game Companion app to react instantly.
- Anti-Cheat Friendly: By requesting only
SYNCHRONIZErights (the lowest possible privilege level) when opening the game process handle, the app avoids triggering false positives in aggressive Anti-Cheat systems like Vanguard or Easy Anti-Cheat. - Improved Stability: Reduced overall system "noise" by avoiding constant, repetitive queries to the OS process lists, preventing potential conflicts with other system monitoring hooks or applications.
v1.4.2.1 Windows
New release with better AV compatibility:
WebView2 cleaned flags (REMOVED):
"--disable-local-discovery "
"--disable-usb-bandwidth-monitoring "+
"--disable-background-networking "+
"--disable-background-timer-throttling "+
"--disable-backgrounding-occluded-windows "+
"--disable-renderer-backgrounding "+
"--disable-ipc-flooding-protection")
Reinstated code integrity (CHANGED)
WebviewDisableRendererCodeIntegrity: true, -> false
- shouldn't affect child processes of runner.exe, as this flag was used before it's existence when the code was monolitic.
Runner
Replaced raw syscall.NewLazyDLL and proc.Call with the official golang.org/x/sys/windows package. This makes the binary structure look like a standard Windows utility rather than a custom-built injector.
Compiled runner without "-s-w" to maintain symbol tables included on final executable.