Poznámka:
Přístup k této stránce vyžaduje autorizaci. Můžete se zkusit přihlásit nebo změnit adresáře.
Přístup k této stránce vyžaduje autorizaci. Můžete zkusit změnit adresáře.
Demonstruje různé úlohy specifické pro Windows pomocí sady Windows SDK.
Následující témata ukazují různé operace Windows prováděné se sadou Windows SDK pomocí visual C++.
Určení, jestli se spustilo vypnutí
Následující příklad kódu ukazuje, jak určit, zda aplikace nebo rozhraní .NET Framework aktuálně ukončuje. To je užitečné pro přístup ke statickým prvkům v rozhraní .NET Framework, protože během vypnutí jsou tyto konstrukce finalizovány systémem a nelze je spolehlivě používat. Když nejprve HasShutdownStarted zkontrolujete vlastnost, můžete se vyhnout potenciálním selháním tím, že k těmto prvkům nepřistupujete.
Příklad
// check_shutdown.cpp
// compile with: /clr
using namespace System;
int main()
{
if (Environment::HasShutdownStarted)
Console::WriteLine("Shutting down.");
else
Console::WriteLine("Not shutting down.");
return 0;
}
Určení interaktivního stavu uživatele
Následující příklad kódu ukazuje, jak určit, zda se kód spouští v kontextu interaktivním uživatelem. Pokud UserInteractive je false, kód běží jako proces služby nebo z webové aplikace, v takovém případě byste se neměli pokoušet o interakci s uživatelem.
Příklad
// user_interactive.cpp
// compile with: /clr
using namespace System;
int main()
{
if ( Environment::UserInteractive )
Console::WriteLine("User interactive");
else
Console::WriteLine("Noninteractive");
return 0;
}
Čtení dat z registru Systému Windows
Následující příklad kódu používá CurrentUser klíč ke čtení dat z registru Systému Windows. Nejprve se podklíče vyčíslí pomocí GetSubKeyNames metody a pak se pomocí metody otevře OpenSubKey podklíč Identities. Stejně jako kořenové klíče je každý podklíč reprezentován RegistryKey třídou. Nakonec se nový RegistryKey objekt použije k vytvoření výčtu párů klíč/hodnota.
Příklad
// registry_read.cpp
// compile with: /clr
using namespace System;
using namespace Microsoft::Win32;
int main( )
{
array<String^>^ key = Registry::CurrentUser->GetSubKeyNames( );
Console::WriteLine("Subkeys within CurrentUser root key:");
for (int i=0; i<key->Length; i++)
{
Console::WriteLine(" {0}", key[i]);
}
Console::WriteLine("Opening subkey 'Identities'...");
RegistryKey^ rk = nullptr;
rk = Registry::CurrentUser->OpenSubKey("Identities");
if (rk==nullptr)
{
Console::WriteLine("Registry key not found - aborting");
return -1;
}
Console::WriteLine("Key/value pairs within 'Identities' key:");
array<String^>^ name = rk->GetValueNames( );
for (int i=0; i<name->Length; i++)
{
String^ value = rk->GetValue(name[i])->ToString();
Console::WriteLine(" {0} = {1}", name[i], value);
}
return 0;
}
Poznámky
Třída Registry je pouze kontejner pro statické instance RegistryKey. Každá instance představuje uzel kořenového registru. Instance jsou ClassesRoot, , CurrentConfigCurrentUser, LocalMachinea Users.
Kromě statického jsou objekty v rámci Registry třídy jen pro čtení. Instance třídy vytvořené RegistryKey pro přístup k obsahu objektů registru jsou také jen pro čtení. Příklad přepsání tohoto chování naleznete v tématu Postupy: Zápis dat do registru Systému Windows (C++/CLI).
Ve třídě Registry existují dva další objekty: DynData a PerformanceData. Obě jsou instancemi RegistryKey třídy. Objekt DynData obsahuje informace o dynamickém registru, které jsou podporovány pouze v systémech Windows 98 a Windows Me. Objekt PerformanceData lze použít pro přístup k informacím o čítači výkonu pro aplikace, které používají systém Windows Sledování výkonu ing. Uzel PerformanceData představuje informace, které nejsou ve skutečnosti uloženy v registru, a proto nelze zobrazit pomocí Regedit.exe.
Čtení čítačů výkonu systému Windows
Některé aplikace a subsystémy Windows zpřístupňují údaje o výkonu prostřednictvím systému Windows. K těmto čítačům lze přistupovat pomocí PerformanceCounterCategory tříd PerformanceCounter , které se nacházejí v System.Diagnostics oboru názvů.
Následující příklad kódu používá tyto třídy k načtení a zobrazení čítače, který je aktualizován systémem Windows, aby indikuje procento času, kdy je procesor zaneprázdněn.
Poznámka:
Tento příklad vyžaduje oprávnění správce ke spuštění v systému Windows Vista.
Příklad
// processor_timer.cpp
// compile with: /clr
#using <system.dll>
using namespace System;
using namespace System::Threading;
using namespace System::Diagnostics;
using namespace System::Timers;
ref struct TimerObject
{
public:
static String^ m_instanceName;
static PerformanceCounter^ m_theCounter;
public:
static void OnTimer(Object^ source, ElapsedEventArgs^ e)
{
try
{
Console::WriteLine("CPU time used: {0,6} ",
m_theCounter->NextValue( ).ToString("f"));
}
catch(Exception^ e)
{
if (dynamic_cast<InvalidOperationException^>(e))
{
Console::WriteLine("Instance '{0}' does not exist",
m_instanceName);
return;
}
else
{
Console::WriteLine("Unknown exception... ('q' to quit)");
return;
}
}
}
};
int main()
{
String^ objectName = "Processor";
String^ counterName = "% Processor Time";
String^ instanceName = "_Total";
try
{
if ( !PerformanceCounterCategory::Exists(objectName) )
{
Console::WriteLine("Object {0} does not exist", objectName);
return -1;
}
}
catch (UnauthorizedAccessException ^ex)
{
Console::WriteLine("You are not authorized to access this information.");
Console::Write("If you are using Windows Vista, run the application with ");
Console::WriteLine("administrative privileges.");
Console::WriteLine(ex->Message);
return -1;
}
if ( !PerformanceCounterCategory::CounterExists(
counterName, objectName) )
{
Console::WriteLine("Counter {0} does not exist", counterName);
return -1;
}
TimerObject::m_instanceName = instanceName;
TimerObject::m_theCounter = gcnew PerformanceCounter(
objectName, counterName, instanceName);
System::Timers::Timer^ aTimer = gcnew System::Timers::Timer();
aTimer->Elapsed += gcnew ElapsedEventHandler(&TimerObject::OnTimer);
aTimer->Interval = 1000;
aTimer->Enabled = true;
aTimer->AutoReset = true;
Console::WriteLine("reporting CPU usage for the next 10 seconds");
Thread::Sleep(10000);
return 0;
}
Načtení textu ze schránky
Následující příklad kódu používá GetDataObject členské funkce k vrácení ukazatele na IDataObject rozhraní. Toto rozhraní se pak dá dotazovat na formát dat a použít k načtení skutečných dat.
Příklad
// read_clipboard.cpp
// compile with: /clr
#using <system.dll>
#using <system.Drawing.dll>
#using <system.windows.forms.dll>
using namespace System;
using namespace System::Windows::Forms;
[STAThread] int main( )
{
IDataObject^ data = Clipboard::GetDataObject( );
if (data)
{
if (data->GetDataPresent(DataFormats::Text))
{
String^ text = static_cast<String^>
(data->GetData(DataFormats::Text));
Console::WriteLine(text);
}
else
Console::WriteLine("Nontext data is in the Clipboard.");
}
else
{
Console::WriteLine("No data was found in the Clipboard.");
}
return 0;
}
Načtení aktuálního uživatelského jména
Následující příklad kódu ukazuje načtení aktuálního uživatelského jména (jméno uživatele přihlášeného k systému Windows). Název je uložen v řetězci UserName , který je definován v Environment oboru názvů.
Příklad
// username.cpp
// compile with: /clr
using namespace System;
int main()
{
Console::WriteLine("\nCurrent user: {0}", Environment::UserName);
return 0;
}
Načtení verze rozhraní .NET Framework
Následující příklad kódu ukazuje, jak určit verzi aktuálně nainstalované rozhraní .NET Framework s Version vlastností, což je ukazatel na Version objekt, který obsahuje informace o verzi.
Příklad
// dotnet_ver.cpp
// compile with: /clr
using namespace System;
int main()
{
Version^ version = Environment::Version;
if (version)
{
int build = version->Build;
int major = version->Major;
int minor = version->Minor;
int revision = Environment::Version->Revision;
Console::Write(".NET Framework version: ");
Console::WriteLine("{0}.{1}.{2}.{3}",
build, major, minor, revision);
}
return 0;
}
Načtení názvu místního počítače
Následující příklad kódu ukazuje načtení názvu místního počítače (název počítače, jak se zobrazuje v síti). Můžete toho dosáhnout získáním MachineName řetězce, který je definován v Environment oboru názvů.
Příklad
// machine_name.cpp
// compile with: /clr
using namespace System;
int main()
{
Console::WriteLine("\nMachineName: {0}", Environment::MachineName);
return 0;
}
Načtení verze Systému Windows
Následující příklad kódu ukazuje, jak načíst informace o platformě a verzi aktuálního operačního systému. Tyto informace jsou uloženy ve System.Environment.OSVersion vlastnosti a skládá se z výčtu, který popisuje verzi Systému Windows obecně a Version objekt, který obsahuje přesné sestavení operačního systému.
Příklad
// os_ver.cpp
// compile with: /clr
using namespace System;
int main()
{
OperatingSystem^ osv = Environment::OSVersion;
PlatformID id = osv->Platform;
Console::Write("Operating system: ");
if (id == PlatformID::Win32NT)
Console::WriteLine("Win32NT");
else if (id == PlatformID::Win32S)
Console::WriteLine("Win32S");
else if (id == PlatformID::Win32Windows)
Console::WriteLine("Win32Windows");
else
Console::WriteLine("WinCE");
Version^ version = osv->Version;
if (version)
{
int build = version->Build;
int major = version->Major;
int minor = version->Minor;
int revision = Environment::Version->Revision;
Console::Write("OS Version: ");
Console::WriteLine("{0}.{1}.{2}.{3}",
build, major, minor, revision);
}
return 0;
}
Načtení času uplynulého od spuštění
Následující příklad kódu ukazuje, jak určit počet záškrtů nebo počet milisekund, které uplynuly od spuštění Systému Windows. Tato hodnota je uložena v členu System.Environment.TickCount a protože se jedná o 32bitovou hodnotu, obnoví se přibližně každých 24,9 dnů na nulu.
Příklad
// startup_time.cpp
// compile with: /clr
using namespace System;
int main( )
{
Int32 tc = Environment::TickCount;
Int32 seconds = tc / 1000;
Int32 minutes = seconds / 60;
float hours = static_cast<float>(minutes) / 60;
float days = hours / 24;
Console::WriteLine("Milliseconds since startup: {0}", tc);
Console::WriteLine("Seconds since startup: {0}", seconds);
Console::WriteLine("Minutes since startup: {0}", minutes);
Console::WriteLine("Hours since startup: {0}", hours);
Console::WriteLine("Days since startup: {0}", days);
return 0;
}
Uložení textu do schránky
Následující příklad kódu používá Clipboard objekt definovaný v System.Windows.Forms oboru názvů k uložení řetězce. Tento objekt poskytuje dvě členské funkce: SetDataObject a GetDataObject. Data jsou uložena ve schránce odesláním libovolného objektu odvozeného z Object do SetDataObject.
Příklad
// store_clipboard.cpp
// compile with: /clr
#using <System.dll>
#using <System.Drawing.dll>
#using <System.Windows.Forms.dll>
using namespace System;
using namespace System::Windows::Forms;
[STAThread] int main()
{
String^ str = "This text is copied into the Clipboard.";
// Use 'true' as the second argument if
// the data is to remain in the clipboard
// after the program terminates.
Clipboard::SetDataObject(str, true);
Console::WriteLine("Added text to the Clipboard.");
return 0;
}
Zápis dat do registru Windows
Následující příklad kódu používá CurrentUser klíč k vytvoření zapisovatelné instance RegistryKey třídy odpovídající softwarovému klíči. Metoda CreateSubKey se pak použije k vytvoření nového klíče a přidání do párů klíč/hodnota.
Příklad
// registry_write.cpp
// compile with: /clr
using namespace System;
using namespace Microsoft::Win32;
int main()
{
// The second OpenSubKey argument indicates that
// the subkey should be writable.
RegistryKey^ rk;
rk = Registry::CurrentUser->OpenSubKey("Software", true);
if (!rk)
{
Console::WriteLine("Failed to open CurrentUser/Software key");
return -1;
}
RegistryKey^ nk = rk->CreateSubKey("NewRegKey");
if (!nk)
{
Console::WriteLine("Failed to create 'NewRegKey'");
return -1;
}
String^ newValue = "NewValue";
try
{
nk->SetValue("NewKey", newValue);
nk->SetValue("NewKey2", 44);
}
catch (Exception^)
{
Console::WriteLine("Failed to set new values in 'NewRegKey'");
return -1;
}
Console::WriteLine("New key created.");
Console::Write("Use REGEDIT.EXE to verify ");
Console::WriteLine("'CURRENTUSER/Software/NewRegKey'\n");
return 0;
}
Poznámky
Rozhraní .NET Framework můžete použít pro přístup k registru s třídami Registry , RegistryKey které jsou definovány v Microsoft.Win32 oboru názvů. Třída Registry je kontejner pro statické instance RegistryKey třídy. Každá instance představuje uzel kořenového registru. Instance jsou ClassesRoot, , CurrentConfigCurrentUser, LocalMachinea Users.