Есть ли способ, чтобы мое приложение передавало свой значок другим приложениям? - PullRequest
4 голосов
/ 08 февраля 2012

У меня есть приложение WPF, которое запускает другое приложение, и я бы хотел, чтобы мое приложение изменило значок этого второго приложения. Я могу использовать GetWindowText и SetWindowText, чтобы изменить заголовок. Возможно ли это сделать и для Icon?

обновление

У меня нет контроля над вторым приложением.

Ответы [ 2 ]

7 голосов
/ 08 февраля 2012

Чтобы изменить заголовок окна другого приложения:

Определения функций и констант Win32 API:

[DllImport("user32.dll", SetLastError = true, CharSet = CharSet.Auto)]
public static extern bool SetWindowText(IntPtr hwnd, String lpString);

[DllImport("user32.dll")]
public static extern int SendMessage(IntPtr hwnd, int message, int wParam, IntPtr lParam);

private const int WM_SETICON = 0x80;
private const int ICON_SMALL = 0;
private const int ICON_BIG = 1;

Использование:

Process process = Process.Start("notepad");
// If you have just started a process and want to use its main window handle,
// consider using the WaitForInputIdle method to allow the process to finish starting,
// ensuring that the main window handle has been created.
// Otherwise, an exception will be thrown.
process.WaitForInputIdle();
SetWindowText(process.MainWindowHandle, "Hello!");
Icon icon = new Icon(@"C:\Icon\File\Path.ico");
SendMessage(process.MainWindowHandle, WM_SETICON, ICON_BIG, icon.Handle);
0 голосов
/ 08 февраля 2012

В Windows Forms вы бы использовали

Icon ico = Icon.ExtractAssociatedIcon(@"C:\WINDOWS\system32\notepad.exe");
this.Icon = ico;

Так что я предполагаю, что для WPF это будет похоже.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...