Implement PC/SC-based NFC card reader monitoring application with WPF UI. Features include: - System tray integration with single-click to open main window - Dynamic reader detection and management with enable/disable per reader - NDEF payload extraction supporting Type 2 and Type 4 tags - Auto-detection of block sizes (4-byte vs 16-byte) for different reader types - Configurable actions: copy to clipboard, launch URLs, keyboard input simulation - URI record type detection - only launches browser for actual URI records - Real-time activity logging with color-coded levels (Debug, Info, Warning, Error) - File-based debug logging for troubleshooting - Settings persistence between sessions - Dangerous Things branding with custom icons and clickable logo 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude <noreply@anthropic.com>
165 lines
5.0 KiB
Markdown
165 lines
5.0 KiB
Markdown
# NFC Actions
|
|
|
|
A Windows 11 system tray application that monitors NFC card readers and performs automated actions when NFC tags are detected.
|
|
|
|
## Features
|
|
|
|
- **System Tray Application**: Runs in the background with a system tray icon
|
|
- **Multi-Reader Support**: Automatically detects and monitors all connected PC/SC-compatible NFC readers
|
|
- **Dynamic USB Detection**: Automatically handles USB reader plug/unplug events
|
|
- **Reader Selection**: Enable/disable monitoring for specific readers
|
|
- **NDEF Payload Extraction**: Reads NDEF data from NFC tags
|
|
- **Configurable Actions**:
|
|
- Copy NDEF payload to clipboard
|
|
- Launch URLs in default browser
|
|
- Type NDEF content as keyboard input
|
|
- **Persistent Settings**: Remembers reader preferences and action settings between sessions
|
|
|
|
## Requirements
|
|
|
|
- Windows 11 (or Windows 10 with PC/SC service)
|
|
- .NET 7.0 Runtime or later
|
|
- PC/SC-compatible NFC reader
|
|
|
|
## Building the Application
|
|
|
|
### Using Visual Studio 2022
|
|
|
|
1. Open `NfcActions.sln` in Visual Studio 2022
|
|
2. Build the solution (Ctrl+Shift+B)
|
|
3. Run the application (F5)
|
|
|
|
### Using .NET CLI
|
|
|
|
```bash
|
|
dotnet build NfcActions.sln
|
|
dotnet run --project NfcActions/NfcActions.csproj
|
|
```
|
|
|
|
## Usage
|
|
|
|
### Starting the Application
|
|
|
|
When you run NFC Actions, it will:
|
|
1. Start minimized to the system tray
|
|
2. Show a notification balloon indicating it's running
|
|
3. Automatically detect all connected NFC readers
|
|
4. Begin monitoring enabled readers for card events
|
|
|
|
### Accessing the Main Window
|
|
|
|
- **Double-click** the tray icon, OR
|
|
- **Right-click** the tray icon and select "Open"
|
|
|
|
### Configuring Readers
|
|
|
|
In the main window:
|
|
1. View all detected NFC readers in the "Active Readers" list
|
|
2. Check/uncheck readers to enable/disable monitoring
|
|
3. Settings are saved automatically
|
|
|
|
### Configuring Actions
|
|
|
|
Select which actions to perform when an NFC tag is detected:
|
|
|
|
- **Copy NDEF data to clipboard**: Copies the NDEF payload text to the clipboard
|
|
- **Launch URLs in default browser**: If the NDEF payload is a URL, opens it in your default browser
|
|
- **Type NDEF content as keyboard input**: Simulates typing the NDEF payload (useful for form filling)
|
|
|
|
**Note**: Only the payload from the first NDEF record is used. Tags with multiple messages/records will use the first one.
|
|
|
|
### Exiting the Application
|
|
|
|
- Right-click the tray icon and select "Exit"
|
|
|
|
## Settings
|
|
|
|
Settings are stored in:
|
|
```
|
|
%APPDATA%\NfcActions\settings.json
|
|
```
|
|
|
|
The settings file includes:
|
|
- List of disabled readers
|
|
- Action preferences (clipboard, URLs, keyboard)
|
|
|
|
## Project Structure
|
|
|
|
```
|
|
NfcActions/
|
|
├── Models/
|
|
│ ├── AppSettings.cs # Application settings model
|
|
│ └── ReaderItem.cs # Reader list item model
|
|
├── Services/
|
|
│ ├── ActionService.cs # Handles clipboard, browser, and keyboard actions
|
|
│ ├── CardReaderService.cs # PC/SC reader monitoring and card detection
|
|
│ ├── NdefParser.cs # NDEF message parsing
|
|
│ └── SettingsService.cs # Settings persistence
|
|
├── ViewModels/
|
|
│ └── MainViewModel.cs # Main window view model
|
|
├── App.xaml # Application resources and startup
|
|
├── App.xaml.cs # Application lifecycle and tray icon
|
|
├── MainWindow.xaml # Main window UI
|
|
└── MainWindow.xaml.cs # Main window code-behind
|
|
```
|
|
|
|
## Dependencies
|
|
|
|
- **PCSC** (v7.0.1): PC/SC wrapper for smart card communication
|
|
- **PCSC.Iso7816** (v7.0.1): ISO 7816 APDU commands
|
|
- **InputSimulatorCore** (v1.0.5): Keyboard input simulation
|
|
- **System.Management** (v9.0.10): USB device detection (via WMI)
|
|
|
|
## Technical Details
|
|
|
|
### NDEF Parsing
|
|
|
|
The application reads NDEF (NFC Data Exchange Format) messages from NFC tags using standard ISO 7816 APDUs:
|
|
- Selects the NDEF Tag Application
|
|
- Reads the Capability Container
|
|
- Reads the NDEF file
|
|
- Parses the NDEF message structure to extract the payload
|
|
|
|
### Reader Monitoring
|
|
|
|
The application polls PC/SC readers every 500ms to detect:
|
|
- New readers being connected
|
|
- Readers being disconnected
|
|
- Cards being inserted
|
|
- Cards being removed
|
|
|
|
### Thread Safety
|
|
|
|
All PC/SC operations are thread-safe and properly synchronized to handle concurrent reader access.
|
|
|
|
## Troubleshooting
|
|
|
|
### No Readers Detected
|
|
|
|
- Ensure your NFC reader is properly connected
|
|
- Check that the Windows Smart Card service is running:
|
|
```
|
|
services.msc → Smart Card
|
|
```
|
|
- Try unplugging and replugging the reader
|
|
|
|
### Card Not Detected
|
|
|
|
- Ensure the reader is enabled in the main window
|
|
- Try holding the card on the reader for a longer duration
|
|
- Some readers require specific card positioning
|
|
|
|
### Actions Not Working
|
|
|
|
- **Clipboard**: Ensure no other application has locked the clipboard
|
|
- **Browser**: Check that you have a default browser configured
|
|
- **Keyboard**: The keyboard simulation requires the target window to have focus
|
|
|
|
## License
|
|
|
|
This project is provided as-is for educational and development purposes.
|
|
|
|
## Contributing
|
|
|
|
Feel free to submit issues or pull requests for improvements or bug fixes.
|