天天看點

(轉)SendMessage API

(轉)SendMessage API

using system;

using system.io;

using system.threading;

using system.diagnostics;

using system.runtime.interopservices;

namespace xdf.gameplugincommon

{

    ///   <summary>    

    ///   api   的摘要說明。    

    ///   </summary>    

    public sealed class api

    {

        //wmsg參數常量值:

        //wm_keydown 按下一個鍵

        public static int wm_keydown = 0x0100;

        //釋放一個鍵

        public static int wm_keyup = 0x0101;

        //按下某鍵,并已發出wm_keydown, wm_keyup消息

        public static int wm_char = 0x102;

        //當用translatemessage函數翻譯wm_keyup消息時發送此消息給擁有焦點的視窗

        public static int wm_deadchar = 0x103;

        //當使用者按住alt鍵同時按下其它鍵時送出此消息給擁有焦點的視窗

        public static int wm_syskeydown = 0x104;

        //當使用者釋放一個鍵同時alt 鍵還按着時送出此消息給擁有焦點的視窗

        public static int wm_syskeyup = 0x105;

        //當wm_syskeydown消息被translatemessage函數翻譯後送出此消息給擁有焦點的視窗

        public static int wm_syschar = 0x106;

        //當wm_syskeydown消息被translatemessage函數翻譯後發送此消息給擁有焦點的視窗

        public static int wm_sysdeadchar = 0x107;

        //在一個對話框程式被顯示前發送此消息給它,通常用此消息初始化控件和執行其它任務

        public static int wm_initdialog = 0x110;

        //當使用者選擇一條菜單指令項或當某個控件發送一條消息給它的父視窗,一個快捷鍵被翻譯

        public static int wm_command = 0x111;

        //當使用者選擇視窗菜單的一條指令或//當使用者選擇最大化或最小化時那個視窗會收到此消息

        public static int wm_syscommand = 0x112;

        //發生了定時器事件

        public static int wm_timer = 0x113;

        //當一個視窗标準水準滾動條産生一個滾動事件時發送此消息給那個視窗,也發送給擁有它的控件

        public static int wm_hscroll = 0x114;

        //當一個視窗标準垂直滾動條産生一個滾動事件時發送此消息給那個視窗也,發送給擁有它的控件

        public static int wm_vscroll = 0x115;

        //當一個菜單将要被激活時發送此消息,它發生在使用者菜單條中的某項或按下某個菜單鍵,它允許程式在顯示前更改菜單

        public static int wm_initmenu = 0x116;

        //當一個下拉菜單或子菜單将要被激活時發送此消息,它允許程式在它顯示前更改菜單,而不要改變全部

        public static int wm_initmenupopup = 0x117;

        //當使用者選擇一條菜單項時發送此消息給菜單的所有者(一般是視窗)

        public static int wm_menuselect = 0x11f;

        //當菜單已被激活使用者按下了某個鍵(不同于加速鍵),發送此消息給菜單的所有者

        public static int wm_menuchar = 0x120;

        //當一個模态對話框或菜單進入空載狀态時發送此消息給它的所有者,一個模态對話框或菜單進入空載狀态就是在處理完一條或幾條先前的消息後沒有消息它的列隊中等待

        public static int wm_enteridle = 0x121;

        //在windows繪制消息框前發送此消息給消息框的所有者視窗,通過響應這條消息,所有者視窗可以通過使用給定的相關顯示裝置的句柄來設定消息框的文本和背景顔色

        public static int wm_ctlcolormsgbox = 0x132;

        //當一個編輯型控件将要被繪制時發送此消息給它的父視窗通過響應這條消息,所有者視窗可以通過使用給定的相關顯示裝置的句柄來設定編輯框的文本和背景顔色

        public static int wm_ctlcoloredit = 0x133;

        //當一個清單框控件将要被繪制前發送此消息給它的父視窗通過響應這條消息,所有者視窗可以通過使用給定的相關顯示裝置的句柄來設定清單框的文本和背景顔色

        public static int wm_ctlcolorlistbox = 0x134;

        //當一個按鈕控件将要被繪制時發送此消息給它的父視窗通過響應這條消息,所有者視窗可以通過使用給定的相關顯示裝置的句柄來設定按紐的文本和背景顔色

        public static int wm_ctlcolorbtn = 0x135;

        //當一個對話框控件将要被繪制前發送此消息給它的父視窗通過響應這條消息,所有者視窗可以通過使用給定的相關顯示裝置的句柄來設定對話框的文本背景顔色

        public static int wm_ctlcolordlg = 0x136;

