Π§ΠΈΡ‚Π°ΠΉΡ‚Π΅ ΠΊΠ½ΠΈΠ³ΠΈ ΠΎΠ½Π»Π°ΠΉΠ½ Π½Π° Bookidrom.ru! БСсплатныС ΠΊΠ½ΠΈΠ³ΠΈ Π² ΠΎΠ΄Π½ΠΎΠΌ ΠΊΠ»ΠΈΠΊΠ΅

Π§ΠΈΡ‚Π°Ρ‚ΡŒ ΠΎΠ½Π»Π°ΠΉΠ½ Β«ΠŸΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ КПК ΠΈ смартфонов Π½Π° .NET Compact FrameworkΒ». Π‘Ρ‚Ρ€Π°Π½ΠΈΡ†Π° 46

Автор АлСксандр Климов

Для ΠΏΠΎΠ²ΠΎΡ€ΠΎΡ‚Π° экрана, Π° Ρ‚Π°ΠΊΠΆΠ΅ для ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΊΠΈ возмоТности Ρ‚Π°ΠΊΠΎΠ³ΠΎ ΠΏΠΎΠ²ΠΎΡ€ΠΎΡ‚Π° ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ функция API ChangeDisplaySettingsEx. Данная функция ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ структуру DEVMODE. Π’ ΠΏΠ΅Ρ€Π²ΡƒΡŽ ΠΎΡ‡Π΅Ρ€Π΅Π΄ΡŒ, Π² этой структурС нас интСрСсуСт ΠΏΠΎΠ»Π΅ Fields, Π² ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΌ хранится Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ DisplayQueryOrientation. Π­Ρ‚ΠΎΡ‚ Ρ„Π»Π°Π³ ΠΎΡ‚Π²Π΅Ρ‡Π°Π΅Ρ‚ Π·Π° ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΊΡƒ смСны ΠΎΡ€ΠΈΠ΅Π½Ρ‚Π°Ρ†ΠΈΠΈ экрана ΠΈ ΠΏΠ΅Ρ€Π΅Π΄Π°Π΅Ρ‚ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ Π² ΠΏΠΎΠ»Π΅ lpDevMode.dmDisplayOrientation. НапримСр, Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ DMO_0 Π³ΠΎΠ²ΠΎΡ€ΠΈΡ‚ ΠΎ Ρ‚ΠΎΠΌ, Ρ‡Ρ‚ΠΎ ΠΏΠΎΠ²ΠΎΡ€ΠΎΡ‚ экрана Π½Π΅ поддСрТиваСтся.

Π’ листингС 13.5 ΠΏΡ€ΠΈΠ²Π΅Π΄Π΅Π½ ΠΊΠΎΠ΄, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ провСряСт, поддСрТиваСтся Π»ΠΈ систСмой ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠ΅ ΠΎΡ€ΠΈΠ΅Π½Ρ‚Π°Ρ†ΠΈΠΈ, ΠΈ Π² случаС ΠΏΠΎΠ»ΠΎΠΆΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΠ³ΠΎ ΠΎΡ‚Π²Π΅Ρ‚Π° ΠΏΠΎΠ²ΠΎΡ€Π°Ρ‡ΠΈΠ²Π°Π΅Ρ‚ экран Π½Π° 90Β°.

Листинг 13.5

// Π€Π»Π°Π³, ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΡΡŽΡ‰ΠΈΠΉ ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΊΡƒ ΠΏΠΎΠ²ΠΎΡ€ΠΎΡ‚Π° экрана

private static Int32 DisplayQueryOrientation = 0x01000000;


private static Int32 CDS_TEST = 2;


// Π·Π°ΠΏΠΎΠΌΠΈΠ½Π°Π΅ΠΌ настройки экрана

ScreenOrientation initialOrientation = SystemSettings.ScreenOrientation;

[DllImport("coredll.dll", SetLastError = true)]

private extern static Int32 ChangeDisplaySettingsEx(

 String deviceName, ref DeviceMode deviceMode, IntPtr hwnd,

 Int32 flags, IntPtr param);


struct DeviceMode {

 [MarshalAs(UnmanagedType.ByValTStr, SizeConst - 32)]

 public String DeviceName;

 public Int16 SpecVersion;

 public Int16 DriverVersion;

 public Int16 Size;

 public Int16 DriverExtra;

 public Int32 Fields;

 public Int16 Orientation;

 public Int16 PaperSize;

 public Int16 PaperLength;

 public Int16 PaperWidth;

 public Int16 Scale;

 public Int16 Copies;

 public Int16 DefaultSource;

