2013-01-09 67 views
0

我有一個程序A.exe引導另一個進程B.exe,將動態命令行參數傳遞給B.exe。默認的Windows 7任務欄任務列表將提供一個選項,以啓動另一個B.exe實例作爲其首選項。例如:http://cl.ly/image/2C1X2g1A2K0k頂部選項將打開命令窗口的另一個實例。自定義Windows 7任務欄「跳轉列表」中的默認任務欄任務

我希望通過Win32/Shell API自定義這個默認任務列表,以便頂層選項實際打開A.exe而不是B.exe。這可能嗎?這也適用於應用程序被「固定」的情況;固定的按鈕應指向並加載A.exe。由於B.exe需要由A.exe確定的動態命令行參數,因此這是一項要求。 B.exe沒有A.exe的知識。

如果這是不可能的,是否有任何其他解決方法(即shell鏈接,快捷方式等)可用於獲得此功能?或者有沒有簡單的方法來完全禁用任務列表?

在此先感謝。如果這個問題不明確,請讓我知道,我會更新說明。

+0

對於固定,您可以使用System.AppUserModel.RelaunchCommand屬性。示例程序[here](http://blogs.msdn.com/b/oldnewthing/archive/2011/06/01/10170113.aspx)。 –

回答

0

解決此問題的一個好方法是使用快捷方式(.lnk)文件,並結合STARTF_TITLEISLINKNAME標誌as explained on the MSDN page。 Windows將使用該快捷方式作爲其任務欄任務項目,以啓動應用程序的新實例(任務列表中的頂級條目)以及應用程序固定到任務欄的時間。

例如,假設B.lnk點B.EXE,我們可以投入A.exe時:

PROCESS_INFORMATION piProcInfo; 
ZeroMemory(&piProcInfo, sizeof(PROCESS_INFORMATION)); 

STARTUPINFO siStartInfo; 
ZeroMemory(&siStartInfo, sizeof(STARTUPINFO)); 
siStartInfo.cb = sizeof(STARTUPINFO); 
siStartInfo.lpTitle = (LPTSTR)L"C:\Path\to\B.lnk"; 
siStartInfo.dwFlags = STARTF_TITLEISLINKNAME; 

CreateProcess(NULL, 
       (LPTSTR)L"C:\Path\to\B.exe", 
       NULL, 
       NULL, 
       TRUE, 
       CREATE_NO_WINDOW, 
       NULL, 
       NULL, 
       &siStartInfo, 
       &piProcInfo); 

希望幫助別人有類似壁龕使用情況。