2007年8月6日 星期一

Visual Studio Tools - Spy++

Spy++來顯示執行中的程式的各項資訊,包括執行緒、開啟的視窗,以及隱藏的視窗等等。有了這些資訊我們可以透過API呼叫的方式來控制應用程式,不需要了解應用程式如何implement.

以Windows Media Player為例:
開啟Spy++,選擇紀錄檔訊息.

將搜尋工具的準星移到目標程式上的最外框.訊息中的"文字"與"類別"是我們需要的.

先清除全部,再選擇WM_COMMAND.按下確定後開始監控.

執行想擷取的動作,如"播放/暫停".Spy++會收到訊息.

訊息欄位說明:第一欄-訊息編號. 第二欄-視窗代碼. 第三欄-訊息代碼:S(代表送出),R(代表收到),P(代表posted),S(代表訊息已送出,但是安全管制設定禁止你取用傳回值). 第四欄-訊息、參數和傳回值選擇訊息的屬性.
選擇屬性.

wParam的16進位值是我們需要的參數.

開啟VB.Net專案,宣告參數及Function.
Public WM_MCOMMAND As Integer = Val("&H111")
Public WM_KEYDOWN As Integer = Val("&H100")
Public WM_CHAR As Integer = Val("&H102")
Public WM_KEYUP As Integer = Val("&H101")

Declare Auto Function FindWindow Lib "USER32.DLL" ( _
ByVal lpClassName As String, _
ByVal lpWindowName As String) As IntPtr

Declare Auto Function SendMessage Lib "USER32.DLL" _
(ByVal hWnd As IntPtr, ByVal Msg As Integer, _
ByVal wParam As Integer, ByVal lParam As Integer) As Integer

開啟WMP後,Call Function來執行播放/暫停的功能.
Dim wmplayerHandle As IntPtr = FindWindow("WMPlayerApp", "Windows Media Player")
SendMessage(wmplayerHandle, WM_MCOMMAND, Val("&H4978"), 0)

範例程式下載

Ref:
HOW TO:以程式碼模擬滑鼠和鍵盤事件
WM_COMMAND Notification

5 意見:

達可鴨 提到...

感謝大大無私分享

達可鴨 提到...
作者已經移除這則留言。
達可鴨 提到...

我以前一直都想要寫控制程式的程式。有點類似middleware的東西。不過在GUI上一直不曉得怎麼做,像是鍵盤精靈之類的東西根本無法有效操控應用程式,看起來用spy++是個好方法。

showtime 提到...

期待你的新作阿~

紅色鉛筆 提到...

請問在2008上是否有相同或類似的工具? 我一直找不到!
如否,是否齊其他的網路工具可以使用,十分感謝