Özel klasörlerin konumu için bir yükseltme DLL'SI elde nasıl kullanılır

Makale çevirileri Makale çevirileri
Makale numarası: 241733 - Bu makalenin geçerli olduğu ürünleri görün.
Hepsini aç | Hepsini kapa

Özet

Yükseltme sırasında Windows 95 veya Windows 98'den Windows 2000 Professional, masaüstü klasörüne veya erişim özel klasörleri, Başlat menüsü klasörü gibi bir geçiş DLL isteyebilirsiniz. Bu klasörlerin varsayılan konumları mevcut migration DLL kabul edemiyor. Bunun yerine, SHGetSpecialFolderPath veya SHGetFolderPath kullanmalısınız.

Daha fazla bilgi

Internet Explorer 4.0 ile masaüstü güncelleştirme yüklüyse, SHGetSpecialFolderPath yalnızca Windows 95'te çalışır. Windows 2000'de, her zaman SHGetSpecialFolderPath çalışır. Ancak, her iki durumda da, bunu SHGetSpecialFolderPath anahtarının üst kümesidir yeni SHGetFolderPath API kullanmak en iyisidir. Windows 95 veya Windows 98 SHGetFolderPath kullanmak için <a0></a0>, migration DLL birlikte SHFolder.dll dosyasını yeniden dağıtan gerekir.

SHFolder.dll son Platform SDK ' elde edebilirsiniz. Platform SDK'nı karşıdan yüklemek için aşağıdaki Web sitesine bakın:
http://www.microsoft.com/msdownload/platformsdk/setuplauncher.htm
Platform SDK'yı yüklerken, yeniden dağıtılabilir bileşen yapım ortamı yüklediğinizden emin olun. Ayrıca, Platform SDK, Microsoft Visual istendiğinde C++ ile tümleştirmek seçin. Bu gerekli SHFolder.h dosyası nedeniyle gereklidir. Platform SDK yeniden yüklendiğinde, yükleme klasörü için bir yeniden dağıtılabilir yürütülebilir SHFolder.exe arayın. Bu dosyayı SHFolder.dll ve Windows 95 veya Windows 98 üzerinde çalışması için gerekli olan diğer tüm güncelleştirmeleri yükler. Kullanıcı bilgisayar üzerindeki migration DLL yerleştirdiğinde bu yürütülebilir dosya kullanıcının bilgisayar üzerinde çalıştırmalısınız. Ayrıca, uygulama kurulum sırasında yüklenebilir.

Aşağıdaki kodda, bir işaretçi SHGetFolderPath APı'nı edinmek gösterilmiştir:
#include <windows.h>
#include <shfolder.h>

PFNSHGETFOLDERPATHA GetFuncPtr_SHGetFolderPathA()
{
   static HMODULE hMod = NULL;
   PFNSHGETFOLDERPATHA pSHGetFolderPath = NULL;

   // Load SHFolder.dll only once
   if (!hMod)
      hMod = LoadLibrary("SHFolder.dll");

   if (hMod)
      // Obtain a pointer to the SHGetFolderPathA function
      pSHGetFolderPath = (PFNSHGETFOLDERPATHA)GetProcAddress(hMod, 
         "SHGetFolderPathA");

   return pSHGetFolderPath;
}
				

Aşağıdaki örnek kod, bu işlev olası bir kullanımını gösterir. Özel Windows 2000 program veya uygulama Başlat menüsündeki Programlar klasöründe bulunan bir kısayolu gerektiren bir yardımcı program Windows 2000 yükseltmesi sırasında bir uygulama içeriyor olabilir. Migration DLL, yeni programı bilgisayarınıza kopyaladıktan sonra kullanıcı Başlat menüsüne bir kısayol ekleyebilirsiniz. Kullanıcı başına ayarı MigrateUserNT işlevi bu görevi gerçekleştirmek için en iyi yerdir.

Aşağıdaki işlev üç parametre alır. Ilk parametre yürütülebilir hedef yoludur. Ikinci parametre bir açıklamasıdır. Başlat menüsündeki Programlar klasöründe oluşturulan bir alt klasör son parametresidir. Başka bir durumda, kısayol oluşturulur.
#include <windows.h>
#include <objbase.h>
#include <shlobj.h>
#include <shfolder.h>

