Вот в этом вызове
Код:
Menu := GetSystemMenu(Handle, False);
Handle - дескриптор окна, системное меню которого, вы хотите поменять. В моем примере это дескриптор формы нашего приложения. Чтобы добраться до меню чужого окна, очевидно сначала нужно получить его дескриптор. Т.е. запустившись, ваша программа должна найти окна всех открытых приложений и добавить в их системное меню ваш пункт.
Для этого можете использовать
EnumWindows. Эта функция находит все окна приложений (но не находит их дочерние окна! для этого есть
EnumChildWindows). Вот
тут пример использования.
Чтобы обрабатывать окна, которые будут открываться после запуска вашего приложения, можно поступить двояко.
Первый вариант - повесить глобальный хук. Посмотрите описание функции
SetWindowsHookEx. Обратите внимание - глобальный хук обязательно должен находиться в DLL.
Либо можно просто периодически повторять перебор всех открытых окон и проверять - есть у них в меню ваш пункт или нет. Если нет, добавлять. В конце концов, мало кто, запустив приложение, сразу лезет в его системное меню. Запуская раз в 2-3 секунды перебор окон, вы свою задачу решите. Нужно только подобрать интервал, чтобы сильно не грузило систему.
P.S. И, кстати, не забудьте удалить добавленные пункты меню, когда ваша программа будет завершаться.