参考サイト様
上記のサイト様のプログラムがとても良かったため、
Windows フォームアプリケーションだけではなく
コンソールアプリケーションでも動作するようにしました
スクリプト
Arduino
const int BUTTON = 7; void setup() { Serial.begin( 9600 ); pinMode( BUTTON, INPUT_PULLUP ); } void loop() { int state = digitalRead( BUTTON ); if ( state != LOW ) return; Serial.println( "1" ); delay( 200 ); }
コンソールアプリケーション
using System; using System.Diagnostics; using System.IO.Ports; using System.Runtime.InteropServices; using System.Windows.Forms; public class Program { static SerialPort serial; [DllImport( "user32.dll" )] static extern IntPtr GetForegroundWindow(); [DllImport( "user32.dll" )] static extern int GetWindowThreadProcessId( IntPtr hWnd, out int id ); static void Main() { serial = new SerialPort( "COM3", 9600 ); serial.DataReceived += OnDataReceived; serial.Open(); while( true ) { } } static void OnDataReceived( object sender, SerialDataReceivedEventArgs e ) { var data = serial.ReadLine(); if ( string.IsNullOrWhiteSpace( data ) ) return; var name = GetActiveWindowName(); if ( name != "Unity" ) return; SendKeys.SendWait( "^p" ); } static string GetActiveWindowName() { int processId; var hWnd = GetForegroundWindow(); GetWindowThreadProcessId( hWnd, out processId ); return Process.GetProcessById( processId ).ProcessName; } }