背景と私がやったこと
Windows 用のシェル拡張機能の作成方法を学ぼうとしていますが、そのプロセスは十分に文書化されておらず、初心者向けの情報はほとんどありません。私が読んだことによると、このガイドは、Windows シェル拡張機能の最高の初心者向けチュートリアルの 1 つとしてあらゆる場所に掲載されています。チュートリアルを最後まで実行しましたが、いくつかの競合を避けるためにいくつかの調整を行う必要がありました。
- x86-64bit 用にビルドするには、Visual Studio 2012 を変更する必要がありました。
win32
構成を からに切り替えたx64
だけですが、知らない手順が他にもある可能性があります。 guidgen.exe
Visual Studio 2012 に付属のを使用して、GUID を生成しました。
私のプロジェクトは正常にコンパイルされ、終了しexplorer.exe
(スタート メニューで ctrl+shift+右クリックして を選択Exit Explorer
)、リリース モードでプロジェクトをコンパイル/実行することでプロジェクトを開始できます (その後、 の別のインスタンスが開始されますexplorer.exe
)。
問題
regedit.exe
問題は、プログラムの実行時にCLSID 値が書き込まれないことです(ただし、txtfile
レジストリの場所は更新されます)。さらに、CLSID が登録されていない場合に予想されるプログラム フックが機能しません。「助けて、うまくいかない!」と言うだけでなく、問題をもう少し絞り込めたらいいのにと思います。しかし、正直なところ、問題をさらに特定するために何ができるかわかりません。私のSimpleShlExt.rgs
ファイルに何か問題があることはほぼ確実ですが、このガイドでは、ファイルに関するこの重要なステップについて多くの情報が提供されていません*.rgs
(トピック外の冗談を除いて)。
- DLL をレジストリに登録する際に何が問題になっているのかについて、詳細な情報を取得するにはどうすればよいですか?
- チュートリアルで説明されていない Visual Studio 2012 に関する警告はありますか (チュートリアルの古さ、または暗黙の知識の欠如による)。
- ファイルの何が問題になってい
SimpleShlExt.rgs
ますか?!?!?
コード
追加情報については、関連するコードを以下に掲載しました。上記のガイドとほぼ同じです (ただし、GUID が異なります)。リクエストがあれば投稿できますが、ガイドSimpleShlExt.cpp
とSimpleShlExt.h
ほとんど同じであり、有用な情報が追加されているかどうかはわかりません.
SimpleShlExt.rgs (CLSID は で生成されましたguidgen.exe
)
HKCR
{
NoRemove CLSID
{
ForceRemove {E2D6660C-E3E5-43CE-BF24-44D4269EEC1C} = s 'SimpleShlExt Class'
{
InprocServer32 = s '%MODULE%'
{
val ThreadingModel = s 'Apartment'
}
}
}
}
HKCR
{
NoRemove txtfile
{
NoRemove ShellEx
{
NoRemove ContextMenuHandlers
{
ForceRemove SimpleShlExt = s '{E2D6660C-E3E5-43CE-BF24-44D4269EEC1C}'
}
}
}
}