4

これは奇妙な質問だと思います。[HKEY_CLASSES_ROOT\batfile]しかし、私は興味があります.これは私がこれまでに試したこと[HKEY_CLASSES_ROOT\cmdfile]です. 私が気づいた唯一の違いは、その実行にとって重要ではないということでした。したがって、目的の拡張子に対して同じデータを使用してレジストリ値を作成しました( .scjsファイル拡張子を作成しようとしています):[HKEY_CLASSES_ROOT\.bat][HKEY_CLASSES_ROOT\.cmd]HKEY_CLASSES_ROOT\*\FrienflyTypeName

Windows Registry Editor Version 5.00

[HKEY_CLASSES_ROOT\.scjs]
@="scjsfile"
#this says that the file will contains text
[HKEY_CLASSES_ROOT\.scjs\PersistentHandler]
@="{5e941d80-bf96-11cd-b579-08002b30bfeb}"

[HKEY_CLASSES_ROOT\scjsfile]
@="Windows Batch File"
"EditFlags"=hex:30,04,00,00
"FriendlyTypeName"=hex(2):40,00,25,00,53,00,79,00,73,00,74,00,65,00,6d,00,52,\
  00,6f,00,6f,00,74,00,25,00,5c,00,53,00,79,00,73,00,74,00,65,00,6d,00,33,00,\
  32,00,5c,00,61,00,63,00,70,00,70,00,61,00,67,00,65,00,2e,00,64,00,6c,00,6c,\
  00,2c,00,2d,00,36,00,30,00,30,00,32,00,00,00

[HKEY_CLASSES_ROOT\scjsfile\DefaultIcon]
@=hex(2):25,00,53,00,79,00,73,00,74,00,65,00,6d,00,52,00,6f,00,6f,00,74,00,25,\
  00,5c,00,53,00,79,00,73,00,74,00,65,00,6d,00,33,00,32,00,5c,00,69,00,6d,00,\
  61,00,67,00,65,00,72,00,65,00,73,00,2e,00,64,00,6c,00,6c,00,2c,00,2d,00,36,\
  00,38,00,00,00

[HKEY_CLASSES_ROOT\scjsfile\shell]

[HKEY_CLASSES_ROOT\scjsfile\shell\edit]

[HKEY_CLASSES_ROOT\scjsfile\shell\edit\command]
@=hex(2):25,00,53,00,79,00,73,00,74,00,65,00,6d,00,52,00,6f,00,6f,00,74,00,25,\
  00,5c,00,53,00,79,00,73,00,74,00,65,00,6d,00,33,00,32,00,5c,00,4e,00,4f,00,\
  54,00,45,00,50,00,41,00,44,00,2e,00,45,00,58,00,45,00,20,00,25,00,31,00,00,\
  00

  #copied from batfile from HKEY_CLASSES_ROOT .Same as cmdfile reg values
[HKEY_CLASSES_ROOT\scjsfile\shell\open]
"EditFlags"=hex:00,00,00,00

[HKEY_CLASSES_ROOT\scjsfile\shell\open\command]
@="\"%1\" %*"

[HKEY_CLASSES_ROOT\scjsfile\shell\print]

[HKEY_CLASSES_ROOT\scjsfile\shell\print\command]
@=hex(2):25,00,53,00,79,00,73,00,74,00,65,00,6d,00,52,00,6f,00,6f,00,74,00,25,\
  00,5c,00,53,00,79,00,73,00,74,00,65,00,6d,00,33,00,32,00,5c,00,4e,00,4f,00,\
  54,00,45,00,50,00,41,00,44,00,2e,00,45,00,58,00,45,00,20,00,2f,00,70,00,20,\
  00,25,00,31,00,00,00

[HKEY_CLASSES_ROOT\scjsfile\shell\runas]
"HasLUAShield"=""

[HKEY_CLASSES_ROOT\scjsfile\shell\runas\command]
@=hex(2):25,00,53,00,79,00,73,00,74,00,65,00,6d,00,52,00,6f,00,6f,00,74,00,25,\
  00,5c,00,53,00,79,00,73,00,74,00,65,00,6d,00,33,00,32,00,5c,00,63,00,6d,00,\
  64,00,2e,00,65,00,78,00,65,00,20,00,2f,00,43,00,20,00,22,00,25,00,31,00,22,\
  00,20,00,25,00,2a,00,00,00

[HKEY_CLASSES_ROOT\scjsfile\shell\runasuser]
@="@shell32.dll,-50944"
"Extended"=""
"SuppressionPolicyEx"="{F211AA05-D4DF-4370-A2A0-9F19C09756A7}"

[HKEY_CLASSES_ROOT\scjsfile\shell\runasuser\command]
"DelegateExecute"="{ea72d00e-4960-42fa-ba92-7792a7944c1d}"

[HKEY_CLASSES_ROOT\scjsfile\ShellEx]

[HKEY_CLASSES_ROOT\scjsfile\ShellEx\ContextMenuHandlers]
@="Compatibility"

[HKEY_CLASSES_ROOT\scjsfile\ShellEx\ContextMenuHandlers\Compatibility]
@="{1d27f844-3a1f-4410-85ac-14651078412d}"

[HKEY_CLASSES_ROOT\scjsfile\ShellEx\ContextMenuHandlers\OpenGLShExt]
@="{E97DEC16-A50D-49bb-AE24-CF682282E08D}"

[HKEY_CLASSES_ROOT\scjsfile\ShellEx\DropHandler]
@="{86C86720-42A0-1069-A2E8-08002B30309D}"

