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)
ウィンドウのクラス名を取得するには、 WinSpyと呼ばれるものが必要です。
ウィンドウのハンドルを取得したら、SendMessage(IntPtr hWnd, int wMsg, IntPtr wParam, IntPtr lParam)
関数を使用してウィンドウにメッセージを送信できます。
hWnd
、ここでは、FindWindow
関数の結果です。上記の例では、これはとにhwnd
なりhParent
ます。SendMessage
メッセージを送信するウィンドウを関数に指示します。
2番目のパラメーター、は、送信するメッセージのタイプwMsg
を示す定数です。メッセージはキーストローク(たとえば、「Enterキー」または「スペースバー」をウィンドウに送信する)の場合がありますが、ウィンドウを閉じるコマンド()、ウィンドウを変更するコマンド(非表示、表示)の場合もあります。それ、最小化、タイトルの変更など)、ウィンドウ内の情報の要求(タイトルの取得、テキストボックス内のテキストの取得など)など。一般的な例には、次のものがあります。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 Directory)/Common/Tools/WINAPI/winapi32.txt
。
次の2つのパラメーターは、必要に応じて特定の詳細です。特定のキーを押すという点では、どの特定のキーを押すかを正確に指定します。
windowHandle
C#の例、 with WM_SETTEXT
:のテキストを設定する
x = SendMessage(windowHandle, WM_SETTEXT, new IntPtr(0), m_strURL);
私が作成した、VBで記述された、プログラムのアイコンを設定するプログラムのその他の例(ICON_BIG
定数はで見つけることができます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内でリスナーを設定する方法はわかりませんが、これらの例は、メッセージの送信方法を理解するのに役立ちます。