名前 題名 ▼ Saraさん > ▼ Mr.XRAYさん こんばんは > > > plFolderWatcherですが,Windows2000では使用てきないようです. > >> > >> ありがたく省略 > >> > > 非常に残念ですが... m(_ _)m > > とりあえず,現在までの調査報告です. > > むぅ・・・残念と あきらめきれずに、さらに確認をしましたところ。 > 実際にできている人がいるのがわかりました・・・ > > ので、さらに調べてみたところ・・・以下の方法で実現できました。(^^)V > > TplFolderWatcher = class(TComponent) > private > // > //上下の記述省略 > // > Shell32WHND : LongInt; > protected > // > //上下の記述省略 > // > > type > _SHChangeNotifyEntry = record > pidl: PItemIDList; > fRecursive: BOOL; > end; > SHChangeNotifyEntry = _SHChangeNotifyEntry; > TSHChangeNotifyEntry = SHChangeNotifyEntry; > PSHChangeNotifyEntry = ^TSHChangeNotifyEntry; > > { Windows2000でエラーになるので、コメントアウト > function ILClone(pidl: PItemIDList): PItemIDList; stdcall; external 'shell32.dll'; > function SHChangeNotifyRegister(hwnd: HWND; fSources: Integer; fEvents: Integer; > wMsg: UINT; cEntries: Integer; > var pshcne: TSHChangeNotifyEntry): ULONG; stdcall; external 'shell32.dll'; > function SHChangeNotifyDeregister(ulID: LongWord): BOOL; stdcall; > external 'shell32.dll'; > } > // > //上下の記述省略 > // > > //グローバル変数として記述 > ILClone1 : function (pidl: PItemIDList): PItemIDList; stdcall; > SHChangeNotifyRegister1 : function (hwnd: HWND; fSources: Integer; fEvents: Integer; wMsg: UINT; cEntries: Integer; var pshcne: TSHChangeNotifyEntry): ULONG; stdcall; > SHChangeNotifyDeregister1 : function (ulID: LongWord): BOOL; stdcall; > > // > //上下の記述省略 > // > > constructor TplFolderWatcher.Create(AOwner: TComponent); > var SysDir : String; > p : pAnsiChar; > function SpecialFolderGet(CSIDL : Integer):String; > var pPath : PChar; > begin > pPath := StrAlloc(1000); > SHGetSpecialFolderPath(0,pPath,CSIDL,False); > Result := StrPas(pPath); > StrDispose(pPath); > end; > begin > // > // 上下の記述省略 > // > > if (csDesigning in AOwner.ComponentState) then exit; > > SysDir := SpecialFolderGet(CSIDL_SYSTEM); > Shell32WHND := LoadLibrary(PChar(SysDir + '\SHELL32.DLL' + #0)); > if Shell32WHND >= HINSTANCE_ERROR then begin > Pointer(p) := GetProcAddress(Shell32WHND, MAKEINTRESOURCE(2)); > @SHChangeNotifyRegister1 := Pointer(p); > Pointer(p) := GetProcAddress(Shell32WHND, MAKEINTRESOURCE(4)); > @SHChangeNotifyDeregister1 := Pointer(p); > Pointer(p) := GetProcAddress(Shell32WHND, MAKEINTRESOURCE(18)); > @ILClone1 := Pointer(p); > end; > > end; > > destructor TplFolderWatcher.Destroy; > begin > StopWatch; > inherited Destroy; > > if (csDesigning in ComponentState) then exit; > if Shell32WHND >= HINSTANCE_ERROR then FreeLibrary(Shell32WHND); > end; > > として、ShCangeNotifyRegisterを実際に使用しているところで、グローバル変数で > 記述した名称で呼べばWindows2000で動作するようです。 > > なるほど、非公開APIというのは、名前が付いてないだけなんですね・・・(^^; > 勉強になりました。 > > > PS. > Windows2000でもコンテキストメニューは正常に新規作成が表示されていました。 > あとは、XPで常時表示されるようになれば・・・(^^; > > よろしくお願いいたします。m(_ _)m GIF,JPEG,PNG画像ファイル及びLZH,ZIPファイルをアップロードできます.600 x 1200 ピクセルを超える画像は縮小表示されます(画像クリックで拡大表示). (上限122000(120k)バイト) 削除キー Link