Повторный запуск приложения с повышенными правами «runas» не захватывает сообщение TaskbarButtonCreated Msg перед использованием ITaskbarList?

Использование Borland C ++ Builder.

Прежде чем я использую ITaskbarList3, Я делаю, как требует Windows:

https://msdn.microsoft.com/en-us/library/windows/desktop/dd391692.aspx

Ваше приложение должно вызвать RegisterWindowMessage (L «TaskbarButtonCreated») и обработать это сообщение в своем wndproc. Это сообщение должно быть получено вашим приложением, прежде чем оно вызовет какой-либо метод ITaskbarList3.

Однако это не всегда работает для меня, сообщение, которое я жду, никогда не приходит, даже если RegisterWindowMessage () был успешным.

После некоторых копаний я обнаружил, что проблема связана с тем, что мое приложение перезапускается с «runas», сразу после запуска, когда оно основано на пользовательских настройках, приложение должно запускаться с повышенными правами.

Второй (теперь повышенный) запуск, сообщение, которое я жду, никогда не приходит.

я предполагать это связано с тем, что Windows уже отправила это сообщение и больше не делает этого, даже если создается новый экземпляр ??

Насколько это безопасно для предполагать сообщение должно быть отправлено уже во втором (повышенном) запуске, и все равно продолжить использование ITaskbarList3?

2

Решение

Ваш код приложения должен позвонить ChangeWindowMessageFilterEx Функция после создания верхнего окна и регистрации сообщения «TaskbarButtonCreated». Это позволит второму (повышенному) экземпляру получать сообщение «TaskbarButtonCreated».

UINT nTaskbarButtonCreatedMessage = RegisterWindowMessage(TEXT("TaskbarButtonCreated"));
HWND hWnd = {create the top main window and get handle to it}.
ChangeWindowMessageFilterEx(hWnd, nTaskbarButtonCreated, MSGFLT_ALLOW, nullptr);

(это код для VC ++, но я верю, что он будет работать и для Borland C ++ Builder)

0

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]