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
с именем исполняемого файла в первом параметре. В методе для отправки файла также используется второй параметр, в котором указываем имя отсылаемого файла.
Названия специальных файлов
В Windows существует ряд специальных папок, в которых содержатся файлы определенной категории. Например, в папке Избранное содержатся ссылки на любимые сайты пользователя.
Проблема заключается в том, что в локализованных версиях Windows эти папки зачастую имеют разные названия. Так, в американской версии Windows упомянутая папка имеет название Favorites
. И если ваша программа ссылается на файл, находящийся в специальной папке, то необходимо точно узнать, как называется эта папка на конкретном устройстве. Код проверки приведен в листинге 13.9.
// Константы
/// <summary>
/// Папка, содержащая файлы и папки, которые появляются на
/// экране Сегодня
/// </summary>
const int CSIDL_DESKTOPDIRECTORY = 0x0010;
/// <summary>
/// Папка Избранное
/// </summary>
const int CSIDL_FAVORITES = 0x0006;
/// <summary>
/// Папка Мои документы
/// </summary>
const int CSIDL_PERSONAL = 0x0005;
/// <summary>
/// Папка Программы в папке Главное меню
/// (WindowsStart MenuPrograms)
/// </summary>
const int CSIDL_PROGRAMS = 0x0002;
/// <summary>
/// Папка Recent (содержит последние из открывавшихся
/// документов)
/// </summary>
const int CSIDL_RECENT = 0x0008;
/// <summary>
/// Папка Главное меню
/// (WindowsStart Menu)
/// </summary>
const int CSIDL_STARTMENU = 0x000b;
/// <summary>
/// Папка Автозагрузка для программ,
/// которые автоматически загружаются при запуске Windows
/// WindowsStartUp
/// </summary>
const int CSIDL_STARTUP = 0x0007;
/// <summary>
/// Папка, в которой хранятся шаблоны документов
/// </summary>
const int CSIDL_TEMPLATES = 0x0015;
/// <summary>
/// Функция получения имен специальных папок
/// </summary>
[DllImport('Coredll.dll')]
static extern int SHGetSpecialFolderPath
(IntPtr hwndOwner, StringBuilder lpszPath, int nFolder, int fCreate);
const int MAX_PATH = 260;
private void Form1_Load(object sender, EventArgs e) {
// Папка Избранное
StringBuilder strFavorites = new StringBuilder(MAX_PATH);