[HKEY_CLASSES_ROOT\scjsfile\ShellEx\PropertySheetHandlers]

[HKEY_CLASSES_ROOT\scjsfile\ShellEx\PropertySheetHandlers\ShimLayer Property Page]
@="{513D916F-2A8E-4F51-AEAB-0CBC76FB1AF8}"

[HKEY_CLASSES_ROOT\scjsfile\ShellEx\{8895b1c6-b41f-4c1c-a562-0d564250836f}]
@="{1531d583-8375-4d3f-b5fb-d23bbd169f22}"

また、値 (.SCJS) を PATEXT 変数に追加しました ->.COM;.EXE;.BAT;.CMD;.VBS;.VBE;.JS;.JSE;.WSF;.WSH;.MSC;.SCJS

しかし、ファイルを実行すると、test.scjs is not valid Win32 application.Access is denied が表示されます。

だからそれは可能ですか?私が変更すべき何か他にありますか?

編集:私が見つけた最良の解決策:私が使用するオープンキーの場合:

[HKEY_CLASSES_ROOT\scjsfile\shell\open\command]
@="%SystemRoot%\\System32\\caller.bat \"%1\" \"%*\""

system32 に caller.bat がある場所:

@echo off
copy "%~nx1"  "%temp%\%~nx1.bat" /Y >nul
"%temp%\%~nx1" .bat %~2

cmd /c単に引数を管理するのが難しいことを望みます。現時点では、コマンドライン引数を処理する方法がありません。

もう1つの編集:コマンドライン引数を処理する1つの方法は、の [HKEY_CLASSES_ROOT\scjsfile\shell\open\Run]代わりに使用することです[HKEY_CLASSES_ROOT\scjsfile\shell\open\command]。今のところ正確な違いはわかりませんが、機能します(AutoITインストールでこれを見ました:-))。

4

4 に答える 4

2

これはすでに受け入れられていますが、一緒にハッキングしたという回答を追加すると思いました。

私は独自のファイル拡張子を作成し、.baliいくつかのバッチ コマンドを配置して、ファイルを開いて実行できるようにしました。

レジストリの.baliエクスポートは次のようになります

Windows Registry Editor Version 5.00

[HKEY_CLASSES_ROOT\.bali]
@="BaliFile"

この値にはスペースを含めることができないことに注意してください (引用符で囲まれている場合は機能する可能性がありますが、試していません)。

レジストリのbalifileエクスポートは次のようになります

Windows Registry Editor Version 5.00

[HKEY_CLASSES_ROOT\balifile]

[HKEY_CLASSES_ROOT\balifile\DefaultIcon]
@="%SystemRoot%\\System32\\imageres.dll,-68"

[HKEY_CLASSES_ROOT\balifile\shell]

[HKEY_CLASSES_ROOT\balifile\shell\open]

[HKEY_CLASSES_ROOT\balifile\shell\open\command]
@="cmd.exe /c for /f \"delims=\" %%a in (%1) do %%a"

file.baliの見た目はこんな感じ

echo hello bali
pause

ファイルには cmd アイコンもあり、実行するとプロンプトでコマンドが実行され、明らかにhello bali.

これは、使用できるものに制限があります。たとえば、変数を使用することはできませんが、自分で試して、できることとできないことを見つけることができます。

これがあなたが探しているものかどうかはわかりませんが、とにかく作るのはとても楽しかったです:)

于 2012-11-27T15:36:00.520 に答える
1

これと同じ質問が以前に尋ねられましたが、見つかりません。

コンセンサスは、それは不可能であるというものでした.Windowsは.batまたは.cmdの拡張子を持たないバッチファイルの実行を許可しません.

あるポスターが、許可された場合に作成されるセキュリティの抜け穴について言及したことを覚えています。

于 2012-11-27T13:08:03.863 に答える
1

最初に「インストール」スクリプトが必要です:

   @echo off

    rem :: A files with .TEST extension will be able to execute batch code but is not perfect as the %0 argument is lost

    rem :: "installing" a caller.
    if not exist "c:\caller.bat" (
       echo @echo off
       echo copy "%%~nx1"  "%%temp%%\%%~nx1.bat" /Y ^>nul
       echo "%%temp%%\%%~nx1.bat"  %%*
    ) > c:\caller.bat

    rem :: associating file extension
    assoc .test=batps
    ftype batps=c:\caller "%%1" %%*

次に、単純な.test ファイルを試すことができます。

@echo off
for /l (1;1;10) do (
  echo testing .TEST extension
)

ASSOCFTYPEどちらもすぐに有効になるため、「インストール」の直後にファイルを開始でき、.test2 番目の cmd インスタンスは必要ありません。

于 2015-01-31T09:52:14.957 に答える
0

目的の拡張子にプログラムを関連付ける必要があります...

Windows Registry Editor Version 5.00

[HKEY_CLASSES_ROOT\.test]

[HKEY_CLASSES_ROOT\.test\shell]

[HKEY_CLASSES_ROOT\.test\shell\open]

[HKEY_CLASSES_ROOT\.test\shell\open\command]
@="notepad \"%1\""

デスクトップに「 File.test 」という名前の新しいファイルを作成し、それをダブルクリックすると、メモ帳で開きます。

これがお役に立てば幸いです。

アップデート

PC に登録された拡張子の場合...たとえば、「.bat」は「batfile」キーによって登録され、登録されたキー内でプログラムを関連付ける必要があります。「.bat」キーではなく、「batfile」キーを意味します。

PS: 私の英語で申し訳ありません。

于 2012-11-27T11:49:41.520 に答える