        //當一個滾動條控件将要被繪制時發送此消息給它的父視窗通過響應這條消息,所有者視窗可以通過使用給定的相關顯示裝置的句柄來設定滾動條的背景顔色

        public static int wm_ctlcolorscrollbar = 0x137;

        //當一個靜态控件将要被繪制時發送此消息給它的父視窗通過響應這條消息,所有者視窗可以 通過使用給定的相關顯示裝置的句柄來設定靜态控件的文本和背景顔色

        public static int wm_ctlcolorstatic = 0x138;

        //當滑鼠輪子轉動時發送此消息個目前有焦點的控件

        public static int wm_mousewheel = 0x20a;

        //輕按兩下滑鼠中鍵

        public static int wm_mbuttondblclk = 0x209;

        //釋放滑鼠中鍵

        public static int wm_mbuttonup = 0x208;

        //移動滑鼠時發生,同wm_mousefirst

        public static int wm_mousemove = 0x200;

        //按下滑鼠左鍵

        public static int wm_lbuttondown = 0x201;

        //釋放滑鼠左鍵

        public static int wm_lbuttonup = 0x202;

        //輕按兩下滑鼠左鍵

        public static int wm_lbuttondblclk = 0x203;

        //按下滑鼠右鍵

        public static int wm_rbuttondown = 0x204;

        //釋放滑鼠右鍵

        public static int wm_rbuttonup = 0x205;

        //輕按兩下滑鼠右鍵

        public static int wm_rbuttondblclk = 0x206;

        //按下滑鼠中鍵

        public static int wm_mbuttondown = 0x207;

        public static int wm_user = 0x0400;

        public static int mk_lbutton = 0x0001;

        public static int mk_rbutton = 0x0002;

        public static int mk_shift = 0x0004;

        public static int mk_control = 0x0008;

        public static int mk_mbutton = 0x0010;

        public static int mk_xbutton1 = 0x0020;

        public static int mk_xbutton2 = 0x0040;

        //建立一個視窗

        public static int wm_create = 0x01;

        //當一個視窗被破壞時發送

        public static int wm_destroy = 0x02;

        //移動一個視窗

        public static int wm_move = 0x03;

        //改變一個視窗的大小

        public static int wm_size = 0x05;

        //一個視窗被激活或失去激活狀态

        public static int wm_activate = 0x06;

        //一個視窗獲得焦點

        public static int wm_setfocus = 0x07;

        //一個視窗失去焦點

        public static int wm_killfocus = 0x08;

        //一個視窗改變成enable狀态

        public static int wm_enable = 0x0a;

        //設定視窗是否能重畫

        public static int wm_setredraw = 0x0b;

        //應用程式發送此消息來設定一個視窗的文本

        public static int wm_settext = 0x0c;

        //應用程式發送此消息來複制對應視窗的文本到緩沖區

        public static int wm_gettext = 0x0d;

        //得到與一個視窗有關的文本的長度(不包含空字元)

        public static int wm_gettextlength = 0x0e;

        //要求一個視窗重畫自己

        public static int wm_paint = 0x0f;

        //當一個視窗或應用程式要關閉時發送一個信号

        public static int wm_close = 0x10;

        //當使用者選擇結束對話框或程式自己調用exitwindows函數

        public static int wm_queryendsession = 0x11;

        //用來結束程式運作

        public static int wm_quit = 0x12;

        //當使用者視窗恢複以前的大小位置時,把此消息發送給某個圖示

        public static int wm_queryopen = 0x13;

        //當視窗背景必須被擦除時(例在視窗改變大小時)

        public static int wm_erasebkgnd = 0x14;

        //當系統顔色改變時,發送此消息給所有頂級視窗

        public static int wm_syscolorchange = 0x15;

        //當系統程序發出wm_queryendsession消息後,此消息發送給應用程式,通知它對話是否結束

        public static int wm_endsession = 0x16;

        //當隐藏或顯示視窗是發送此消息給這個視窗

        public static int wm_showwindow = 0x18;

        //發此消息給應用程式哪個視窗是激活的,哪個是非激活的

        public static int wm_activateapp = 0x1c;

        //當系統的字型資源庫變化時發送此消息給所有頂級視窗

        public static int wm_fontchange = 0x1d;

        //當系統的時間變化時發送此消息給所有頂級視窗

        public static int wm_timechange = 0x1e;

        //發送此消息來取消某種正在進行的摸态(操作)

        public static int wm_cancelmode = 0x1f;

        //如果滑鼠引起光标在某個視窗中移動且滑鼠輸入沒有被捕獲時,就發消息給某個視窗

        public static int wm_setcursor = 0x20;

