install
source · Clone the upstream repo
git clone https://github.com/openclaw/skills
Claude Code · Install into ~/.claude/skills/
T=$(mktemp -d) && git clone --depth=1 https://github.com/openclaw/skills "$T" && mkdir -p ~/.claude/skills && cp -r "$T/skills/26048608982lp-ai/wechat-file-sender" ~/.claude/skills/clawdbot-skills-wechat-file-sender && rm -rf "$T"
manifest:
skills/26048608982lp-ai/wechat-file-sender/SKILL.mdsource content
wechat-file-sender
Send files via Windows WeChat client using RPA automation. No external dependencies — pure PowerShell + Windows Automation API.
Security: filePath must be an absolute path. contactName is validated to 50 chars max, Chinese/alphanumeric/underscore/space only. No network calls, no data exfiltration.
Setup
Requirements: Windows OS with WeChat desktop client installed.
clawhub install wechat-file-sender --dir <your-skills-dir>
Usage
Command line
node scripts/send-file-to-wechat.js "<filePath>" "<contactName>"
OpenClaw trigger phrases
向wechat发送文件给[联系人]:文件路径发微信文件给[联系人]:文件路径
PowerShell Script Source (scripts/send-file.ps1
)
scripts/send-file.ps1Full source — audit it before running:
param( [string]$filePath, [string]$contactName ) Add-Type -AssemblyName UIAutomationClient Add-Type -AssemblyName UIAutomationTypes Add-Type -AssemblyName System.Windows.Forms Add-Type -AssemblyName PresentationCore # Step 0: Check file exists if (-not (Test-Path $filePath)) { Write-Host "[ERROR] File not found" exit 1 } # Step 1: Find WeChat window (class Qt51514QWindowIcon) $root = [System.Windows.Automation.AutomationElement]::RootElement $allWindows = $root.FindAll([System.Windows.Automation.TreeScope]::Children, (New-Object System.Windows.Automation.PropertyCondition( [System.Windows.Automation.AutomationElement]::ControlTypeProperty, [System.Windows.Automation.ControlType]::Window))) $wechatWindow = $null foreach ($w in $allWindows) { if ($w.Current.ClassName -match 'Qt51514QWindowIcon') { $wechatWindow = $w break } } if (-not $wechatWindow) { Write-Host "[ERROR] WeChat not found" exit 1 } # Win32 API for window focus Add-Type @" using System; using System.Runtime.InteropServices; public class WinAPI { [DllImport("user32.dll")] public static extern bool SetForegroundWindow(IntPtr hWnd); [DllImport("user32.dll")] public static extern bool ShowWindow(IntPtr hWnd, int nCmdShow); [DllImport("user32.dll")] public static extern bool IsIconic(IntPtr hWnd); public const int SW_MINIMIZE = 6; public const int SW_RESTORE = 9; } "@ $hwnd = [IntPtr]$wechatWindow.Current.NativeWindowHandle if ([WinAPI]::IsIconic($hwnd)) { [WinAPI]::ShowWindow($hwnd, [WinAPI]::SW_RESTORE) } [WinAPI]::SetForegroundWindow($hwnd) Start-Sleep 1 # Step 2: Open search (Ctrl+F) [System.Windows.Forms.SendKeys]::SendWait("^f") Start-Sleep 1 # Step 3: Type contact name (via clipboard — SendKeys can't type Chinese) [System.Windows.Forms.Clipboard]::Clear() Start-Sleep 0.3 [System.Windows.Forms.Clipboard]::SetText($contactName) Start-Sleep 0.5 [System.Windows.Forms.SendKeys]::SendWait("^v") Start-Sleep 2 # Step 4: Select first result and enter chat [System.Windows.Forms.SendKeys]::SendWait("{UP}") Start-Sleep 0.5 [System.Windows.Forms.SendKeys]::SendWait("{ENTER}") Start-Sleep 1 # Step 5: CLIPBOARD ACTIVATION TRICK # When staying in the same window, clipboard may not activate. # Minimize -> set clipboard -> restore = clipboard activates [WinAPI]::ShowWindow($hwnd, [WinAPI]::SW_MINIMIZE) Start-Sleep 0.5 $fc = New-Object System.Collections.Specialized.StringCollection $fc.Add((Resolve-Path $filePath)) [System.Windows.Forms.Clipboard]::Clear() Start-Sleep 0.5 [System.Windows.Forms.Clipboard]::SetFileDropList($fc) Start-Sleep 1 [WinAPI]::ShowWindow($hwnd, [WinAPI]::SW_RESTORE) Start-Sleep 0.5 [WinAPI]::SetForegroundWindow($hwnd) Start-Sleep 0.5 # Step 6: Paste and send [System.Windows.Forms.SendKeys]::SendWait("^v") Start-Sleep 1 [System.Windows.Forms.SendKeys]::SendWait("{ENTER}") Write-Host "[OK] File sent to: $contactName"
Key Implementation Notes
- ExecutionPolicy Bypass is required — PowerShell blocks
scripts by default. Bypass only affects this specific script file, not system policy..ps1 - No admin needed — uses only user-level Win32 APIs (SetForegroundWindow, ShowWindow) and Windows Automation API.
- Clipboard activation trick — solves the Windows clipboard issue when source and target are the same window.
- Contact name via clipboard — SendKeys cannot type Chinese characters; workaround is to copy to clipboard and Ctrl+V.