Sakura: `ファイルの場所をコマンドプロンプトで開く`、および、`ファイルの場所をPowerShellで開く` を検討する

Created on 15 Oct 2018  ·  18Comments  ·  Source: sakura-editor/sakura

Notepad++ 7.5.8 ではタブメニューにファイルの場所をコマンドプロンプトで開くという項目がある。

420 に加えて追加を検討する。

https://github.com/sakura-editor/sakura/issues/420#issuecomment-419648537

enhancement

All 18 comments

「Command Prompt Here」として知られていた機能で、Windows Vista では「コマンド ウィンドウをここで開く」として標準搭載されました。調べると Windows 95 の PowerToys までさかのぼれるようです。最近は Shift の同時押しが必要だったり、PowerShell に置き換えられたりしているのでしょうか。自分もよく使う機能ですし、開発者(想定ユーザー?)向けでいいと思います。メニューアイテムとして存在してさえいれば、自分で右クリックメニューなど他の場所に追加することもできますし。

…( ̄ー ̄)ふぉ。

フォルダを開く実装のshellexecuteのパラメータをちょっと変えれば実現できそうでした。

@berryzplus さん

549 を対応されたのでこちらも対応お願いできますか?

603 を作成しちゃいました。

@berryzplus さん
着手してたらごめんなさい。

個人的な希望です。
「コマンドプロンプトを出したいケース」と、「PowerShellを出したいケース」があります。

そこで提案ですが、それぞれ2つのメニューを追加するというのはどうでしょうか?
また、PowerShellがインストールされていない場合は、PowerShell側のメニュー自体を消して、コマンドプロンプトのメニューだけにしてしまってもよいかもしれません。
(どこでPowerShellのインストール状況を判断するのか調査が必要ですが・・・)

タイトル変えました。

どこでPowerShellのインストール状況を判断するのか調査が必要

windows7 以降は標準搭載らしいです。
https://ja.wikipedia.org/wiki/PowerShell

PowerShell、使わないから削除したことはあります。
私のような人がいると思うのでちゃんとチェックは必要だと思います。

コントロール パネル\すべてのコントロール パネル項目\プログラムと機能
image

PowerShell、使わないから削除したことはあります。
私のような人がいると思うのでちゃんとチェックは必要だと思います。

了解です。

コマンドの活性制御をする関数があるので、powershellのコマンドだけ独自にインタープリタが存在するかチェックさせればよさそうです。

powershell のパスは

C:\Windows\System32\WindowsPowerShell\v1.0\powershell.exe

SHGetSpecialFolderPathCSIDL_SYSTEM
で呼べば C:\Windows\System32 の部分を取れる

http://yamatyuu.net/computer/program/sdk/base/SHGetSpecialFolderPath/csidl.html

PowerShellがインストールされている環境では、powershell.exeにPATHが通っている気がします。

それなら where powershell.exe で存在確認したらいいですね。

プロセスを初期化しないオプション付けてloadlibraryexを呼ぶ・・・。
https://docs.microsoft.com/en-us/windows/desktop/api/libloaderapi/nf-libloaderapi-loadlibraryexw

この方法ならパスが取っていればフルパスがなくても、勝手に探してくれます。
popenを使えばcmd.exe経由でwhereの出力が取れんこともないですが、exeが2つ起動するのでなんか不安定です。

CreateProcessもフルパスを用意しなくていいです。即終了するようなパラメータを渡して、起動成功なら「存在」みたいにするならこの方法が一番簡単かも。

なんか、もっとマシなAPIがあったような気がするんですけど・・・。

SearchPathでしょうか。
https://msdn.microsoft.com/ja-jp/library/cc429699.aspx

いけました。
ret が 0 かどうかチェックすればいけます。

TCHAR szFileBuff[MAX_PATH];
LPTSTR lpFilePart = NULL;

DWORD ret = SearchPath(
    NULL,      // 検索パス
    _T("powershell.exe"),  // ファイル名
    NULL, // ファイルの拡張子
    MAX_PATH, // バッファのサイズ
    szFileBuff,     // 見つかったファイル名を格納するバッファ
    &lpFilePart   // ファイルコンポーネント
);

#603 待ち

個人的な希望です。
「コマンドプロンプトを出したいケース」と、「PowerShellを出したいケース」があります。

623 で powershell で開く機能を実装しました。

PowerShell、使わないから削除したことはあります。
私のような人がいると思うのでちゃんとチェックは必要だと思います。

powershell が見つからない場合には、メニュー項目をグレーアウトします。

対応完了

567 #607 が残件

Was this page helpful?
0 / 5 - 0 ratings