HRESULT CreateUserStartMenuShortcut(LPSTR pszShortcutFile,
            LPSTR pszDescription, LPTSTR pszRelativeFolder)
{
   HRESULT hr;
   PFNSHGETFOLDERPATHA pSHGetFolderPath = NULL;
   TCHAR pszLink[MAX_PATH];
   BOOL bFound = FALSE;

   pSHGetFolderPath = GetFuncPtr_SHGetFolderPathA();

   // Find the current user's Start Menu Programs folder
   if (pSHGetFolderPath)
      bFound = SUCCEEDED(pSHGetFolderPath(NULL, CSIDL_PROGRAMS, 
                           NULL, SHGFP_TYPE_CURRENT, pszLink));

   if (bFound)
   {
      // Proceed to create the shortcut
      IShellLink *pIShellLink = NULL;
      IPersistFile *ppf = NULL;
      WCHAR pLinkUnicode[MAX_PATH];

      CoInitialize(NULL);

      // Get a pointer to the IShellLink interface.
      hr = CoCreateInstance(CLSID_ShellLink, NULL, CLSCTX_INPROC_SERVER,
                            IID_IShellLink, (void **)&pIShellLink);

      if (SUCCEEDED(hr))
      {
         // Get a pointer to IPersistFile interface for saving shortcut
         hr = pIShellLink->QueryInterface(IID_IPersistFile, (void **)&ppf);

         if (SUCCEEDED(hr))
         {   
            hr = pIShellLink->SetPath(pszShortcutFile);
            hr = pIShellLink->SetDescription(pszDescription);

            if (SUCCEEDED(hr))
            {
               // Add the target folder to the Start Menu Programs path
               lstrcat(pszLink, "\\");
               lstrcat(pszLink, pszRelativeFolder);
               lstrcat(pszLink, "\\");

               // Create the directory if it does not exist
               CreateDirectory(pszLink,NULL);

               // Add the file name for the shortcut
               lstrcat(pszLink, pszDescription);
               lstrcat(pszLink, ".lnk");

               // Convert string to Unicode, and call IPersistFile::Save()
               MultiByteToWideChar(CP_ACP, 0, pszLink, -1, pLinkUnicode, MAX_PATH);
               hr = ppf->Save(pLinkUnicode, TRUE);
            }
            ppf->Release();
         }
         pIShellLink->Release();
      }
      CoUninitialize();
   }

   return hr;
}
				
Bu işlevler edinebilirsiniz, özel klasörleri diğer türlerini belirlemek, SHGetSpecialFolderPath ve SHGetFolderPath belgelerine bakın. Coınitialize ve CoUnitialize bu işlev içinde adlı örnek dikkat edin. COM diğer fonksiyonlarında kullanılır, bu çağrılar için geçiş DLL DllMain işlevi taşınması gereken. Coınitialize, DLL_PROCESS_DETACH bildirimi için DLL_PROCESS_ATTACH bildirim ve CoUninitialize çağrısı.

Referanslar

Geçiş DLL hakkında daha fazla bilgi için MSDN Kitaplığı'nda aşağıdaki konuya bakın:
Platform SDK Yönetim Hizmetleri; Kur; geçiş uzantısı arabirimi

Özellikler

Makale numarası: 241733 - Last Review: 1 Mart 2007 Perşembe - Gözden geçirme: 3.4
Bu makaledeki bilginin uygulandığı durum:
  • Microsoft Windows 2000 Server
  • Microsoft Windows 2000 Advanced Server
  • Microsoft Windows 2000 Professional Edition
  • Microsoft Windows 98 Standard Edition
  • Microsoft Windows 95
Anahtar Kelimeler: 
kbmt kbfaq kbhowto kbmigrate kbsetup KB241733 KbMttr
Machine-translated Article
ÖNEMLİ: Bu makale, bir kişi tarafından çevrilmek yerine, Microsoft makine-çevirisi yazılımı ile çevrilmiştir. Microsoft size hem kişiler tarafından çevrilmiş, hem de makine-çevrisi ile çevrilmiş makaleler sunar. Böylelikle, bilgi bankamızdaki tüm makalelere, kendi dilinizde ulaşmış olursunuz. Bununla birlikte, makine tarafından çevrilmiş makaleler mükemmel değildir. Bir yabancının sizin dilinizde konuşurken yapabileceği hatalar gibi, makale; kelime dağarcığı, söz dizim kuralları veya dil bilgisi açısından yanlışlar içerebilir. Microsoft, içeriğin yanlış çevrimi veya onun müşteri tarafından kullanımından doğan; kusur, hata veya zarardan sorumlu değildir. Microsoft ayrıca makine çevirisi yazılımını sıkça güncellemektedir.
Makalenin İngilizcesi aşağıdaki gibidir:241733

Geri Bildirim Ver

 

Contact us for more help

Contact us for more help
Connect with Answer Desk for expert help.
Get more support from smallbusiness.support.microsoft.com