public static extern int FindWindow(string lpClassName, String lpWindowName);
爲了找到窗口,你需要窗口類名。下面是一些例子:
C#:
hParent = FindWindow("TfrmMain", vbNullString)
爲了得到一個窗口的類名,你用」:
const string lpClassName = "Winamp v1.x";
IntPtr hwnd = FindWindow(lpClassName, null);
從一個程序,我做了,用VB編寫的示例你需要一個叫Win Spy
一旦你有窗口的句柄,你可以使用SendMessage(IntPtr hWnd,int wMsg,IntPtr wParam,IntPtr lParam)函數發送消息給它。
hWnd在這裏是FindWindow函數的結果。在上面的例子中,這將是hwnd和hParent。它告訴SendMessage函數將消息發送到哪個窗口。
第二個參數wMsg是一個常量,表示您要發送的消息的類型。該消息可能是一個按鍵(例如,將「輸入鍵」或「空格鍵」發送到窗口),但它也可能是一個關閉窗口的命令(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瀏覽器(或一個簡單的文本編輯器,如記事本)打開(微軟的Visual Studio目錄)/普通/工具/ WINAPI/winapi32找到。文本。
接下來的兩個參數是某些細節,如果它們是必要的。就按某些鍵而言,他們將確切指定要按下哪個特定鍵。
C#例如,設置「windowHandle」的文本與WM_SETTEXT:從程序,我提出,寫在VB
x = SendMessage(windowHandle, WM_SETTEXT, new IntPtr(0),
m_strURL);
更多的例子,設定的程序的圖標(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內,但這些例子應該瞭解如何發送幫助信息。
嗨尼科爾,SendMessage「可以」在這種情況下有所幫助是的,但我擔心這不是您實現目標的最簡單方法。你能描述一下你的整個場景是什麼?你有1個WindowsForms應用程序和一些包含你想要顯示的額外表單的類庫,如果沒有,你到底想要做什麼?提供更多細節,我們將看到哪條路。 – 2011-02-22 21:09:09
如果您對這兩個應用程序都有控制權,請使用其他一些IPC策略(命名爲管道/套接字) – 2011-02-22 21:09:22