2009-06-12 40 views
1

我想關閉一個會自動彈出的對話框,但我在使其工作時遇到了一些麻煩。經過幾年的有限使用,我的Win32編程有點生疏。模擬單擊C中另一個窗口中的按鈕#

我使用FindWindowEx獲取對話框的句柄和我想單擊的按鈕。我的印象是,發送一個WM_COMMAND到對話框,wParam參數中的按鈕句柄可以解決問題。

Window window = Window.FindWindow("TSomeDialog", null); 
Window cancelButton = Window.FindWindow("TButton", "Cancel", window); 

Message message = Message.Create(window.HWnd, 0x0111, cancelButton.HWnd, IntPtr.Zero); 
PostMessage(message); 

public void PostMessage(Message message) 
{ 
    // Win32 API import 
    PostMessage(message.HWnd, message.Msg, message.WParam, message.LParam); 
} 

窗口是實現IWin32Window幷包裝一些Win32 API調用的類。我已經爲WM_COMMAND(0x111)內聯了常量。

我在做什麼錯? :)

回答

2

那麼,根據WM_COMMAND的文檔,lParam應該是控件窗口的句柄(它看起來像是通過wParam傳遞的)。

wParam的高位字應等於BN_CLICKED,低位字等於控件的標識符。

(您可以使用GetWindowLong與GWL_ID檢索這一點,但想必其IDCANCEL)

+0

謝謝,我剛發現我自己應該使用lParam來代替。永遠不要假設其他人寫的是正確的:( – Thorarin 2009-06-12 14:10:07

0

爲什麼不只是發送帶有SC_CLOSE參數的WM_SYSCOMMAND消息?這應該關閉窗口。

0

爲什麼不發送WM_CLOSE消息呢?

+0

我需要在這種情況下,按下特定的按鈕。這是一個...特殊的對話框。 – Thorarin 2009-06-12 14:12:42

相關問題