 public Int16 PrintQuality;

 public Int16 Color;

 public Int16 Duplex;

 public Int16 Yresolution;

 public Int16 TTOption;

 public Int16 Collate;

 [MarshalAs(UnmanagedType.ByValTStr, SizeConst = 32)]

 public String FormName;

 public Int16 LogPixels;

 public Int32 BitsPerPel;

 public Int32 PelsWidth;

 public Int32 PelsHeight;

 public Int32 DisplayFlags;

 public Int32 DisplayFrequency;

 public Int32 DisplayOrientation;

}


private void butCheckRotate_Click(object sender, EventArgs e) {

 // ΠΏΠΎΠ΄Π³ΠΎΡ‚Π°Π²Π»ΠΈΠ²Π°Π΅ΠΌ структуру DeviceMode

 DeviceMode devMode = new DeviceMode();

 devMode.Size = (Int16)Marshal.SizeOf(devMode);

 devMode.Fields = DisplayQueryOrientation;

 // ΠŸΡ€ΠΎΠ²Π΅Ρ€ΡΠ΅ΠΌ, ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΈΠ²Π°Π΅Ρ‚ Π»ΠΈ систСма ΠΏΠΎΠ²ΠΎΡ€ΠΎΡ‚ экрана

 Int32 result =

  ChangeDisplaySettingsEx(null, ref devMode, IntPtr.Zero, CDS_TEST,

   IntPtr.Zero);

 if (result == 0) {

  // Если Π²Ρ‹Π·ΠΎΠ² Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ ΠΏΡ€ΠΎΡˆΠ΅Π» ΡƒΡΠΏΠ΅ΡˆΠ½ΠΎ.

  // Ρ‚ΠΎ провСряСм ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΊΡƒ ΠΏΠΎΠ²ΠΎΡ€ΠΎΡ‚Π° экрана

  // Если ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ DisplayOrientation ΠΈΠΌΠ΅Π΅Ρ‚ Π½Π΅Π½ΡƒΠ»Π΅Π²ΠΎΠ΅

  // Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ Ρ‚ΠΎ ΠΏΠΎΠ²ΠΎΡ€ΠΎΡ‚ экрана Π²ΠΎΠ·ΠΌΠΎΠΆΠ΅Π½

  if (devMode.DisplayOrientation != 0) {

   MessageBox.Show("ΠŸΠΎΠ²ΠΎΡ€ΠΎΡ‚ экрана поддСрТиваСтся");

  }

 } else {

  MessageBox.Show("ΠŸΠΎΠ²ΠΎΡ€ΠΎΡ‚ экрана Π½Π΅ поддСрТиваСтся");

 }

}


private void butRot90_Click(object sender, EventArgs e) {

 SystemSettings.ScreenOrientation = ScreenOrientation.Angle90;

}


private void butRestore_Click(object sender, EventArgs e) {

 if (SystemSettings.ScreenOrientation != initialOrientation) {

  try {

   SystemSettings.ScreenOrientation = initialOrientation;

  } catch (Exception) {

   // Unable to change the orientation back

   // to the original configuration.

   MessageBox.Show("This sample was unable to set the " +

    "orientation back to the original state.");

  }

 }

}

ΠŸΡ€ΡΡ‡Π΅ΠΌ ΠΊΠ½ΠΎΠΏΠΊΡƒ Start

Ѐункция SHFullScreen позволяСт ΠΏΡ€ΡΡ‚Π°Ρ‚ΡŒ ΠΈ ΠΏΠΎΠΊΠ°Π·Ρ‹Π²Π°Ρ‚ΡŒ ΠΊΠ½ΠΎΠΏΠΊΡƒ Start ΠΈ ΠΏΠΈΠΊΡ‚ΠΎΠ³Ρ€Π°ΠΌΠΌΡƒ Π²ΠΈΡ€Ρ‚ΡƒΠ°Π»ΡŒΠ½ΠΎΠΉ ΠΊΠ»Π°Π²ΠΈΠ°Ρ‚ΡƒΡ€Ρ‹ SIP. Π‘ΠΎΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²ΡƒΡŽΡ‰ΠΈΠΉ ΠΊΠΎΠ΄ ΠΏΡ€ΠΈΠ²Π΅Π΄Π΅Π½ Π² листингС 13.6.

Листинг 13.6

/// <summary>

/// Ѐункция ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ для измСнСния Π²ΠΈΠ΄Π° экрана.

/// Π’Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ ΠΌΠΎΠ΄ΠΈΡ„ΠΈΡ†ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ панСль Π·Π°Π΄Π°Ρ‡, панСль Π²Π²ΠΎΠ΄Π°, Π·Π½Π°Ρ‡ΠΎΠΊ

