public static extern int FindWindow(string lpClassName, String lpWindowName);
Чтобы найти окно, вам нужно имя класса окна. Вот несколько примеров:
C #:
const string lpClassName = "Winamp v1.x";
IntPtr hwnd = FindWindow(lpClassName, null);
Пример из программы, которую я сделал, написанной на VB:
hParent = FindWindow("TfrmMain", vbNullString)
Чтобы получить имя класса окна, вам понадобится что-то под названием Win Spy
Если у вас есть дескриптор окна, вы можете отправлять ему сообщения, используя функцию SendMessage (IntPtr hWnd, int wMsg, IntPtr wParam, IntPtr lParam).
hWnd, здесь, является результатом функции FindWindow. В приведенных выше примерах это будут hwnd и hParent. Он сообщает функции SendMessage, в какое окно отправлять сообщение.
Второй параметр, wMsg, является константой, обозначающей TYPE сообщения, которое вы отправляете. Сообщение может быть нажатием клавиши (например, отправить «ключ ввода» или «пробел» в окно), но это также может быть команда закрыть окно (WM_CLOSE), команда изменить окно (скрыть его, показать его, свернуть, изменить его заголовок и т. д.), запросить информацию в окне (получить заголовок, получить текст в текстовом поле и т. д.) и т. д. Вот некоторые распространенные примеры:
Public Const WM_CHAR = &H102
Public Const WM_SETTEXT = &HC
Public Const WM_KEYDOWN = &H100
Public Const WM_KEYUP = &H101
Public Const WM_LBUTTONDOWN = &H201
Public Const WM_LBUTTONUP = &H202
Public Const WM_CLOSE = &H10
Public Const WM_COMMAND = &H111
Public Const WM_CLEAR = &H303
Public Const WM_DESTROY = &H2
Public Const WM_GETTEXT = &HD
Public Const WM_GETTEXTLENGTH = &HE
Public Const WM_LBUTTONDBLCLK = &H203
Их можно найти с помощью средства просмотра API (или простого текстового редактора, такого как блокнот), открыв (каталог Microsoft Visual Studio) /Common/Tools/WINAPI/winapi32.txt.
Следующие два параметра являются определенными деталями, если они необходимы. Что касается нажатия определенных клавиш, они будут точно указывать, какая именно клавиша должна быть нажата.
C # пример, установка текста "windowHandle" с помощью WM_SETTEXT:
x = SendMessage(windowHandle, WM_SETTEXT, new IntPtr(0),
m_strURL);
Дополнительные примеры из программы, которую я сделал, написанной на VB, для установки иконки программы (ICONBIG - это константа, которую можно найти в winapi32.txt):
Call SendMessage(hParent, WM_SETICON, ICON_BIG, ByVal hIcon)
Другой пример из VB - нажатие клавиши пробела (VK_SPACE - это константа, которую можно найти в winapi32.txt):
Call SendMessage(button%, WM_KEYDOWN, VK_SPACE, 0)
Call SendMessage(button%, WM_KEYUP, VK_SPACE, 0)
VB отправка нажатия кнопки (левая кнопка вниз, а затем вверх):
Call SendMessage(button%, WM_LBUTTONDOWN, 0, 0&)
Call SendMessage(button%, WM_LBUTTONUP, 0, 0&)
Не знаю, как настроить прослушиватель в .DLL, но эти примеры должны помочь понять, как отправить сообщение.