A lightweight floating taskbar application launcher for Windows.
Download the latest release BoBar-0.1.0.12-alpha-win-x64.zip
Extract the ZIP file and run BoBar.exe.
bobar.mp4
- Floating Launcher Bar - Compact, always-accessible application launcher
- Drag & Drop Support - Add executables (.exe) and shortcuts (.lnk) by dragging onto the launcher or settings dialog
- Shortcut Resolution - Automatically resolves .lnk shortcuts to extract target path, arguments, and working directory
- High-Quality Icon Extraction - Extracts native high-resolution icons directly from PE resources without Windows upscaling
- Icon Caching - Saves extracted icons as PNG files for fast loading
- Persistent Configuration - Saves window position, launch items, and preferences
- System Tray Integration - Minimizes to system tray, double-click to restore
- Load on Startup - Optional Windows startup integration via registry
- Visual Button Separators - Subtle dividers between launcher buttons for better organization
- Animated Button Addition - Smooth pulse animation when adding new items
- Dark/Light Themes - Toggle between dark and light color schemes
- Snap to Edge - Automatically snaps to screen edges when moving
- Always on Top - Optional window pinning
- Custom Order - Reorder launch items with Move Up/Down buttons
- Editable Items - Modify name, path, arguments, and working directory
- Multi-Monitor Support - Works seamlessly across multiple displays
- Visual Settings Dialog - Easy-to-use interface for managing launch items
- Change Tracking - Prompts to save unsaved changes before closing
- Drag & Drop Zone - Dedicated area for adding new items
- Confirmation Dialogs - Prevents accidental deletions
- Live Preview - Changes appear immediately after saving
- Windows OS
- .NET 10.0 or later
Download the latest release BoBar-0.1.0.12-alpha-win-x64.zip
Extract the ZIP file and run BoBar.exe.
# Clone the repository
git clone https://github.com/bbbjames/BoBar.git
cd BoBar
# Build the project
dotnet build
# Run the application
dotnet runSelf-Contained (includes .NET runtime):
dotnet publish -c Release -r win-x64 --self-containedFramework-Dependent (requires .NET 10 installed):
dotnet publish -c Release -r win-x64 --no-self-containedThe compiled executable will be in bin\Release\net10.0-windows\win-x64\publish\
On first launch, BoBar displays with two default items:
- Notepad - Opens Windows Notepad
- Calculator - Opens Windows Calculator
Method 1: Drag onto Main Window
- Drag an .exe or .lnk file onto the BoBar window
- The item is added and saved immediately
- A smooth animation confirms the addition
Method 2: Via Settings Dialog
- Right-click on the BoBar window
- Select Settings
- Drag .exe or .lnk files onto the drop zone
- Click Save & Close to apply changes
- Open Settings from the context menu
- Select an item from the list
- Click Edit Item
- Modify the name, path, arguments, or working directory
- Click OK, then Save & Close
- Open Settings
- Select an item
- Use Move Up ↑ or Move Down ↓ buttons
- Click Save & Close
- Open Settings
- Select an item
- Click Remove Item
- Confirm the deletion
- Click Save & Close
Method 1: Ctrl+Drag
- Hold Ctrl and drag any button to move the toolbar
- The toolbar will snap to screen edges automatically
Method 2: Direct Drag
- Click and drag the toolbar background (between buttons)
Right-click on the BoBar window to access:
- Move - Shows instructions for moving the toolbar
- Settings - Open the settings dialog
- About - View version and developer information
- Always on Top - Toggle window pinning (checkmark when enabled)
- Dark Mode - Toggle theme (checkmark when enabled)
- Load on Startup - Add/remove BoBar from Windows startup (checkmark when enabled)
- Close - Exit the application
BoBar stores configuration in %AppData%\BoBar\:
C:\Users\YourName\AppData\Roaming\BoBar\
├── launchitems.json # Launch items list
├── settings.ini # Window position and preferences
└── Icons\ # Extracted application icons (PNG format)
└── *.png
JSON array containing launch item definitions:
[
{
"Name": "Notepad",
"ExecutablePath": "notepad.exe",
"Arguments": "",
"WorkingDirectory": "",
"IconPath": "C:\\Users\\...\\BoBar\\Icons\\notepad.png",
"Order": 0
},
{
"Name": "Visual Studio Code",
"ExecutablePath": "C:\\Program Files\\Microsoft VS Code\\Code.exe",
"Arguments": "",
"WorkingDirectory": "",
"IconPath": "C:\\Users\\...\\BoBar\\Icons\\Code.png",
"Order": 1
}
]INI format for window preferences:
[Window]
X=2225
Y=0
AlwaysOnTop=True
DarkMode=TrueWhen "Load on Startup" is enabled, BoBar adds an entry to:
HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Run
This setting is per-user and does not require administrator privileges.
BoBar/
├── Form1.cs # Main application window
├── Form1.Designer.cs # Designer-generated code
├── SettingsForm.cs # Settings dialog
├── AboutForm.cs # About dialog
├── EditLaunchItemForm.cs # Item editor dialog
├── LaunchItem.cs # Data model for launch items
├── ConfigurationManager.cs # Configuration persistence (includes AppConfiguration model)
├── IconExtractor.cs # High-quality icon extraction from PE resources
├── ShortcutResolver.cs # Windows .lnk shortcut resolution
├── StartupManager.cs # Windows startup registry management
├── Program.cs # Application entry point
└── assets/
└── bobar-256.ico # Application icon
| Component | Responsibility |
|---|---|
| Form1 | Main UI, button generation, drag-drop, system tray, snap-to-edge |
| SettingsForm | Launch items management, reordering, CRUD operations |
| AboutForm | Version info, developer credits, Twitter link |
| EditLaunchItemForm | Individual item property editing |
| LaunchItem | Data model, icon extraction, process launching |
| ConfigurationManager | JSON/INI persistence, default items, AppConfiguration data model |
| IconExtractor | Native high-resolution icon extraction from executables |
| ShortcutResolver | Windows shortcut (.lnk) file resolution via COM |
| StartupManager | Windows registry integration for startup management |
Icon Extraction System
- Extracts icons directly from PE resources using Win32 APIs
- Attempts multiple extraction methods for best quality:
- Direct PE resource extraction (native sizes, no scaling)
- System image lists (SHIL_JUMBO for 256x256, SHIL_EXTRALARGE for 48x48)
- ExtractIconEx for embedded icons
- SHGetFileInfo as fallback
- Prioritizes largest size and highest color depth (32-bit ARGB)
- Saves as PNG with transparency preservation
- Normalized to 256x256 canvas for consistency
Shortcut Resolution
- Uses Windows Shell COM interfaces (IShellLink, IPersistFile)
- Extracts target path, command-line arguments, and working directory
- Validates target exists before adding
- Uses shortcut name as default item name
Button Separators
- Dynamically generated Panel controls between buttons
- Styled to match theme (dark/light mode)
- 65% of button height, vertically centered
- Automatically refreshed when buttons change
Snap-to-Edge
- Detects when window is within 10px of screen edge
- Automatically aligns to working area (excludes taskbar)
- Works with multiple monitors using
Screen.FromPoint()
Theme System
- Dark mode:
RGB(45, 45, 45)background - Light mode: System default colors
- Applies programmatically to all buttons and separators
- Smooth hover and click effects
Startup Integration
- Uses
HKEY_CURRENT_USER\...\Runregistry key - Per-user setting (no admin required)
- Stores absolute path to executable with quotes
- Checkbox reflects current registry state on load
Change Tracking
- Tracks adds, edits, removes, reorders in settings dialog
- Prompts on close if unsaved changes exist
- Three-way dialog: Save, Discard, Cancel
- Framework: .NET 10.0
- UI: Windows Forms
- Language: C# 14.0 with nullable reference types
- Serialization: System.Text.Json
- Icon Storage: PNG format (preserves transparency)
- COM Interop: Windows Shell for shortcut resolution
- Named event handlers (minimal inline lambdas)
- Programmatic UI generation with dynamic controls
- Null-safe with nullable annotations enabled
- Clean separation of concerns
- Extensive debug logging for icon extraction
# Debug build
dotnet build
# Run with console output
dotnet run
# Clean build artifacts
dotnet clean-
Basic Functionality
- Run the application
- Test drag-drop for .exe files
- Test drag-drop for .lnk shortcuts
- Verify icon extraction quality
-
Settings Dialog
- Open Settings dialog
- Add/edit/remove/reorder items
- Test save prompts (X button, Discard button)
- Verify JSON persistence
-
Visual Features
- Test theme toggle (dark/light)
- Verify button separators appear
- Test animation when adding items
- Test Always on Top toggle
-
System Integration
- Test system tray behavior
- Test Load on Startup registry integration
- Verify window position persistence
- Test multi-monitor snap-to-edge
-
Shortcut Support
- Drag .lnk files from Start Menu
- Verify target resolution
- Test items with arguments
- Verify working directory handling
- Check that
%AppData%\BoBar\directory exists - Verify write permissions to AppData folder
- Check
launchitems.jsonis valid JSON
- Ensure .exe files still exist at their original paths
- Check
%AppData%\BoBar\Icons\for cached icons (PNG files) - Try removing and re-adding the item
- Check debug output for icon extraction errors
- Check
settings.iniexists in%AppData%\BoBar\ - Verify window was on a visible screen when closed
- Position validation ensures window appears on valid display
- Verify the shortcut target exists
- Check that the shortcut is a valid .lnk file
- Try creating the shortcut fresh from the Start Menu
- Check debug output for resolution errors
- Verify registry permissions (shouldn't require admin)
- Check registry key:
HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Run - Look for "BoBar" entry with path to executable
- Try unchecking and re-checking the option
- Ensure there are at least 2 buttons visible
- Check that theme is applied correctly
- Verify flowLayoutPanel is not suspended
📋 View Full Changelog - Detailed version history with all changes
- ✅ Added Windows startup integration via registry
- ✅ Added "Load on Startup" menu option
- ✅ Per-user startup configuration (no admin required)
- ✅ StartupManager utility for registry management
- ✅ Added .lnk shortcut support with full resolution
- ✅ Implemented ShortcutResolver with COM interop
- ✅ Enhanced icon extraction with PE resource parsing
- ✅ Added visual button separators
- ✅ Animated button addition with pulse effect
- ✅ Improved icon caching (PNG format)
- ✅ Added About dialog with developer info
- ✅ Refactored event handlers to named methods
- ✅ Redesigned Settings dialog with better layout
- ✅ Added change tracking and save prompts
- ✅ Fixed ListBox display bug (DisplayMember)
- ✅ Improved button sizing and labels
- ✅ Added confirmation dialogs
- ✅ Enhanced user experience
- ✅ Dynamic launch items system
- ✅ JSON persistence
- ✅ Icon extraction and caching
- ✅ Dark/light theme support
- ✅ Drag-drop support
- ✅ System tray integration
- ✅ Snap-to-edge functionality
Contributions are welcome! Please follow these guidelines:
- Fork the repository
- Create a feature branch
- Follow existing code style
- Test thoroughly (especially icon extraction and COM interop)
- Submit a pull request with detailed description
This project is licensed under the MIT License - see the LICENSE file for details.
Developed by bbbjames
🌐 Bob James AI Dev
🐦 Bob's Twitter
For issues, questions, or feature requests, please open an issue on GitHub: 📝 GitHub Issues
BoBar - Your lightweight Windows application launcher ⚡