注册 登录  
 加关注
   显示下一条  |  关闭
温馨提示!由于新浪微博认证机制调整,您的新浪微博帐号绑定已过期,请重新绑定!立即重新绑定新浪微博》  |  关闭

chunwaihome 的博客

 
 
 

日志

 
 

SendMessage & PostMessage   

2009-10-12 19:42:45|  分类: PowerPro |  标签: |举报 |字号 订阅

  下载LOFTER 我的照片书  |

 函數功能:該函數將指定的消息發送到一個或多個窗口。此函數為指定的窗口調用窗口程序,直到窗口程序處理完消息再返回。而函數PostMessage不同,將一個消息寄送到一個線程的消息隊列後立即返回。

    而我們比較常用的就是WM_COMMAND,它貌似就是一種 "消息(Message)", 當你點擊菜單項或其它操作的時候, 就會向操作窗口發送一個 "消息", 告訴窗口你要執行哪個命令. 0x111 就是 WM_COMMAND 的hex值,還有其他的 "消息" 類型, 比如鍵盤按下, 鍵盤釋放, 鼠標按下, 窗口激活等等

Powerpro分別用Window命令和Win插件來實現sendmessage和postmessage

  • Window命令

參數包括wm_command, wm_app, or wm_user

 例子:

*Window Sendmessage wm_command 40046 0 c=winamp v1.x

暫停/播放Winamp/Kmplayer

*Window Sendmessage wm_user 1 105 c=winamp v1.x

  •  Win Plugin
  1. sendmessage(cl, msg, wp, lp) 
  2. sendmessagestr(cl,msg,wp."string")
  3. postmessage(cl, msg, wp, lp) 
  4. sendcopydata(cl, dword, string) 

sendcopydata表示傳送 wm_copydata 到指定窗口中

例子: win.postmessage(win.handle("=winamp"),273,40046,0)

暫停/播放Winamp/Kmplayer

註:273由十六進制0x111計算得來的也相等於wm_command

  • 如何得到WM_Command所得的值

*Window Sendmessage wm_command 40046 0 c=winamp v1.x

40046 作為播放和暫時WInamp


  那麼如何獲得 40046這個參數咧? 我們需要用到一個軟件叫Winspector

    免費的, 下載安裝後運行, 在左邊小窗口切換到 "Process" 頁面, 找到你想監察的程序, 如圖:

    SendMessage  PostMessage  - Y偉 - chunwaihome 的博客

如果此時不能確定那個圖示屬於那個程序的話,可以拖曳最頂位置那個紅色圓圈到程序上。

然後在項目中按右鍵選擇 "Messages...", 在窗口空白處按右鍵選擇 "Edit message filter...", 打開信息過濾設置窗口, 先點擊右下的 "filter all", 再雙擊 WM_COMMAND 項, 表示只監視 WM_COMMAND 的動作, 如圖:

SendMessage  PostMessage  - Y偉 - chunwaihome 的博客

    接下來對程序執行各種操作, 在Winspector的監視窗口中都會有提示.

    回到Winspector的監視窗口, 會看到窗口中多出了許多監視記錄, 找到 WM_COMMAND 的記錄。

 

Autohotkey也支援sendmessage 和postmessage命令,格式為

PostMessage, Msg [, wParam, lParam, Control, WinTitle, WinText, ExcludeTitle, ExcludeText]

SendMessage, Msg [, wParam, lParam, Control, WinTitle, WinText, ExcludeTitle, ExcludeText]

例子:

PostMessage, 0x111, 32808, 0, , Windows Media Player

0x111為十六進制值相等於十進制的273,32808為暫時/開始播放Windows Media Player

  • 記事本(Notepad)

window sendmessage wm_command parameter 0 c=notepad

參數

 意思

 33  格式-->字型
 4  檔案-->另存新檔
 2  檔案-->開啟舊檔
 6  檔案-->列印
 5  檔案-->設定列印格式
 23  編緝-->取代
 7  檔案-->結束
 770

 編緝-->貼上,此命令首先需要激活記事本窗口例如

win.setfocus(win.handle("=notepad"))

win.postmessage(win.handle("=notepad"), 273, 770, 0)

   

  • Outlook Express

 參數

 意思

 40466  檔案-->新增-->電子郵件

win.setfocus(win.handle("=msimn"))

win.postmessage(win.handle("=msimn"), 273, 40466, 0)

 40204  工具-->選項
 40203  工具-->帳戶
 40199  工具-->通訊錄
 40117  檔案-->切換身份
 40193  工具-->傳送及接收-->全部傳送及接收(Ctrl+M)
 0313  工具-->新聞群組(Ctrl+W)
 40132  編輯-->尋找-->郵件(Ctrl+Shift+F)
   
   
   
   
   
   

  • IExplore

 參數

 意思
 374  檔案-->滙入及滙出
 41251  工具-->網際網絡選項
 41499  檢視-->全屏幕(F11)
 3163  檢視-->原始檔
 41330  我的最愛-->組織我的最愛
 41028  編輯-->全選(Ctrl+A)
 258  檔案-->另存新檔
   
   
   

  •  Maxthon

 參數

 意思

 32798

File-->Save Html例如

win.setfocus(win.handle("=maxthon"))

win.postmessage(win.handle("=maxthon"), 273,32798, 0) 

 32807  Option-->Maxthon Options
 33019  View-->Links List(Alt+L)
 33012  Tools-->Synchronize
   
   
   

  • Winamp/Kmplayer

 命令

 意思

 40045 Play
 40046 Pause/Unpause button
 40047  Stop
 40029  Open File
 40044  Previous track button  
 40048  Next track button    
   

  •  不能用Winspector得到消息的程序
  1. Firefox
  2. qq
  3. foobar

  

  评论这张
 
阅读(1462)| 评论(3)
推荐 转载

历史上的今天

评论

<#--最新日志,群博日志--> <#--推荐日志--> <#--引用记录--> <#--博主推荐--> <#--随机阅读--> <#--首页推荐--> <#--历史上的今天--> <#--被推荐日志--> <#--上一篇,下一篇--> <#-- 热度 --> <#-- 网易新闻广告 --> <#--右边模块结构--> <#--评论模块结构--> <#--引用模块结构--> <#--博主发起的投票-->
 
 
 
 
 
 
 
 
 
 
 
 
 
 

页脚

网易公司版权所有 ©1997-2017