Запуск других приложений

Запуск других приложений

Иногда требуется запустить из своей программы другое приложение. В этом случае можно призвать на помощь функцию 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 с именем исполняемого файла в первом параметре. В методе для отправки файла также используется второй параметр, в котором указываем имя отсылаемого файла.