2010-01-27 81 views
1

我確信這是可能的,但不確定是否有太多的箍環可以跳過去使它值得,希望有人可能指向正確的方向。我遇到了一個問題(與安裝程序相關),因此我有一個定期的對話框彈出窗口,我需要按取消。以編程方式檢索窗口句柄和按下按鈕

我想要做的是以編程方式關閉它/可能通過服務,所以它停止在我的方式(假設我無法解決根問題)。所以,我想知道的是,是否有辦法以某種方式抓住窗口的句柄(通過在標籤上進行文本比較來檢查它是否正確),然後在窗口上定位控件(取消按鈕)併發送事件呢?

如果有人知道我會如何實現這個或者一些很棒的初學者。

+0

我懷疑這會比解決導致對話框彈出的問題更麻煩,在安裝過程中和之後都會遇到麻煩。畢竟,彈出一個模式對話框必須有一個很好的理由。 – Lazarus 2010-01-27 15:08:08

+0

事實上,它可能是,我也可能會發布有關這一點。但這種方法也有助於提高我的開發技能,看起來更有趣! :) – Ian 2010-01-27 15:09:45

+0

看到http://www.autohotkey.com/,與源代碼 – lsalamon 2010-01-27 16:30:10

回答

0

兩種方法可以做到這一點:

  • 爲了讓手柄,當你談論一個窗口,使用FindWindow API,那麼你就必須列舉與該句柄相關聯的控制,併發送消息WM_BUTTONDOWN,WM_BUTTONUP一起模擬鼠標點擊通過使用SendMessage
  • 但更簡單的方法存在,假設取消按鈕被稱爲btnCancel,那麼這就足夠了btnCancel.Click()

除非我誤會,你說的是一個不屬於你的過程的窗口,那麼我的第一個建議就可以做到。既然你沒有說,如果你正在談論你自己的應用程序或者一個過程的窗口,那不是你的......那麼奧利弗的建議可能會更容易......

但是這引出了一個問題:你爲什麼想要做,因爲你假設有一個取消按鈕的地方...

希望這會有所幫助, 最好的問候, 湯姆。

1

看看AutoIt3。它可以很容易地進行這樣的轉換,如果你深入瞭解它,你會發現它使用哪些WindowsAPI調用來做它的東西。這些API然後可以在C#中進行PInvoke,如果你真的需要它。否則,只需編寫一個AutoIt腳本來執行您的任務。

相關問題