2016-10-04 57 views
-1

是否可以爲進程定義圖標? 例如:Process/ProcessStartInfo圖標

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

該圖標應顯示在任務欄中。 爲了達到這個目的,唯一可行的方法就是建立一個鏈接,但我希望有一個其他選擇,而不是動態創建鏈接並啓動它。

+1

你期望這個圖標被使用*在哪裏? –

+0

在任務欄中,與鏈接行爲相同。 – Kerubis

+0

我相信這是通過在[STARTUPINFO'](https://msdn.microsoft.com/en-us/library/windows/desktop/ms686331(v = vs.85))中傳遞'STARTF_TITLEISLINKNAME'標記完成的。 aspx)(顯然在標題成員中傳遞鏈接路徑)在調用'CreateProcess'時。沒有在.NET中公開,並且它需要一個路徑,所以如果你真的想避免創建一個物理文件,你還會談論創建一個shell命名空間擴展。可能比它的價值更多的努力。 –

回答

0

該圖標與該進程的可執行文件相關聯,因此您無法對其進行更改。作爲唯一的解決方法,您可以創建可執行文件的快捷方式併爲快捷方式設置自定義圖標。然後,你可以通過路徑快捷方式文件到Process.Start(你需要通過項目的COM引用到Windows腳本宿主對象模型>添加引用> COM> Windows腳本宿主對象模型這個工作):

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); 
    } 
}