/// ΠŸΡƒΡΠΊ

/// </summary>

/// <param name="hwndRequester">ДСскриптор ΠΎΠΊΠ½Π°</param>

/// <param name="dwState">ΠžΠΏΡ€Π΅Π΄Π΅Π»ΡΠ΅Ρ‚ состояниС ΠΎΠΊΠ½Π°</param>

/// <returns>B ΡƒΡΠΏΠ΅ΡˆΠ½ΠΎΠΌ случаС возвращаСтся True, ΠΈΠ½Π°Ρ‡Π΅ -

/// False</returns>

[DllImport("aygshell.dll")]

static extern uint SHFullScreen(IntPtr hwndRequester, uint dwState);


const uint SHFS_SHOWTASKBAR = 0x0001;

const uint SHFS_HIDETASKBAR = 0x0002;

const uint SHFS_SHOWSIPBUTTON = 0x0004;

const uint SHFS_HIDESIPBUTTON = 0x0008;

const uint SHFS_SHOWSTARTICON = 0x0010;

const uint SHFS_HIDESTARTICON = 0x0020;


private void butHideStart_Click(object sender, EventArgs e) {

 IntPtr hwnd = this.Handle;

 //прячСм ΠΊΠ½ΠΎΠΏΠΊΡƒ Start

 SHFullScreen(hwnd, SHFS_HIDESTARTICON);

 //прячСм SIP

 //SHFullScreen(hwnd, SHFS_HIDESIPBUTTON);

}


private void butShowStart_Click(object sender, EventArgs e) {

 //ΠΏΠΎΠΊΠ°Π·Ρ‹Π²Π°Π΅ΠΌ ΠΊΠ½ΠΎΠΏΠΊΡƒ Start

 IntPtr hwnd = this.Handle;

 SHFullScreen(hwnd, SHFS_SHOWSTARTICON);

 //ΠΏΠΎΠΊΠ°Π·Ρ‹Π²Π°Π΅ΠΌ SIP

 //SHFullScreen(hwnd, SHFS_SHOWSIPBUTTON);

}

Π’ ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π΅ ΠΏΠΎΠΊΠ°Π·Π°Π½ΠΎ, ΠΊΠ°ΠΊ ΠΏΡ€ΡΡ‚Π°Ρ‚ΡŒ ΠΊΠ½ΠΎΠΏΠΊΡƒ Start. Если Π½ΡƒΠΆΠ½ΠΎ ΡΠΏΡ€ΡΡ‚Π°Ρ‚ΡŒ ΠΏΠΈΠΊΡ‚ΠΎΠ³Ρ€Π°ΠΌΠΌΡƒ SIP, Ρ‚ΠΎ Π½Π°Π΄ΠΎ ΡƒΠ±Ρ€Π°Ρ‚ΡŒ ΠΊΠΎΠΌΠΌΠ΅Π½Ρ‚Π°Ρ€ΠΈΠΈ ΠΏΡ€ΠΈ Π²Ρ‚ΠΎΡ€ΠΎΠΌ Π²Ρ‹Π·ΠΎΠ²Π΅ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ. На рис. 13.1 ΠΏΠΎΠΊΠ°Π·Π°Π½ внСшний Π²ΠΈΠ΄ экрана со спрятанной ΠΊΠ½ΠΎΠΏΠΊΠΎΠΉ Start.

Рис. 13.1. Π‘ΠΊΡ€Ρ‹Ρ‚ΠΈΠ΅ ΠΊΠ½ΠΎΠΏΠΊΠΈ Start

ПанСль Π·Π°Π΄Π°Ρ‡

ΠžΡ‡Π΅Π½ΡŒ часто программисты Π² качСствС ΡˆΡƒΡ‚ΠΊΠΈ ΡΠΎΠ·Π΄Π°ΡŽΡ‚ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ прячут ΠΏΡ€ΠΈΠ²Ρ‹Ρ‡Π½Ρ‹Π΅ для ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»Ρ элСмСнты интСрфСйса. Π’ ΠΏΡ€Π΅Π΄Ρ‹Π΄ΡƒΡ‰Π΅ΠΌ ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π΅ Π±Ρ‹Π»ΠΎ ΠΏΠΎΠΊΠ°Π·Π°Π½ΠΎ, ΠΊΠ°ΠΊ ΠΌΠΎΠΆΠ½ΠΎ ΡΠΊΡ€Ρ‹Ρ‚ΡŒ ΠΊΠ½ΠΎΠΏΠΊΡƒ Start. Π’Π΅ΠΏΠ΅Ρ€ΡŒ Π½ΡƒΠΆΠ½ΠΎ Ρ€Π°ΡΡΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ ΠΏΡ€ΠΈΠΌΠ΅Ρ€ Ρ€Π°Π±ΠΎΡ‚Ρ‹ с панСлью Π·Π°Π΄Π°Ρ‡.

