Exemplo n.º 1
0
 /// <summary>
 /// Trys to get friendly name for the property key. If not available via <c>PSGetNameFromPropertyKey</c>, then the name of the
 /// defined field is returned (i.e. "DEVPKEY_Device_Class"). If not available, then the Guid and ID are returned.
 /// </summary>
 /// <param name="propKey">The property key.</param>
 /// <returns>The best string representation available.</returns>
 public static string LookupName(this DEVPROPKEY propKey)
 {
     if (PropSys.PSGetNameFromPropertyKey(new Ole32.PROPERTYKEY(propKey.fmtid, propKey.pid), out var str).Succeeded)
     {
         return(str);
     }
     return(LookupField(propKey)?.Name ?? $"{propKey.fmtid:B}[{propKey.pid}]");
 }
Exemplo n.º 2
0
        private static void PropVariant()
        {
            Ole32.PROPVARIANT pv;
            // SafeArray
            pv = new Ole32.PROPVARIANT(new object[] { 1, DateTime.Now, Guid.NewGuid() });
            AddTestResult(null, pv.ToString(), pv.parray);
            pv = new Ole32.PROPVARIANT(new object[] { 1, 2, 3 });
            AddTestResult(null, pv.ToString(), pv.parray);

            // Struct
            var ms = new SafeCoTaskMemString("TESTFMT");

            pv = new Ole32.PROPVARIANT(new[] { new Ole32.CLIPDATA(ms.DangerousGetHandle(), ms.Length), new Ole32.CLIPDATA(0xCFF) });
            AddTestResult(null, pv.ToString(), pv.caclipdata.ToArray()[0].ulClipFmt);

            // Dates
            pv = new Ole32.PROPVARIANT((DateTime?)null);
            AddTestResult(null, pv.ToString(), pv.pdate);
            pv = new Ole32.PROPVARIANT(DateTime.Now.AddYears(-500));
            AddTestResult(null, pv.ToString(), pv.Value);
            pv = new Ole32.PROPVARIANT(DateTime.Now);
            AddTestResult(null, pv.ToString(), new[] { pv.Value, pv.date, pv.pdate });
            pv = new Ole32.PROPVARIANT(DateTime.Now, VarEnum.VT_FILETIME);
            AddTestResult(null, pv.ToString(), pv.filetime.ToString(null));
            pv = new Ole32.PROPVARIANT(new[] { DateTime.Now, DateTime.Today, DateTime.MaxValue });
            AddTestResult(null, pv.ToString(), pv.cadate);

            // FILETIME
            var ft = DateTime.Now.ToFileTimeStruct();

            pv = new Ole32.PROPVARIANT(ft);
            AddTestResult(null, pv.ToString(), pv.filetime.ToString(null));
            pv = new Ole32.PROPVARIANT(new[] { ft, ft });
            AddTestResult(null, pv.ToString(), pv.cafiletime?.Select(f => f.ToString("G")));
            pv = new Ole32.PROPVARIANT(new[] { DateTime.Now, DateTime.Today, DateTime.MaxValue }, VarEnum.VT_FILETIME);
            AddTestResult(null, pv.ToString(), pv.cafiletime?.Select(f => f.ToString("G")));

            // Bool
            pv = new Ole32.PROPVARIANT(true);
            AddTestResult(null, pv.ToString(), new[] { pv.pboolVal, pv.boolVal });
            pv = new Ole32.PROPVARIANT(new[] { true, false, true, false });
            AddTestResult(null, pv.ToString(), pv.cabool);
            PropSys.InitPropVariantFromBooleanVector(new[] { true, false, true, false }, 4, pv);
            AddTestResult(null, pv.ToString(), pv.cabool);
            AddTestResult(null, pv.ToString(), pv.cai);

            // Int
            pv = new Ole32.PROPVARIANT((int?)null);
            AddTestResult(null, pv.ToString(), pv.plVal);
            pv = new Ole32.PROPVARIANT(3);
            AddTestResult(null, pv.ToString(), new[] { pv.Value, pv.bVal, pv.cVal, pv.iVal, pv.uiVal, pv.intVal, pv.lVal, pv.uintVal, pv.ulVal, pv.hVal, pv.uhVal, pv.scode });
            pv = new Ole32.PROPVARIANT(new Win32Error(5));
            AddTestResult(null, pv.ToString(), $"{pv.lVal}/{(int)pv.scode}");
            pv = new Ole32.PROPVARIANT(new[] { 0, 1, 2 });
            AddTestResult(null, pv.ToString(), pv.cal);

            // Decimal
            pv = new Ole32.PROPVARIANT(3.3m);
            AddTestResult(null, pv.ToString(), new[] { pv.Value, pv.pdecVal, pv.bVal, pv.cVal, pv.iVal, pv.uiVal, pv.intVal, pv.lVal, pv.uintVal, pv.ulVal, pv.hVal, pv.uhVal, pv.fltVal, pv.dblVal });
            pv = new Ole32.PROPVARIANT(3.3m, VarEnum.VT_CY);
            AddTestResult(null, pv.ToString(), new[] { pv.Value, pv.pdecVal, pv.cyVal, pv.pcyVal });
            pv = new Ole32.PROPVARIANT(new[] { 0m, 1m, 2m }, VarEnum.VT_CY);
            AddTestResult(null, pv.ToString(), pv.cacy);

            // Single/double precision
            pv = new Ole32.PROPVARIANT(3.3f);
            AddTestResult(null, pv.ToString(), new[] { pv.Value, pv.fltVal, pv.dblVal, pv.pdecVal, pv.bVal, pv.cVal, pv.iVal, pv.uiVal, pv.intVal, pv.lVal, pv.uintVal, pv.ulVal, pv.hVal, pv.uhVal });
            pv = new Ole32.PROPVARIANT(3.3);
            AddTestResult(null, pv.ToString(), new[] { pv.Value, pv.fltVal, pv.dblVal });
            pv = new Ole32.PROPVARIANT(new[] { 0.0f, 1.1f, 2.2f });
            AddTestResult(null, pv.ToString(), pv.caflt);
            pv = new Ole32.PROPVARIANT(new[] { 0.0, 1.1, 2.2 });
            AddTestResult(null, pv.ToString(), pv.cadbl);

            // Byte
            pv = new Ole32.PROPVARIANT((byte)3);
            AddTestResult(null, pv.ToString(), pv.bVal);
            pv = new Ole32.PROPVARIANT(new byte[] { 0, 1, 2 });
            AddTestResult(null, pv.ToString(), pv.caub);

            // Guid
            pv = new Ole32.PROPVARIANT(Guid.NewGuid());
            AddTestResult(null, pv.ToString(), pv.puuid);
            pv = new Ole32.PROPVARIANT(new[] { Guid.NewGuid(), Guid.NewGuid() });
            AddTestResult(null, pv.ToString(), pv.cauuid);

            // String
            pv = new Ole32.PROPVARIANT("TestNoVTVal");
            AddTestResult(null, pv.ToString(), new[] { pv.Value, pv.pszVal, pv.pwszVal, pv.bstrVal, pv.pbstrVal });
            pv = new Ole32.PROPVARIANT("TestBSTR", VarEnum.VT_BSTR);
            AddTestResult(null, pv.ToString(), new[] { pv.Value, pv.pszVal, pv.pwszVal, pv.bstrVal, pv.pbstrVal });
            pv = new Ole32.PROPVARIANT("TestLPSTR", VarEnum.VT_LPSTR);
            AddTestResult(null, pv.ToString(), new[] { pv.Value, pv.pszVal, pv.pwszVal, pv.bstrVal, pv.pbstrVal });
            pv = new Ole32.PROPVARIANT("TestLPWSTR", VarEnum.VT_LPWSTR);
            AddTestResult(null, pv.ToString(), new[] { pv.Value, pv.pszVal, pv.pwszVal, pv.bstrVal, pv.pbstrVal });
            pv = new Ole32.PROPVARIANT(new[] { "TestStrVec", "X" });
            AddTestResult(null, pv.ToString(), pv.calpwstr);
            pv = new Ole32.PROPVARIANT(new[] { 1, 2, 3 }, VarEnum.VT_LPWSTR);
            AddTestResult(null, pv.ToString(), pv.calpwstr);
            PropSys.InitPropVariantFromStringVector(new[] { "TestStrVec", "X" }, 2, pv);
            AddTestResult(null, pv.ToString(), pv.calpwstr);
        }