        //當光标在某個非激活的視窗中而使用者正按着滑鼠的某個鍵發送此消息給//目前視窗

        public static int wm_mouseactivate = 0x21;

        //發送此消息給mdi子視窗//當使用者點選此視窗的标題欄,或//當視窗被激活,移動,改變大小

        public static int wm_childactivate = 0x22;

        //此消息由基于計算機的訓練程式發送,通過wh_journalpalyback的hook程式分離出使用者輸入消息

        public static int wm_queuesync = 0x23;

        //此消息發送給視窗當它将要改變大小或位置

        public static int wm_getminmaxinfo = 0x24;

        //發送給最小化視窗當它圖示将要被重畫

        public static int wm_painticon = 0x26;

        //此消息發送給某個最小化視窗,僅//當它在畫圖示前它的背景必須被重畫

        public static int wm_iconerasebkgnd = 0x27;

        //發送此消息給一個對話框程式去更改焦點位置

        public static int wm_nextdlgctl = 0x28;

        //每當列印管理列隊增加或減少一條作業時發出此消息 

        public static int wm_spoolerstatus = 0x2a;

        //當button,combobox,listbox,menu的可視外觀改變時發送

        public static int wm_drawitem = 0x2b;

        //當button, combo box, list box, list view control, or menu item 被建立時

        public static int wm_measureitem = 0x2c;

        //此消息有一個lbs_wantkeyboardinput風格的發出給它的所有者來響應wm_keydown消息 

        public static int wm_vkeytoitem = 0x2e;

        //此消息由一個lbs_wantkeyboardinput風格的清單框發送給他的所有者來響應wm_char消息 

        public static int wm_chartoitem = 0x2f;

        //當繪制文本時程式發送此消息得到控件要用的顔色

        public static int wm_setfont = 0x30;

        //應用程式發送此消息得到目前控件繪制文本的字型

        public static int wm_getfont = 0x31;

        //應用程式發送此消息讓一個視窗與一個熱鍵相關連 

        public static int wm_sethotkey = 0x32;

        //應用程式發送此消息來判斷熱鍵與某個視窗是否有關聯

        public static int wm_gethotkey = 0x33;

        //此消息發送給最小化視窗,當此視窗将要被拖放而它的類中沒有定義圖示,應用程式能傳回一個圖示或光标的句柄,當使用者拖放圖示時系統顯示這個圖示或光标

        public static int wm_querydragicon = 0x37;

        //發送此消息來判定combobox或listbox新增加的項的相對位置

        public static int wm_compareitem = 0x39;

        //顯示記憶體已經很少了

        public static int wm_compacting = 0x41;

        //發送此消息給那個視窗的大小和位置将要被改變時,來調用setwindowpos函數或其它視窗管理函數

        public static int wm_windowposchanging = 0x46;

        //發送此消息給那個視窗的大小和位置已經被改變時,來調用setwindowpos函數或其它視窗管理函數

        public static int wm_windowposchanged = 0x47;

        //當系統将要進入暫停狀态時發送此消息

        public static int wm_power = 0x48;

        //當一個應用程式傳遞資料給另一個應用程式時發送此消息

        public static int wm_copydata = 0x4a;

        //當某個使用者取消程式日志激活狀态,送出此消息給程式

        public static int wm_canceljourna = 0x4b;

        //當某個控件的某個事件已經發生或這個控件需要得到一些資訊時,發送此消息給它的父視窗 

        public static int wm_notify = 0x4e;

        //當使用者選擇某種輸入語言,或輸入語言的熱鍵改變

        public static int wm_inputlangchangerequest = 0x50;

        //當平台現場已經被改變後發送此消息給受影響的最頂級視窗

        public static int wm_inputlangchange = 0x51;

        //當程式已經初始化windows幫助例程時發送此消息給應用程式

        public static int wm_tcard = 0x52;

        //此消息顯示使用者按下了f1,如果某個菜單是激活的,就發送此消息個此視窗關聯的菜單,否則就發送給有焦點的視窗,如果//目前都沒有焦點,就把此消息發送給//目前激活的視窗

        public static int wm_help = 0x53;

        //當使用者已經登入或退出後發送此消息給所有的視窗,//當使用者登入或退出時系統更新使用者的具體設定資訊,在使用者更新設定時系統馬上發送此消息

        public static int wm_userchanged = 0x54;

        //公用控件,自定義控件和他們的父視窗通過此消息來判斷控件是使用ansi還是unicode結構

        public static int wm_notifyformat = 0x55;

        //當使用者某個視窗中點選了一下右鍵就發送此消息給這個視窗