Для создания тСстового прилоТСния Π½Π° Ρ„ΠΎΡ€ΠΌΠ΅ Π½Π°Π΄ΠΎ Ρ€Π°Π·ΠΌΠ΅ΡΡ‚ΠΈΡ‚ΡŒ Π΄Π²Π΅ ΠΊΠ½ΠΎΠΏΠΊΠΈ. Одна ΠΈΠ· Π½ΠΈΡ… Π±ΡƒΠ΄Π΅Ρ‚ ΡΠΊΡ€Ρ‹Π²Π°Ρ‚ΡŒ панСль Π·Π°Π΄Π°Ρ‡, Π° вторая β€” ΠΏΠΎΠΊΠ°Π·Ρ‹Π²Π°Ρ‚ΡŒ Π΅Π΅. Π‘ΠΎΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²ΡƒΡŽΡ‰ΠΈΠΉ ΠΊΠΎΠ΄ ΠΏΡ€ΠΈΠ²Π΅Π΄Π΅Π½ Π² листингС 13.7.

Листинг 13.7

/// <summary>

/// Π‘ΠΊΡ€Ρ‹Π²Π°Π΅Ρ‚ ΠΎΠ΄Π½ΠΎ ΠΎΠΊΠ½ΠΎ ΠΈ Π°ΠΊΡ‚ΠΈΠ²ΠΈΡ€ΡƒΠ΅Ρ‚ Π΄Ρ€ΡƒΠ³ΠΎΠ΅

/// </summary>

private const int SW_HIDE = 0;


/// <summary>

/// АктивируСт ΠΎΠΊΠ½ΠΎ

/// </summary>

private const int SW_SHOW = 5;


[DllImport("coredll.dll")]

private static extern IntPtr FindWindow(string ClassName, string WindowName);


[DllImport("coredll.dll")]

private static extern bool ShowWindow(IntPtr hwnd, int nCmdShow);


/// <summary>

/// ΠŸΡ€ΡΡ‡Π΅ΠΌ панСль Π·Π°Π΄Π°Ρ‡, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒ Π½Π΅ ΠΌΠΎΠ³

/// Π½Π°ΠΆΠ°Ρ‚ΡŒ ΠΊΠ½ΠΎΠΏΠΊΡƒ Start

/// </summary>

public static void HideTaskbar() {

 IntPtr h = FindWindow("HHTaskBar", "");

 ShowWindow(h, SW_HIDE);

}


/// <summary>

/// ΠŸΠΎΠΊΠ°Π·Ρ‹Π²Π°Π΅Ρ‚ панСль Π·Π°Π΄Π°Ρ‡

/// </summary>

public static void ShowTaskBar() {

 IntPtr h = FindWindow("HHTaskBar", "");

 ShowWindow(h, SW_SHOW);

}


private void butHideTaskbar_Click(object sender, EventArgs e) {

 HideTaskbar();

}


private void butShowTaskbar_Click(object sender, EventArgs e) {

 ShowTaskBar();

}

На самом Π΄Π΅Π»Π΅ с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΉ FindWindow ΠΈ ShowWindow ΠΌΠΎΠΆΠ½ΠΎ ΠΏΠΎΠΊΠ°Π·Ρ‹Π²Π°Ρ‚ΡŒ ΠΈ ΡΠΊΡ€Ρ‹Π²Π°Ρ‚ΡŒ Π½Π΅ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ панСль Π·Π°Π΄Π°Ρ‡, Π½ΠΎ ΠΈ ΠΎΠΊΠ½Π° Π΄Ρ€ΡƒΠ³ΠΈΡ… ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΉ.

Запуск Π΄Ρ€ΡƒΠ³ΠΈΡ… ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΉ

