Как отправить команду завершения работы через CMD Prompt в Windows - PullRequest
16 голосов
/ 26 июля 2011

Я сейчас работаю разработчиком программного обеспечения и использую кучу инструментов, поэтому мне нужно закрыть их все, когда закончите работу.Итак, что я сделал, я создал командный файл с командой tskill и списком программ, которые я использую, например,

tskill skype
tskill outlook
tskill devenv
tskill explorer
start explorer

Существует одна проблема с этим, изменения в инструментах не сохраняются при остановке процесса, дляПример последнего проекта, открытые файлы, визуальные позиции элементов управления и все остальное.Эти настройки сохраняются только тогда, когда вы закрываете свой инструмент, но на каждый из них действительно требуется много времени.

Итак, мой вопрос: Могу ли я отправить команду отключения в программное обеспечение вместо процесса уничтожения?

Примечание: Мне нужна команда для CMD, а не программирование решения, как я уже упоминал выше, мне нужна команда типа "tskill skype", которая убивает процесс skype.Windows может отправить эту команду, потому что когда вы закрываете свои окна, Windows отправляет команду выключения всем работающим программам.Но если не удается отключиться, Windows завершает процесс, как я делаю это выше.

Заранее спасибо.

Ответы [ 3 ]

19 голосов
/ 28 июля 2011

Проверено на Windows 7:

taskkill /IM notepad.exe

Обратите внимание, что вы должны указать расширение .exe. Я предполагаю, что это делает то, что вам нужно: он не просто убивает процесс, но посылает сигнал «завершение работы», который отображает «Сохранить несохраненные изменения?» диалог в Блокноте и других редакторах.

1 голос
/ 28 июля 2011

Если ваше приложение поддерживает стандартные сообщения Windows для него, вы можете использовать rmtool, чтобы обмануть приложение и сообщить ему, что компьютер выключается. См. Как имитировать отключение Windows для отладки?

Для написания сценария вам нужно будет найти PID процесса раньше (pslist от sysinternals даст информацию, но вам нужно будет проанализировать результат).

И если они не выключаются полностью, просто делают так, как делают окна, когда оно закрывается: используйте rmtool, чтобы попросить всех выйти красиво, тогда как последние 30 с убивают всех, кто еще стоит (Как для внешнего вида, так и для devenv это может быть даже немного коротким ...).

0 голосов
/ 27 июля 2011

Нет способа отправить команду сохранения до завершения процесса (по крайней мере, не с помощью пакетного файла), но вы можете сделать это вручную из C # (консольное приложение?).

using System.Diagnostics;
using System.Runtime.InteropServices;

class Program
{
[DllImport("user32.dll")]
public static extern int SetForegroundWindow(IntPtr hWnd);

static void Main(string[] args)
{
  var ps = Process.GetProcessesByName("devenv");
  foreach (var p in ps)
  {
    if (!p.MainWindowTitle.Contains("api"))
    {
      SetForegroundWindow(p.MainWindowHandle);
      System.Windows.Forms.SendKeys.SendWait("^+S"); //simulates CTRL + SHIFT + S

      p.CloseMainWindow();
    }
  }
}

Я использовал ярлык, определенный VS для File-> Save All

Существует также более сложный способ использования Windows Api, но вы не хотите идти по этому пути для простого приложения :)

Примечание. Необходимо иметь ссылку на System.Windows.Forms

.
...