Initial commit with translated description
This commit is contained in:
238
demo.py
Normal file
238
demo.py
Normal file
@@ -0,0 +1,238 @@
|
||||
"""
|
||||
Desktop Control Demo - Quick examples and tests
|
||||
"""
|
||||
|
||||
import sys
|
||||
import time
|
||||
from pathlib import Path
|
||||
|
||||
# Add skills to path
|
||||
sys.path.insert(0, str(Path(__file__).parent))
|
||||
|
||||
from desktop_control import DesktopController
|
||||
|
||||
def demo_mouse_control():
|
||||
"""Demo: Mouse movement and clicking"""
|
||||
print("\n🖱️ === MOUSE CONTROL DEMO ===")
|
||||
|
||||
dc = DesktopController(failsafe=True)
|
||||
|
||||
print(f"Current position: {dc.get_mouse_position()}")
|
||||
|
||||
# Smooth movement
|
||||
print("\n1. Moving mouse smoothly to center of screen...")
|
||||
screen_w, screen_h = dc.get_screen_size()
|
||||
center_x, center_y = screen_w // 2, screen_h // 2
|
||||
dc.move_mouse(center_x, center_y, duration=1.0)
|
||||
|
||||
# Relative movement
|
||||
print("2. Moving 100px right...")
|
||||
dc.move_relative(100, 0, duration=0.5)
|
||||
|
||||
print(f"Final position: {dc.get_mouse_position()}")
|
||||
|
||||
print("✅ Mouse demo complete!")
|
||||
|
||||
|
||||
def demo_keyboard_control():
|
||||
"""Demo: Keyboard typing"""
|
||||
print("\n⌨️ === KEYBOARD CONTROL DEMO ===")
|
||||
|
||||
dc = DesktopController()
|
||||
|
||||
print("\n⚠️ In 3 seconds, I'll type 'Hello from OpenClaw!' in the active window")
|
||||
print("Switch to Notepad or any text editor NOW!")
|
||||
time.sleep(3)
|
||||
|
||||
# Type with human-like speed
|
||||
dc.type_text("Hello from OpenClaw! ", wpm=60)
|
||||
dc.type_text("This is desktop automation in action. ", wpm=80)
|
||||
|
||||
# Press Enter
|
||||
dc.press('enter')
|
||||
dc.press('enter')
|
||||
|
||||
# Type instant
|
||||
dc.type_text("This was typed instantly!", interval=0)
|
||||
|
||||
print("\n✅ Keyboard demo complete!")
|
||||
|
||||
|
||||
def demo_screen_capture():
|
||||
"""Demo: Screenshot functionality"""
|
||||
print("\n📸 === SCREEN CAPTURE DEMO ===")
|
||||
|
||||
dc = DesktopController()
|
||||
|
||||
# Full screenshot
|
||||
print("\n1. Capturing full screen...")
|
||||
dc.screenshot(filename="demo_fullscreen.png")
|
||||
print(" Saved: demo_fullscreen.png")
|
||||
|
||||
# Region screenshot (center 800x600)
|
||||
print("\n2. Capturing center region (800x600)...")
|
||||
screen_w, screen_h = dc.get_screen_size()
|
||||
region = (
|
||||
(screen_w - 800) // 2, # left
|
||||
(screen_h - 600) // 2, # top
|
||||
800, # width
|
||||
600 # height
|
||||
)
|
||||
dc.screenshot(region=region, filename="demo_region.png")
|
||||
print(" Saved: demo_region.png")
|
||||
|
||||
# Get pixel color
|
||||
print("\n3. Getting pixel color at center...")
|
||||
center_x, center_y = screen_w // 2, screen_h // 2
|
||||
r, g, b = dc.get_pixel_color(center_x, center_y)
|
||||
print(f" Color at ({center_x}, {center_y}): RGB({r}, {g}, {b})")
|
||||
|
||||
print("\n✅ Screen capture demo complete!")
|
||||
|
||||
|
||||
def demo_window_management():
|
||||
"""Demo: Window operations"""
|
||||
print("\n🪟 === WINDOW MANAGEMENT DEMO ===")
|
||||
|
||||
dc = DesktopController()
|
||||
|
||||
# Get current window
|
||||
print(f"\n1. Active window: {dc.get_active_window()}")
|
||||
|
||||
# List all windows
|
||||
windows = dc.get_all_windows()
|
||||
print(f"\n2. Found {len(windows)} open windows:")
|
||||
for i, title in enumerate(windows[:15], 1): # Show first 15
|
||||
print(f" {i}. {title}")
|
||||
|
||||
print("\n✅ Window management demo complete!")
|
||||
|
||||
|
||||
def demo_hotkeys():
|
||||
"""Demo: Keyboard shortcuts"""
|
||||
print("\n🔥 === HOTKEY DEMO ===")
|
||||
|
||||
dc = DesktopController()
|
||||
|
||||
print("\n⚠️ This demo will:")
|
||||
print(" 1. Open Windows Run dialog (Win+R)")
|
||||
print(" 2. Type 'notepad'")
|
||||
print(" 3. Press Enter to open Notepad")
|
||||
print(" 4. Type a message")
|
||||
print("\nPress Enter to continue...")
|
||||
input()
|
||||
|
||||
# Open Run dialog
|
||||
print("\n1. Opening Run dialog...")
|
||||
dc.hotkey('win', 'r')
|
||||
time.sleep(0.5)
|
||||
|
||||
# Type notepad command
|
||||
print("2. Typing 'notepad'...")
|
||||
dc.type_text('notepad', wpm=80)
|
||||
time.sleep(0.3)
|
||||
|
||||
# Press Enter
|
||||
print("3. Launching Notepad...")
|
||||
dc.press('enter')
|
||||
time.sleep(1)
|
||||
|
||||
# Type message
|
||||
print("4. Typing message in Notepad...")
|
||||
dc.type_text("Desktop Control Skill Test\n\n", wpm=60)
|
||||
dc.type_text("This was automated by OpenClaw!\n", wpm=60)
|
||||
dc.type_text("- Mouse control ✓\n", wpm=60)
|
||||
dc.type_text("- Keyboard control ✓\n", wpm=60)
|
||||
dc.type_text("- Hotkeys ✓\n", wpm=60)
|
||||
|
||||
print("\n✅ Hotkey demo complete!")
|
||||
|
||||
|
||||
def demo_advanced_automation():
|
||||
"""Demo: Complete automation workflow"""
|
||||
print("\n🚀 === ADVANCED AUTOMATION DEMO ===")
|
||||
|
||||
dc = DesktopController()
|
||||
|
||||
print("\nThis demo will:")
|
||||
print("1. Get your clipboard content")
|
||||
print("2. Copy a new string to clipboard")
|
||||
print("3. Show the changes")
|
||||
print("\nPress Enter to continue...")
|
||||
input()
|
||||
|
||||
# Get current clipboard
|
||||
original = dc.get_from_clipboard()
|
||||
print(f"\n1. Original clipboard: '{original}'")
|
||||
|
||||
# Copy new content
|
||||
test_text = "Hello from OpenClaw Desktop Control!"
|
||||
dc.copy_to_clipboard(test_text)
|
||||
print(f"2. Copied to clipboard: '{test_text}'")
|
||||
|
||||
# Verify
|
||||
new_clipboard = dc.get_from_clipboard()
|
||||
print(f"3. Verified clipboard: '{new_clipboard}'")
|
||||
|
||||
# Restore original
|
||||
if original:
|
||||
dc.copy_to_clipboard(original)
|
||||
print("4. Restored original clipboard")
|
||||
|
||||
print("\n✅ Advanced automation demo complete!")
|
||||
|
||||
|
||||
def main():
|
||||
"""Run all demos"""
|
||||
print("=" * 60)
|
||||
print("🎮 DESKTOP CONTROL SKILL - DEMO SUITE")
|
||||
print("=" * 60)
|
||||
print("\n⚠️ IMPORTANT:")
|
||||
print("- Failsafe is ENABLED (move mouse to corner to abort)")
|
||||
print("- Some demos will control your mouse and keyboard")
|
||||
print("- Close important applications before continuing")
|
||||
print("\n" + "=" * 60)
|
||||
|
||||
demos = [
|
||||
("Mouse Control", demo_mouse_control),
|
||||
("Window Management", demo_window_management),
|
||||
("Screen Capture", demo_screen_capture),
|
||||
("Hotkeys", demo_hotkeys),
|
||||
("Keyboard Control", demo_keyboard_control),
|
||||
("Advanced Automation", demo_advanced_automation),
|
||||
]
|
||||
|
||||
while True:
|
||||
print("\n📋 SELECT DEMO:")
|
||||
for i, (name, _) in enumerate(demos, 1):
|
||||
print(f" {i}. {name}")
|
||||
print(f" {len(demos) + 1}. Run All")
|
||||
print(" 0. Exit")
|
||||
|
||||
choice = input("\nEnter choice: ").strip()
|
||||
|
||||
if choice == '0':
|
||||
print("\n👋 Goodbye!")
|
||||
break
|
||||
elif choice == str(len(demos) + 1):
|
||||
for name, func in demos:
|
||||
print(f"\n{'=' * 60}")
|
||||
func()
|
||||
time.sleep(1)
|
||||
print(f"\n{'=' * 60}")
|
||||
print("🎉 All demos complete!")
|
||||
elif choice.isdigit() and 1 <= int(choice) <= len(demos):
|
||||
demos[int(choice) - 1][1]()
|
||||
else:
|
||||
print("❌ Invalid choice!")
|
||||
|
||||
|
||||
if __name__ == "__main__":
|
||||
try:
|
||||
main()
|
||||
except KeyboardInterrupt:
|
||||
print("\n\n⚠️ Demo interrupted by user")
|
||||
except Exception as e:
|
||||
print(f"\n\n❌ Error: {e}")
|
||||
import traceback
|
||||
traceback.print_exc()
|
||||
Reference in New Issue
Block a user