Иногда трСбуСтся Π·Π°ΠΏΡƒΡΡ‚ΠΈΡ‚ΡŒ ΠΈΠ· своСй ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹ Π΄Ρ€ΡƒΠ³ΠΎΠ΅ ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅. Π’ этом случаС ΠΌΠΎΠΆΠ½ΠΎ ΠΏΡ€ΠΈΠ·Π²Π°Ρ‚ΡŒ Π½Π° ΠΏΠΎΠΌΠΎΡ‰ΡŒ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ API CreateProcess. Π’ листингС 13.8 ΠΏΡ€ΠΈΠ²Π΅Π΄Π΅Π½ ΠΊΠΎΠ΄ ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π°, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ ΠΌΠΎΠΆΠ΅Ρ‚ Π·Π°ΠΏΡƒΡΡ‚ΠΈΡ‚ΡŒ ΠΊΠ°Π»ΡŒΠΊΡƒΠ»ΡΡ‚ΠΎΡ€, ΠΊΠ°Π»Π΅Π½Π΄Π°Ρ€ΡŒ ΠΈ Π΄Π°ΠΆΠ΅ ΠΏΠΎΡΠ»Π°Ρ‚ΡŒ Ρ„Π°ΠΉΠ» Ρ‡Π΅Ρ€Π΅Π· инфракрасноС соСдинСниС ΠΌΠΎΠ±ΠΈΠ»ΡŒΠ½ΠΎΠΌΡƒ Ρ‚Π΅Π»Π΅Ρ„ΠΎΠ½Ρƒ. Для запуска всСх этих Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΉ Π½Π° Ρ„ΠΎΡ€ΠΌΠ΅ Π½Π°Π΄ΠΎ Ρ€Π°Π·ΠΌΠ΅ΡΡ‚ΠΈΡ‚ΡŒ всСго Ρ‚Ρ€ΠΈ ΠΊΠ½ΠΎΠΏΠΊΠΈ.

Листинг 13.8

public class ProcessInfo {

 public IntPtr hProcess;

 public IntPtr hThread;

 public Int32 ProcessId;

 public Int32 ThreadId;

}


[DllImport("CoreDll.DLL", SetLastError = true)]

private extern static int CreateProcess(

 String imageName, String cmdLine, IntPtr lpProcessAttributes,

 IntPtr lpThreadAttributes, Int32 boolInheritHandles,

 Int32 dwCreationFlags, IntPtr lpEnvironment, IntPtr lpszCurrentDir,

 byte[] si, ProcessInfo pi);


private void butCalc_Click(object sender, EventArgs e) {

 //ЗапускаСм ΠΊΠ°Π»ΡŒΠΊΡƒΠ»ΡΡ‚ΠΎΡ€

 ProcessInfo pi = new ProcessInfo();

 CreateProcess(

  "calc.exe", "", IntPtr.Zero, IntPtr.Zero, 0, 0, IntPtr.Zero, IntPtr.Zero,

  new Byte[128], pi);

}


private void butCalendar_Click(object sender, EventArgs e) {

 //ЗапускаСм ΠΊΠ°Π»Π΅Π½Π΄Π°Ρ€ΡŒ

 ProcessInfo pi = new ProcessInfo();

 CreateProcess(

  "calendar.exe", "", IntPtr.Zero, IntPtr.Zero, 0, 0, IntPtr.Zero,

  IntPtr.Zero, new Byte[128], pi);

}


private void butInfra_Click(object sender, EventArgs e) {

 //ΠŸΠΎΡΡ‹Π»Π°Π΅ΠΌ Ρ„Π°ΠΉΠ» Ρ‡Π΅Ρ€Π΅Π· инфракрасноС соСдинСниС

 ProcessInfo pi = new ProcessInfo();

 CreateProcess(

  "Beam.exe", "\\windows\\Alarm1.wav", IntPtr.Zero, IntPtr.Zero, 0, 0,

  IntPtr.Zero, IntPtr.Zero, new Byte[128], pi);

}

ΠŸΡ€ΠΈΠ²Π΅Π΄Π΅Π½Π½Ρ‹ΠΉ ΠΊΠΎΠ΄ достаточно прост. НуТно Π²Ρ‹Π·Π²Π°Ρ‚ΡŒ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ CreateProcess с ΠΈΠΌΠ΅Π½Π΅ΠΌ исполняСмого Ρ„Π°ΠΉΠ»Π° Π² ΠΏΠ΅Ρ€Π²ΠΎΠΌ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Π΅. Π’ ΠΌΠ΅Ρ‚ΠΎΠ΄Π΅ для ΠΎΡ‚ΠΏΡ€Π°Π²ΠΊΠΈ Ρ„Π°ΠΉΠ»Π° Ρ‚Π°ΠΊΠΆΠ΅ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ Π²Ρ‚ΠΎΡ€ΠΎΠΉ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€, Π² ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΌ ΡƒΠΊΠ°Π·Ρ‹Π²Π°Π΅ΠΌ имя отсылаСмого Ρ„Π°ΠΉΠ»Π°.