IntPtr h = FindWindow("HHTaskBar", "");
ShowWindow(h, SW_HIDE);
}
///
/// Показывает панель задач
///
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 приведен код примера, который может запустить калькулятор, календарь и даже послать файл через инфракрасное соединение мобильному телефону. Для запуска всех этих функций на форме надо разместить всего три кнопки.
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
с именем исполняемого файла в первом параметре. В методе для отправки файла также используется второй параметр, в котором указываем имя отсылаемого файла.
Названия специальных файлов
В Windows существует ряд специальных папок, в которых содержатся файлы определенной категории. Например, в папке Избранное содержатся ссылки на любимые сайты пользователя.
Проблема заключается в том, что в локализованных версиях Windows эти папки зачастую имеют разные названия. Так, в американской версии Windows упомянутая папка имеет название Favorites
. И если ваша программа ссылается на файл, находящийся в специальной папке, то необходимо точно узнать, как называется эта папка на конкретном устройстве. Код проверки приведен в листинге 13.9.
// Константы
///
/// Папка, содержащая файлы и папки, которые появляются на
/// экране Сегодня
///
const int CSIDL_DESKTOPDIRECTORY = 0x0010;
///
/// Папка Избранное
///
const int CSIDL_FAVORITES = 0x0006;
///
/// Папка \Мои документы
///
const int CSIDL_PERSONAL = 0x0005;
///
/// Папка Программы в папке Главное меню