2016-10-04 4 views
-1

Можно ли определить значок для процесса? К примеру, как:Значок процесса/ProcessStartInfo

startInfo.Icon = 'C:\somepath\icon.ico'; 

Значок должен отображаться на панели задач. Единственный возможный способ (насколько я знаю) для достижения этой цели - это ссылка, но я бы хотел иметь другой вариант, чем динамическое создание ссылки и ее запуск.

+1

Куда бы вы ожидали, что этот значок будет * использован *? –

+0

На панели задач, как и поведение ссылки. – Kerubis

+0

Я считаю, что это делается путем передачи флага 'STARTF_TITLEISLINKNAME' в [' STARTUPINFO'] (https://msdn.microsoft.com/en-us/library/windows/desktop/ms686331 (v = vs.85). aspx) (и, очевидно, передача пути ссылки в элементе заголовка) при вызове 'CreateProcess'. Не отображается в .NET, и у него должен быть путь, поэтому вы также будете говорить о создании расширения пространства имен оболочки, если вы действительно хотите избежать создания физического файла. Наверное, больше усилий, чем того стоит. –

ответ

0

Значок связан с исполняемым файлом этого процесса, поэтому вы не можете его изменить. В качестве единственного временного решения вы можете создать ярлык для исполняемого файла и установить пользовательский значок для ярлыка. Затем вы можете передать путь к файлу ярлыков в Process.Start (вам нужно добавить ссылку COM на Объектная модель хоста Windows Script через Проект> Добавить ссылку> COM> Объектная модель хоста Windows Script для этого:

using System; 
using System.Diagnostics; 
using IWshRuntimeLibrary; 

class Program 
{ 
    private static void Main(string[] args) 
    { 
     string shortcutAddress = Environment.GetFolderPath(
      Environment.SpecialFolder.Desktop) + @"\MyProcess.lnk"; 

     var shell = new WshShell(); 
     var shortcut = (IWshShortcut)shell.CreateShortcut(shortcutAddress); 
     shortcut.Description = "New shortcut for a Notepad"; 
     shortcut.Hotkey = "Ctrl+Shift+N"; 
     shortcut.TargetPath = Environment.GetFolderPath(
      Environment.SpecialFolder.System) + @"\notepad.exe"; 
     shortcut.IconLocation = Environment.GetFolderPath(
      Environment.SpecialFolder.System) + @"\calc.exe"; 
     shortcut.Save(); 

     Process.Start(shortcutAddress); 
    } 
}