        //public static int wm_contextmenu = ??;

        //當調用setwindowlong函數将要改變一個或多個 視窗的風格時發送此消息給那個視窗

        public static int wm_stylechanging = 0x7c;

        //當調用setwindowlong函數一個或多個 視窗的風格後發送此消息給那個視窗

        public static int wm_stylechanged = 0x7d;

        //當顯示器的分辨率改變後發送此消息給所有的視窗

        public static int wm_displaychange = 0x7e;

        //此消息發送給某個視窗來傳回與某個視窗有關連的大圖示或小圖示的句柄

        public static int wm_geticon = 0x7f;

        //程式發送此消息讓一個新的大圖示或小圖示與某個視窗關聯

        public static int wm_seticon = 0x80;

        //當某個視窗第一次被建立時,此消息在wm_create消息發送前發送

        public static int wm_nccreate = 0x81;

        //此消息通知某個視窗,非客戶區正在銷毀 

        public static int wm_ncdestroy = 0x82;

        //當某個視窗的客戶區域必須被核算時發送此消息

        public static int wm_nccalcsize = 0x83;

        //移動滑鼠,按住或釋放滑鼠時發生

        public static int wm_nchittest = 0x84;

        //程式發送此消息給某個視窗當它(視窗)的架構必須被繪制時

        public static int wm_ncpaint = 0x85;

        //此消息發送給某個視窗僅當它的非客戶區需要被改變來顯示是激活還是非激活狀态

        public static int wm_ncactivate = 0x86;

        //發送此消息給某個與對話框程式關聯的控件,widdows控制方位鍵和tab鍵使輸入進入此控件通過應

        public static int wm_getdlgcode = 0x87;

        //當光标在一個視窗的非客戶區内移動時發送此消息給這個視窗 非客戶區為:窗體的标題欄及窗 的邊框體

        public static int wm_ncmousemove = 0xa0;

        //當光标在一個視窗的非客戶區同時按下滑鼠左鍵時送出此消息

        public static int wm_nclbuttondown = 0xa1;

        //當使用者釋放滑鼠左鍵同時光标某個視窗在非客戶區十發送此消息 

        public static int wm_nclbuttonup = 0xa2;

        //當使用者輕按兩下滑鼠左鍵同時光标某個視窗在非客戶區十發送此消息

        public static int wm_nclbuttondblclk = 0xa3;

        //當使用者按下滑鼠右鍵同時光标又在視窗的非客戶區時發送此消息

        public static int wm_ncrbuttondown = 0xa4;

        //當使用者釋放滑鼠右鍵同時光标又在視窗的非客戶區時發送此消息

        public static int wm_ncrbuttonup = 0xa5;

        //當使用者輕按兩下滑鼠右鍵同時光标某個視窗在非客戶區十發送此消息

        public static int wm_ncrbuttondblclk = 0xa6;

        //當使用者按下滑鼠中鍵同時光标又在視窗的非客戶區時發送此消息

        public static int wm_ncmbuttondown = 0xa7;

        //當使用者釋放滑鼠中鍵同時光标又在視窗的非客戶區時發送此消息

        public static int wm_ncmbuttonup = 0xa8;

        //當使用者輕按兩下滑鼠中鍵同時光标又在視窗的非客戶區時發送此消息

        public static int wm_ncmbuttondblclk = 0xa9;

        [dllimport("user32.dll")]

        public static extern int sendmessage(intptr hwnd, int msg, int wparam, int lparam);

        //此處主要用來讓視窗置于最前(setwindowpos(this.handle,-1,0,0,0,0,0x4000|0x0001|0x0002);)    

        [system.runtime.interopservices.dllimport("user32.dll")]

        public static extern bool setwindowpos(intptr hwnd,

        int hwndinsertafter,

        int x,

        int y,

        int cx,

        int cy,

        int uflags

        );

        ///   <summary>    

        ///   視窗置前    

        ///   </summary>    

        ///   <param   name="hwnd"></param>    

        public static void setwindowpos(intptr hwnd)

        {

            setwindowpos(hwnd, -1, 0, 0, 0, 0, 0x4000 | 0x0001 | 0x0002);

        }

        public static process getgameprocess(string processname)

            process pro = null;

            process[] pros = process.getprocessesbyname(processname);

            if (pros.length > 0)

            {

                pro = pros[0];

            }

            intptr m_windowhandle = intptr.zero;

            m_windowhandle = pro.mainwindowhandl; 

            return pro;

    }

}

//例子

api.sendmessage(m_windowhandle, api.wm_close, 0, 0); 

(轉)SendMessage API

繼續閱讀