我不想更改EXE中顯示在Windows資源管理器中的實際圖標,但只是顯示在控制檯窗口左上角的圖標。我已經在visual studio項目中設置了圖標,並且我在Windows資源管理器中很好地獲得了該圖標,並且該圖標顯示在控制檯窗口中,我只是希望能夠在運行時在控制檯窗口中對其進行更改。我可以說我想放一個顯示有新電子郵件或其他東西的圖標。有沒有辦法在運行時更改控制檯圖標
回答
上Leniel的回答之後,我想做這在C#WinForms應用程序。他貼到這個鏈接是C++ ..基本上這裏是你所需要的代碼,如果你想要做這在C#:
[DllImport("kernel32.dll", SetLastError = true)]
static extern bool SetConsoleIcon(IntPtr hIcon);
,並調用它像這樣:
public static void SetConsoleIcon(System.Drawing.Icon icon)
{
SetConsoleIcon(icon.Handle);
}
我有我的WinForms應用程序,使該顯示控制檯窗口藏漢能力使用ConsoleWindow類。這裏是滿級高清
class ConsoleWindow
{
[DllImport("kernel32.dll", SetLastError = true)]
static extern bool AllocConsole();
[DllImport("kernel32.dll")]
static extern bool AttachConsole(int dwProcessId);
private const int ATTACH_PARENT_PROCESS = -1;
[DllImport("kernel32.dll")]
static extern IntPtr GetConsoleWindow();
[DllImport("user32.dll")]
static extern bool ShowWindow(IntPtr hWnd, int nCmdShow);
[DllImport("user32.dll", SetLastError = true, CharSet = CharSet.Auto)]
static extern bool SetWindowText(IntPtr hwnd, String lpString);
[DllImport("user32.dll")]
static extern IntPtr GetSystemMenu(IntPtr hWnd, bool bRevert);
[DllImport("user32.dll")]
static extern bool EnableMenuItem(IntPtr hMenu, uint uIDEnableItem, uint uEnable);
[DllImport("kernel32.dll", SetLastError = true)]
static extern bool SetConsoleIcon(IntPtr hIcon);
const int SW_HIDE = 0;
const int SW_SHOW = 5;
const int SC_CLOSE = 0xF060;
const int MF_GRAYED = 1;
public static void AttachConsoleWindow()
{
// redirect console output to parent process;
// must be before any calls to Console.WriteLine()
AttachConsole(ATTACH_PARENT_PROCESS);
}
public static void ShowConsoleWindow()
{
var handle = GetConsoleWindow();
if (handle == IntPtr.Zero)
{
AllocConsole();
}
else
{
ShowWindow(handle, SW_SHOW);
}
}
public static void HideConsoleWindow()
{
var handle = GetConsoleWindow();
ShowWindow(handle, SW_HIDE);
}
public static void SetWindowText(string text)
{
var handle = GetConsoleWindow();
SetWindowText(handle, text);
}
public static void DisableCloseButton()
{
var handle = GetConsoleWindow();
var hmenu = GetSystemMenu(handle, false);
EnableMenuItem(hmenu, SC_CLOSE, MF_GRAYED);
}
public static void SetConsoleIcon(System.Drawing.Icon icon)
{
SetConsoleIcon(icon.Handle);
}
}
這是否在Win7上工作?我可以用它來改變Firefox的任務欄中的圖標嗎? – Noitidart 2014-07-04 00:29:33
嗨Noitidart。 呃,是的,我想是的。 你將需要pinvoke更多的Windows API的。 查看EnumDesktopWindows和GetWindowText。 http://www.pinvoke.net/default.aspx/user32/EnumDesktopWindows.html 該頁面上有一些示例代碼甚至可以調用GetWindowText,因此它看起來像所有的繁重工作都已經完成.. 在桌面窗口的每次迭代中,您都可以調用GetWindowText來獲取窗口的標題。 當您找到您感興趣的窗口後,一旦您有窗口句柄,就可以使用它來更改圖標的窗戶。 – 2015-01-24 09:09:20
謝謝@adrian :)我試過這樣做,但Firefox不是控制檯嗎?我是WinAPI的noob,仍然試圖做到這一點:P還是會拼命解決這個問題? – Noitidart 2015-01-24 14:16:14
在社區成員的控制檯功能的MSDN文檔中,there is a comment added討論了一個名爲SetConsoleIcon的未記錄函數。 A功能的quick Google search顯示了一些您可能可以使用的附加信息。
由於意見在Josh的答覆中提到似乎已經消失,這裏是C++代碼來做到這一點:
HMODULE hKernel32 = ::LoadLibrary(_T("kernel32.dll"));
typedef BOOL (_stdcall * SetConsoleIconFunc)(HICON);
SetConsoleIconFunc setConsoleIcon
= (SetConsoleIconFunc)::GetProcAddress(hKernel32, "SetConsoleIcon");
if (setConsoleIcon != NULL)
setConsoleIcon(m_hIcon);
::FreeLibrary(hKernel32);
- 1. 有沒有辦法在運行pygame時,我也可以運行控制檯?
- 2. 有沒有辦法在運行時更改android主題?
- 3. 有沒有辦法在運行時更改GridViewColumn的CellTemplate?
- 4. 有沒有辦法在javascript控制檯中將上下文更改爲iframe?
- 5. 有沒有辦法長時間保存iPad控制檯日誌?
- 6. 單元測試時有沒有辦法激活控制檯?
- 7. 有沒有辦法通過Specman控制檯更改Specman的日誌文件?
- 8. 有沒有辦法將行爲注入csrss.exe並修改/增強Windows控制檯?
- 9. 有沒有辦法強制類在運行時加載
- 10. 有沒有辦法在運行時更改windows phone 7仿真器方向
- 11. 有沒有辦法在運行時動態更改Docker容器的CPU數量?
- 12. 有沒有辦法運行在後臺模式瓶應用
- 13. 有沒有辦法改變anyDensity Manifest設置的運行時間?
- 14. 運行函數時在控制檯中沒有輸出顯示
- 15. 在eclipse中運行Erlang線程時控制檯沒有輸出
- 16. 有沒有辦法在Linux(遠程)控制檯中顯示圖像?
- 17. 有沒有辦法在控制檯程序中獲取圖形對象?
- 18. 有沒有辦法讓更改相關視圖行中的CouchDB
- 19. 有沒有辦法阻止在控制檯中執行Javascript命令?
- 20. 有沒有辦法確定stdout是否指向控制檯?
- 21. cx_Freeze幫助:有沒有辦法讓控制檯打開?
- 22. 有沒有辦法讓c + +控制檯文本變大?
- 23. 有沒有辦法遠程查看CruiseControl.NET的控制檯?
- 24. 有沒有辦法從新帳戶使用Firebase Legacy控制檯
- 25. 有沒有辦法給Chrome控制檯選項卡權限?
- 26. 有沒有辦法從aws web控制檯獲取s3 uri?
- 27. 有沒有辦法清除控制檯的某個部分?
- 28. 有沒有辦法從FXML控制器中獲得舞臺?
- 29. 有沒有辦法讓控制檯忽略某些錯誤?
- 30. 有沒有辦法在Ruby中控制標籤大小?
你倆這兩個答案的工作您? – Josh 2010-06-08 04:35:31