• <ins id="pjuwb"></ins>
    <blockquote id="pjuwb"><pre id="pjuwb"></pre></blockquote>
    <noscript id="pjuwb"></noscript>
          <sup id="pjuwb"><pre id="pjuwb"></pre></sup>
            <dd id="pjuwb"></dd>
            <abbr id="pjuwb"></abbr>
            隨筆 - 298  文章 - 377  trackbacks - 0
            <2013年6月>
            2627282930311
            2345678
            9101112131415
            16171819202122
            23242526272829
            30123456

            常用鏈接

            留言簿(34)

            隨筆分類

            隨筆檔案

            文章檔案

            相冊

            收藏夾

            搜索

            •  

            最新評論

            閱讀排行榜

            評論排行榜

            //****************** 類mk頭文件mk.h **************************
            #if !defined(AFX_MK_H__B024D48F_090A_4F6F_A199_32996DF699B3__INCLUDED_)
            #define AFX_MK_H__B024D48F_090A_4F6F_A199_32996DF699B3__INCLUDED_

             

            #if _MSC_VER > 1000
            #pragma once
            #endif // _MSC_VER > 1000
            #include "winable.h"

            class mk
            {
            public:
            mk();

            static void Key(BYTE k, int mSeconds=0);//按一個鍵,mSeconds表按鍵后到
                                                                                     //下一次操作延遲的時間:ms
            static void Key2(BYTE k1, BYTE k2,int mSeconds=0);//按2個鍵
            static void Key3(BYTE k1,BYTE k2,BYTE k3,int mSeconds=0);//按3個鍵

            static void Click(int x,int y,int mSeconds=0);//單擊
            static void RClick(int x,int y,int mSeconds=0);//右擊
            static void DClick(int x,int y,int mSeconds=0);//雙擊
            static void CtrlClick(int x, int y, int mSeconds=0);//Ctrl+單擊
                            static void Drag(int x1,int y1,int x2,int y2,int mSeconds=0);//鼠標(biāo)拖動

            virtual ~mk();

            };

            #endif // !defined(AFX_MK_H__B024D48F_090A_4F6F_A199_32996DF699B3__INCLUDED_)
            //****************** 類mk頭文件mk.h end**************************
            //****************** 類mk實(shí)現(xiàn)文件mk.cpp **************************
            #include "stdafx.h"
            #include "mk.h"
            #ifdef _DEBUG
            #undef THIS_FILE
            static char THIS_FILE[]=__FILE__;
            #define new DEBUG_NEW
            #endif

            //////////////////////////////////////////////////////////////////////
            // Construction/Destruction
            //////////////////////////////////////////////////////////////////////

            mk::mk()
            {

            }

            mk::~mk()
            {

            }
            void mk::Click(int x, int y, int mSeconds)
            {
            SetCursorPos(x,y);
            mouse_event(MOUSEEVENTF_LEFTDOWN,0,0,0,0);
            mouse_event(MOUSEEVENTF_LEFTUP,0,0,0,0);
            Sleep(mSeconds);
            }
            void mk::DClick(int x, int y, int mSeconds)
            {
            SetCursorPos(x,y);
            mouse_event(MOUSEEVENTF_LEFTDOWN,0,0,0,0);
            mouse_event(MOUSEEVENTF_LEFTUP,0,0,0,0);
            mouse_event(MOUSEEVENTF_LEFTDOWN,0,0,0,0);
            mouse_event(MOUSEEVENTF_LEFTUP,0,0,0,0);
            Sleep(mSeconds);
            }

            void mk::Drag(int x1, int y1, int x2, int y2, int mSeconds)
            {
            SetCursorPos(x1,y1);
            mouse_event(MOUSEEVENTF_LEFTDOWN,0,0,0,0);
            SetCursorPos(x2,y2);
            mouse_event(MOUSEEVENTF_LEFTUP,0,0,0,0);
            Sleep(mSeconds);
            }

            void mk::RClick(int x, int y, int mSeconds)
            {
            SetCursorPos(x,y);
            mouse_event(MOUSEEVENTF_RIGHTDOWN,0,0,0,0);
            mouse_event(MOUSEEVENTF_RIGHTUP,0,0,0,0);
            Sleep(mSeconds);
            }
            void mk::Key(BYTE k, int mSeconds)
            {
            keybd_event(k,0,0,0);
            keybd_event(k,0,KEYEVENTF_KEYUP,0); 
            Sleep(mSeconds);
            }
            void mk::Key2(BYTE k1, BYTE k2, int mSeconds)
            {
            //法1
            //keybd_event(k1, 0, 0 ,0);
                //keybd_event(k2, 0, 0 ,0);
                //keybd_event(k2, 0, KEYEVENTF_KEYUP,0);
                //keybd_event(k1, 0, KEYEVENTF_KEYUP,0);
            //法2,更通用,但須先#include "winable.h"
            INPUT input[4];
                memset(input,0,sizeof(input));
                input[0].type=input[1].type=input[2].type=input[3].type=INPUT_KEYBOARD;
                input[0].ki.wVk=input[3].ki.wVk=k1;
                input[1].ki.wVk=input[2].ki.wVk=k2;
                input[2].ki.dwFlags = input[3].ki.dwFlags = KEYEVENTF_KEYUP;

                SendInput(4, input, sizeof(INPUT));

            Sleep(mSeconds);
            }

            void mk::CtrlClick(int x, int y, int mSeconds)
            {
            SetCursorPos(x,y);
            keybd_event(VK_CONTROL ,0,0,0);
            mouse_event(MOUSEEVENTF_LEFTDOWN,0,0,0,0);
            mouse_event(MOUSEEVENTF_LEFTUP,0,0,0,0);
            keybd_event(VK_CONTROL,0,KEYEVENTF_KEYUP,0);
            Sleep(mSeconds);
            }

            void mk::Key3(BYTE k1, BYTE k2, BYTE k3, int mSeconds)
            {
            if(k1==VK_CONTROL&&k2==VK_MENU&&k3==VK_DELETE)
            ShellExecute(NULL,NULL,"taskmgr.exe",NULL,NULL,SW_SHOW);
            else
            {
            INPUT input[6];
                memset(input,0,sizeof(input));
                input[0].type=input[1].type=input[2].type=input[3].type=input[4].type=input[5].type=INPUT_KEYBOARD;
                input[0].ki.wVk=input[5].ki.wVk=k1;
                input[1].ki.wVk=input[4].ki.wVk=k2;
            input[2].ki.wVk=input[3].ki.wVk=k3;
                input[3].ki.dwFlags=input[4].ki.dwFlags=input[5].ki.dwFlags=KEYEVENTF_KEYUP;
                SendInput(6, input, sizeof(INPUT));
            }

            Sleep(mSeconds);
            }

            //****************** 類mk實(shí)現(xiàn)文件mk.cpp end**************************




            ===================================================================

             VC模擬鍵盤操作

             INPUT input[4];
             memset(input, 0, sizeof(input));

             //設(shè)置模擬鍵盤輸入
             input[0].type = input[1].type = input[2].type = input[3].type = INPUT_KEYBOARD;
             input[0].ki.wVk  = input[2].ki.wVk = VK_CONTROL;
             input[1].ki.wVk  = input[3].ki.wVk = VK_ESCAPE;

             // 釋放按鍵
             input[2].ki.dwFlags = input[3].ki.dwFlags = KEYEVENTF_KEYUP;

             SendInput(4, input, sizeof(INPUT)); 



            *********************************************************************************
            符號常量 十六進(jìn)制值 指定的鼠標(biāo)或鍵盤按鍵
              VK_LBUTTON 01 鼠標(biāo)左鍵
              VK_RBUTTON 02 鼠標(biāo)右鍵
              VK_CANCEL 03 Control-break 過程
              VK_MBUTTON 04 鼠標(biāo)中鍵
              VK_BACK 08 BACKSPACE 鍵
              VK_TAB 09 TAB 鍵
              VK_CLEAR 0C CLEAR 鍵
              VK_RETURN 0D ENTER 鍵
              VK_SHIFT 10 SHIFT 鍵
              VK_CONTROL 11 CTRL 鍵
              VK_MENU 12 ALT 鍵
              VK_PAUSE 13 PAUSE 鍵
              VK_CAPITAL 14 CAPS LOCK 鍵
              VK_ESCAPE 1B ESC 鍵
              VK_SPACE 20 SPACEBAR
              VK_PRIOR 21 PAGE UP 鍵
              VK_NEXT 22 PAGE DOWN 鍵
              VK_END 23 END 鍵
              VK_HOME 24 HOME 鍵
              VK_LEFT 25 LEFT ARROW 鍵
              VK_UP 26 UP ARROW 鍵
              VK_RIGHT 27 RIGHT ARROW 鍵
              VK_DOWN 28 DOWN ARROW 鍵
              VK_SELECT 29 SELECT 鍵
              VK_EXECUTE 2B EXECUTE 鍵
              VK_SNAPSHOT 2C PRINT SCREEN鍵(用于Windows 3.0及以后版本)
              VK_INSERT 2D INS 鍵
              VK_DELETE 2E DEL 鍵
              VK_HELP 2F HELP 鍵
              ///////////////////////////////////////////////////
              對于字母鍵和非小鍵盤上的數(shù)字鍵,直接在單引號中加入該鍵就行.
              比如:a鍵:'A'
               1鍵:'1'
              //////////////////////////////////////////////

              VK_LWIN 5B Left Windows 鍵 (Microsoft自然鍵盤)
              VK_RWIN 5C Right Windows 鍵 (Microsoft自然鍵盤)
              VK_APPS 5D Applications 鍵 (Microsoft自然鍵盤)
              VK_NUMPAD0 60 數(shù)字小鍵盤上的 0 鍵
              VK_NUMPAD1 61 數(shù)字小鍵盤上的 1 鍵
              VK_NUMPAD2 62 數(shù)字小鍵盤上的 2 鍵
              VK_NUMPAD3 63 數(shù)字小鍵盤上的 3 鍵
              VK_NUMPAD4 64 數(shù)字小鍵盤上的 4 鍵
            VK_NUMPAD5 65 數(shù)字小鍵盤上的 5 鍵
              VK_NUMPAD6 66 數(shù)字小鍵盤上的 6 鍵
              VK_NUMPAD7 67 數(shù)字小鍵盤上的 7 鍵
              VK_NUMPAD8 68 數(shù)字小鍵盤上的 8 鍵
              VK_NUMPAD9 69 數(shù)字小鍵盤上的 9 鍵
              VK_MULTIPLY 6A Multiply 鍵
              VK_ADD 6B Add 鍵
              VK_SEPARATOR 6C Separator 鍵
              VK_SUBTRACT 6D Subtract 鍵
              VK_DECIMAL 6E Decimal 鍵
              VK_DIVIDE 6F Divide 鍵
              VK_F1 70 F1 鍵
              VK_F2 71 F2 鍵
              VK_F3 72 F3 鍵
              VK_F4 73 F4 鍵
              VK_F5 74 F5 鍵
              VK_F6 75 F6 鍵
              VK_F7 76 F7 鍵
              VK_F8 77 F8 鍵
              VK_F9 78 F9 鍵
              VK_F10 79 F10 鍵
              VK_F11 7A F11 鍵
              VK_F12 7B F12 鍵
              VK_F13 7C F13 鍵
              VK_F14 7D F14 鍵
              VK_F15 7E F15 鍵
              VK_F16 7F F16 鍵
              VK_F17 80H F17 鍵
              VK_F18 81H F18 鍵
              VK_F19 82H F19 鍵
              VK_F20 83H F20 鍵
              VK_F21 84H F21 鍵
              VK_F22 85H F22 鍵
              VK_F23 86H F23 鍵
              VK_F24 87H F24 鍵
              VK_NUMLOCK 90 NUM LOCK 鍵
              VK_SCROLL 91 SCROLL LOCK 鍵
              VK_ATTN F6 Attn 鍵
              VK_CRSEL F7 CrSel 鍵
              VK_EXSEL F8 ExSel 鍵
              VK_EREOF F9 Erase EOF 鍵
            VK_PLAY FA Play 鍵
              VK_ZOOM FB Zoom 鍵
              VK_OEM_CLEAR FE Clear 鍵
              
              舉例:
              
              (一)響應(yīng)單獨(dú)的按鍵:
              先添加PreTranslateMessage()(響應(yīng)WM_CHAR)也是同樣的效果,因?yàn)楸纠徊蹲芥I盤)
              BOOL CMydilog::PreTranslateMessage(MSG* pMsg)
              {

               // TODO: Add your specialized code here and/or call the base class
               if (pMsg->message == WM_KEYDOWN)
               {
               if(pMsg->wParam=='M')//直接用上面的虛碼代替就可以響應(yīng)所指鍵
               MessageBox("hello");//如果按下M鍵彈出消息.比如想當(dāng)按下小鍵盤1時
               //彈出就用VK_NUMPAD1代替'M'
              }
               return CDialog::PreTranslateMessage(pMsg);
              }

              (二)組合鍵的用法:(本例響應(yīng)Ctrl+X鍵)
              BOOL CMydilog::PreTranslateMessage(MSG* pMsg)
              {
               // TODO: Add your specialized code here and/or call the base class
              
               if (pMsg->message == WM_KEYDOWN)
               {
               switch (pMsg->wParam)
               {
               case VK_ESCAPE:
               SetFocus ();
               return TRUE;
               case 'X':
               if(::GetKeyState(VK_CONTROL) < 0)//如果是Shift+X這里就
               //改成VK_SHIFT
               MessageBox("hello");
               return TRUE;
              
               }
               }
               return CDialog::PreTranslateMessage(pMsg);
              }

             


            posted on 2007-07-19 21:36 聶文龍 閱讀(10516) 評論(6)  編輯 收藏 引用 所屬分類: c++

            FeedBack:
            # re: vc模擬鼠標(biāo)鍵盤操作實(shí)用類 2007-07-19 21:37 聶文龍
            keybd_event(0x61,MapVirtualKey(0x61,0),0,0); //按下a鍵
            keybd_event(0x62,MapVirtualKey(0x62,0),0,0); //按下b鍵
            keybd_event(0x61,MapVirtualKey(0x61,0),KEYEVENTF_KEYUP,0); //釋放a鍵
            keybd_event(0x62,MapVirtualKey(0x62,0),KEYEVENTF_KEYUP,0); //釋放b鍵  回復(fù)  更多評論
              
            # re: vc模擬鼠標(biāo)鍵盤操作實(shí)用類 2007-07-19 21:39 聶文龍
            方法1:
            HWND hwnd=::FindWindow(0,"ddd"); //假設(shè)你要找的窗口標(biāo)題為“ddd”
            CWnd::FromHandle(hwnd)->SetForegroundWindow();
            ::PostMessage(hwnd,WM_KEYDOWN, VK_ESCAPE, 0L); //發(fā)送ESC按下的鍵盤消息
            方法2:這里以向記事本程序發(fā)送Ctrl+s按鍵消息為例:
            CWnd *pWnd = FindWindow("Notepad", NULL);
            if (pWnd->GetSafeHwnd())
            {
            pWnd->ShowWindow(SW_NORMAL);
            pWnd->SetForegroundWindow();
            keybd_event(VK_CONTROL, 0, 0, 0);
            keybd_event('S', 0, 0, 0);
            keybd_event(VK_CONTROL, 0, KEYEVENTF_KEYUP, 0);
            keybd_event('S', 0, KEYEVENTF_KEYUP, 0);
            }


            要對游戲有效必須填寫keybd_event的第二個參數(shù)---硬件掃描碼  回復(fù)  更多評論
              
            # re: vc模擬鼠標(biāo)鍵盤操作實(shí)用類 2007-12-01 11:11 柴門
            使用PostMessage發(fā)送按鍵消息可以在游戲不在前臺的時候都能正常執(zhí)行,而其它的使用keybd_event、SendInput都必須要求窗口在前臺。

            另外,一個疑惑就是,我在熱血江湖中測試,SendMessage不能實(shí)現(xiàn)模擬按鍵的目的,而PostMessage卻可以,這2個都是發(fā)送消息啊,為何結(jié)果卻是PostMessage可以而SendMessage不可以?難道是游戲屏蔽了?  回復(fù)  更多評論
              
            # re: vc模擬鼠標(biāo)鍵盤操作實(shí)用類 2008-11-15 13:58 逍遙行
            你好,能不能給我個demo,我是個初學(xué)者,不是很專業(yè)。

            我的email:erej@163.com  回復(fù)  更多評論
              
            # re: vc模擬鼠標(biāo)鍵盤操作實(shí)用類 2009-05-30 20:20 SmartCash
            @柴門
            SendMessage 發(fā)送的消息要有返回值 函數(shù)才會返回,你發(fā)到別的進(jìn)程去不回你,就不能運(yùn)行了,Post的不用返回值   回復(fù)  更多評論
              
            # re: vc模擬鼠標(biāo)鍵盤操作實(shí)用類 2011-06-17 00:04 internetafei@126.com
            我在熱血江湖里,測試的sendmessage ,postmessage 都不行,我用sky++ , 測試 postmessage 得到的消息是正確的,但是游戲沒反映。sendmessage 是一點(diǎn)消息也沒有。  回復(fù)  更多評論
              
            久久久综合九色合综国产| 久久久久国色AV免费看图片| 亚洲成色999久久网站| 伊人久久大香线蕉综合影院首页| 久久综合给合综合久久| 国产精品亚洲综合专区片高清久久久 | 久久福利片| 久久精品一区二区| 国产精品99久久久久久董美香| 99久久综合国产精品免费| 一本久久免费视频| 久久久久亚洲AV无码观看| 蜜桃麻豆WWW久久囤产精品| 久久精品国产久精国产一老狼| 精品国产乱码久久久久久人妻| 欧美黑人激情性久久| 日韩久久久久久中文人妻 | 久久精品国产乱子伦| 热99RE久久精品这里都是精品免费| 日韩电影久久久被窝网| 久久强奷乱码老熟女网站 | 97久久精品人妻人人搡人人玩| 国产午夜久久影院| 久久免费观看视频| 亚洲第一极品精品无码久久| 国产精品福利一区二区久久| 国产成人精品久久一区二区三区av | 久久久久久久精品妇女99| 国产aⅴ激情无码久久| 91精品国产9l久久久久| 国产激情久久久久影院小草| 人人狠狠综合88综合久久| 久久精品中文闷骚内射| 中文字幕一区二区三区久久网站| 国产精品无码久久久久| 亚洲午夜久久久久久久久久| 99久久精品免费看国产免费| 伊人久久大香线蕉亚洲| 精品久久久久久国产三级| 蜜臀久久99精品久久久久久小说| 久久国产成人午夜aⅴ影院|