﻿「コマンドプロンプトに送る」の仕様書

0. 前提
  - 「コマンドプロンプトに送る」「Cygwin に送る」「PowerShell に送る」という、
    機能がよく似た 3 つのプログラムを提供する。
    概要：「コマンドプロンプトに送る」は、エクスプローラのコンテキストメニュー
          の「送る」の一項目として登録され、ファイルやフォルダを指定して
          コマンドプロンプトを開くことができる。
          
  - EXE ファイルの名前によって、同一のバイナリでも動作が変わるようにする。
    概要：SendToCmd.exe という名前のバイナリで実行されたら、
          「コマンドプロンプトに送る」として動作する。
          SendToCygwin.exe という名前のバイナリで実行されたら、
          「Cygwin に送る」として動作する。
          SendToPS.exe という名前のバイナリで実行されたら、
          「PowerShell に送る」として動作する。
          
    理由：3 つのプログラムはほとんど共通の処理なので、ソースコードを分けて
          管理したくないので。
          また、3 つのプログラムを生成するために、コンパイルオプションなどを
          変更しながら 3 回コンパイルし直すのも嫌だったので、一度コンパイル
          してバイナリを生成したら、それを単純に名前を変えてコピーすればよい
          というようにしたかった。
          
          
1. セットアップ方法
  - SendTo*.exe を引数なしで起動すると、インストールするかどうかユーザに
    問い合わせる。インストールしないと選択された場合は、引き続いて
    アンインストールするかどうか問い合わせる。
    概要：インストーラ等は特に用意せず、SendTo*.exe 自体がセットアップ機能を
          持っている。
          通常の使用方法（エクスプローラの右クリックメニューから起動）だと
          必ず引数としてパスが渡されてくるので、何も引数がない時はユーザが
          直接 .exe ファイルを起動したということ。
          その場合はセットアップを行う。
  
  - インストール作業は、ユーザの SendTo フォルダに SendTo*.exe への
    ショートカットを作成するだけである。
    概要：エクスプローラの右クリックメニューの「送る」に項目を登録するだけ。
          ユーザの環境はできる限り汚染しないように、レジストリは使用しない。
          SendTo*.exe は各自、自分自身へのショートカットしか作成しない。
          （SendToCmd.exe が SendToCmd.exe 自身へのショートカットのほかに
          SendToCygwin.exe へのショートカットまでも登録したりはしない。
          Cygwin を使用していない人もいるかもしれないので、強制はしない。）
          
  - アンインストール作業は、インストールしたショートカットファイルを
    削除するだけである。
    概要：インストール作業と同様、SendTo*.exe は各自、自分自身へのショート
          カットしか削除しない。
          
          
2. 環境設定


3. 基本動作
  - ファイルを指定してコンソールを開く
    概要：ファイルを指定して起動された場合は、そのファイルが存在している
          ディレクトリがカレントディレクトリとなった状態でコマンドプロンプトが
          起動し、指定されたファイル名がコマンドラインに入力された状態にする。
          ファイル名は設定に応じて、文字列が追加されたり、カーソル位置が
          変更されたりする。
          
  - フォルダを指定してコンソールを開く
  
  - 複数のファイル・フォルダを指定してコンソールを開く
  
  - 空白を含むパス（ダブルクオーテーションで囲まれている）
    が渡されても大丈夫。

    
4. 「コマンドプロンプトに送る」固有の仕様
  - UNC に対応していない。
    もともと、コマンドプロンプトでは cd コマンド等を使用しても UNC のパスには移動できないので。
    □ Cygwin や PowerShell ではどうなっているか調査
    
5. 「Cygwin に送る」固有の仕様
  - CreateProcess() の Work Directory の指定が通用しない（カレント
    ディレクトリに反映されない）ので自力で cd コマンドを使用して
    ディレクトリを移動する。

  - 同時に起動できる数があまり多くない？
  
6. 「PowerShell に送る」固有の仕様
