Belirli bir Visual Studio örneğini DTE almak için çalışan nesne tablosunu kullanıyorum. MSDN'da açıklanan tekniği kullanmak niyetindeydim. Listelenecek örneklerden birini almayı başardım, ama diğerlerini değil.Çalışan Nesneyi Anlamak Tablo
public static void PrintRot()
{
IRunningObjectTable rot;
IEnumMoniker enumMoniker;
int retVal = GetRunningObjectTable(0, out rot);
if (retVal == 0)
{
rot.EnumRunning(out enumMoniker);
IntPtr fetched = IntPtr.Zero;
IMoniker[] moniker = new IMoniker[1];
while (enumMoniker.Next(1, moniker, fetched) == 0)
{
IBindCtx bindCtx;
CreateBindCtx(0, out bindCtx);
string displayName;
moniker[0].GetDisplayName(bindCtx, null, out displayName);
Console.WriteLine("Display Name: {0}", displayName);
}
}
}
[DllImport("ole32.dll")]
private static extern void CreateBindCtx(int reserved, out IBindCtx ppbc);
[DllImport("ole32.dll")]
private static extern int GetRunningObjectTable(int reserved, out IRunningObjectTable prot);
Burada sonuçları:
Display Name: !VisualStudio.DTE.11.0:7120
Display Name: clsid:331F1768-05A9-4DDD-B86E-DAE34DDC998A:
Display Name: !{7751A556-096C-44B5-B60D-4CC78885F0E5}
Display Name: c:\users\dave\documents\visual studio 2012\Projects\MyProj\MyProj.sln
Display Name: !{059618E6-4639-4D1A-A248-1384E368D5C3}
ben yanlış yapıyorum VisualStudio.DTE ile birden fazla satır görmek için beklenebilir? Ne görmeyi beklemeliyim?
Düzenleme:
Bu uygulama yükseltilmiş ayrıcalıklar çalışır durumda olup olmadığını bağlı gözükmektedir. Eğer tutarlı ve normal mod kullanırsam çalışır. Bununla birlikte, bunun işe yaramasını isterdim, tüm süreçler için ROT'yi nasıl alabilirim?
Gayet iyi çalışıyor görecekti. –
başka bir örneği yükseltiyor musunuz? yükseltilmiş mi? –
@HansPassant sonuçlarınızda ne görüyorsunuz? –