一区二区三区日韩精品-日韩经典一区二区三区-五月激情综合丁香婷婷-欧美精品中文字幕专区

分享

c#虛擬鍵盤、虛擬鼠標(biāo)以及窗口查找 - 唐朝程序員 - 博客園

 donixli1314 2008-07-09
我想編制一個(gè)qq自動(dòng)登陸程序,確發(fā)現(xiàn)C#中對(duì)很多api沒有封裝,只有使用平臺(tái)調(diào)用了。其中用到窗體查找和虛擬鍵盤、虛擬鼠標(biāo)等函數(shù)。具體代碼如下:

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Text;
using System.Windows.Forms;
using System.Runtime.InteropServices;

namespace SimulateMouse
{
    
public partial class DemoForm : Form
    
{
        [StructLayout(LayoutKind.Sequential)]
        
struct NativeRECT
        
{
            
public int left;
            
public int top;
            
public int right;
            
public int bottom;
        }


        [Flags]
        
enum MouseEventFlag : uint
        
{
            Move        
= 0x0001,
            LeftDown    
= 0x0002,
            LeftUp      
= 0x0004,
            RightDown   
= 0x0008,
            RightUp     
= 0x0010,
            MiddleDown  
= 0x0020,
            MiddleUp    
= 0x0040,
            XDown       
= 0x0080,
            XUp         
= 0x0100,
            Wheel       
= 0x0800,
            VirtualDesk 
= 0x4000,
            Absolute    
= 0x8000
        }


        [DllImport(
"user32.dll")]
        
static extern bool SetCursorPos(int X, int Y);  

        [DllImport(
"user32.dll")]
        
static extern void mouse_event(MouseEventFlag flags, int dx, int dy, uint data, UIntPtr extraInfo);

        [DllImport(
"user32.dll")]
        
static extern IntPtr FindWindow(string strClass, string strWindow);

        [DllImport(
"user32.dll")]
        
static extern IntPtr FindWindowEx(HandleRef hwndParent, HandleRef hwndChildAfter, string strClass, string strWindow);

        [DllImport(
"user32.dll")]
        
static extern bool GetWindowRect(HandleRef hwnd, out NativeRECT rect);
        [DllImport(
"user32.dll")]
        
static extern void keybd_event(byte bVk,byte bScan,uint dwFlags,uint dwExtraInfo);
        
private Point endPosition;

        
public DemoForm()
        
{
            InitializeComponent();
        }


               
private void button1_Click(object sender, EventArgs e)
        
{
            NativeRECT rect;

            IntPtr ptrTaskbar 
= FindWindow("#32770","QQ用戶登錄");
            
if (ptrTaskbar == IntPtr.Zero)
            
{
                MessageBox.Show(
"No taskbar found.");
                
return;
            }


            IntPtr ptrStartBtn 
= FindWindowEx(new HandleRef(this, ptrTaskbar), new HandleRef(this, IntPtr.Zero), "ComboBox"null);
            
if (ptrStartBtn == IntPtr.Zero)
            
{
                MessageBox.Show(
"No qq號(hào)碼框 found.");
                
return;
            }


            GetWindowRect(
new HandleRef(this, ptrStartBtn), out rect);

            endPosition.X 
= (rect.left + rect.right) / 2;
            endPosition.Y 
= (rect.top + rect.bottom) / 2;

            SetCursorPos(endPosition.X, endPosition.Y);
            mouse_event(MouseEventFlag.LeftDown, 
000, UIntPtr.Zero);
            mouse_event(MouseEventFlag.LeftUp, 
000, UIntPtr.Zero);
            mouse_event(MouseEventFlag.LeftDown, 
000, UIntPtr.Zero);
            mouse_event(MouseEventFlag.LeftUp, 
000, UIntPtr.Zero);


           

           System.IO.StreamWriter tw 
= new System.IO.StreamWriter(@"d:/aa.txt");
           tw.Write(
"49593533");
           tw.Close();

           System.IO.StreamReader tr 
= new System.IO.StreamReader(@"d:/aa.txt");
           String mystr 
= tr.ReadToEnd();
           tr.Close();

           
for(int i=0;i<mystr.Length;i++)
           keybd_event((
byte)mystr[i], 000);

       IntPtr ptrPassWord 
= FindWindowEx(new HandleRef(this, ptrTaskbar), new HandleRef(this, IntPtr.Zero), "#32770"null);
       GetWindowRect(
new HandleRef(this, ptrPassWord), out rect);

       endPosition.X 
= (rect.left + rect.right) / 2;
       endPosition.Y 
= (rect.top + rect.bottom) / 2;

       SetCursorPos(endPosition.X, endPosition.Y);
       mouse_event(MouseEventFlag.LeftDown, 
000, UIntPtr.Zero);
       mouse_event(MouseEventFlag.LeftUp, 
000, UIntPtr.Zero);
       mouse_event(MouseEventFlag.LeftDown, 
000, UIntPtr.Zero);
       mouse_event(MouseEventFlag.LeftUp, 
000, UIntPtr.Zero);


       mystr 
= "mypassword";
       
for (int i = 0; i < mystr.Length; i++)
       
{
          keybd_event((
byte)mystr[i], 000);
       }


        }

    }

}


說明:(
1)所有虛擬鍵盤碼可以到http://msdn.microsoft.com/library/default.asp?url=/library/en-us/winui/WinUI/WindowsUserInterface/UserInput/VirtualKeyCodes.asp去查找。

2)首先介紹一下Keybd_event函數(shù)。Keybd_event能觸發(fā)一個(gè)按鍵事件,也就是說回產(chǎn)生一個(gè)WM_KEYDOWN或WM_KEYUP消息。當(dāng)然也可以用產(chǎn)生這兩個(gè)消息來模擬按鍵,但是沒有直接用這個(gè)函數(shù)方便。Keybd_event共有四個(gè)參數(shù),第一個(gè)為按鍵的虛擬鍵值,如回車鍵為vk_return, tab鍵為vk_tab。第二個(gè)參數(shù)為掃描碼,一般不用設(shè)置,用0代替就行第三個(gè)參數(shù)為選項(xiàng)標(biāo)志,如果為keydown則置0即可,如果為keyup則設(shè)成“KEYEVENTF_KEYUP”或者2,第四個(gè)參數(shù)一般也是置0即可。

keybd_event(VK_CONTROL, (BYTE)
00 ,0);
keybd_event(
'A',(BYTE)00 ,0); //此處可以用 'A', (BYTE)65, 用'a'不起作用.
keybd_event('A', (BYTE)0, KEYEVENTF_KEYUP,0);
keybd_event(VK_CONTROL, (BYTE)
0, KEYEVENTF_KEYUP,0);

上面的代碼表示 ctl
+a

    本站是提供個(gè)人知識(shí)管理的網(wǎng)絡(luò)存儲(chǔ)空間,所有內(nèi)容均由用戶發(fā)布,不代表本站觀點(diǎn)。請(qǐng)注意甄別內(nèi)容中的聯(lián)系方式、誘導(dǎo)購(gòu)買等信息,謹(jǐn)防詐騙。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請(qǐng)點(diǎn)擊一鍵舉報(bào)。
    轉(zhuǎn)藏 分享 獻(xiàn)花(0

    0條評(píng)論

    發(fā)表

    請(qǐng)遵守用戶 評(píng)論公約

    類似文章 更多

    国产精品十八禁亚洲黄污免费观看| 亚洲天堂有码中文字幕视频| 国产中文字幕一区二区| 欧美午夜色视频国产精品| 日韩人妻av中文字幕| 日韩一区二区免费在线观看| 97人妻人人揉人人躁人人| 欧美一区二区三区播放| 伊人色综合久久伊人婷婷| 国产精品伦一区二区三区在线| 日韩国产中文在线视频| 伊人久久五月天综合网| 色欧美一区二区三区在线| 国产成人高清精品尤物| 欧美日韩国产综合在线| 亚洲国产av在线视频| 国内尹人香蕉综合在线| 亚洲av日韩av高潮无打码| 午夜国产精品福利在线观看| 五月天丁香婷婷一区二区| 三级高清有码在线观看| 国产又粗又爽又猛又黄的| 久久综合狠狠综合久久综合| 成人午夜在线视频观看| 懂色一区二区三区四区| 99少妇偷拍视频在线| 中日韩美女黄色一级片| 综合久综合久综合久久| 国产又色又爽又黄的精品视频| 亚洲少妇一区二区三区懂色| 免费一区二区三区少妇| 日韩免费国产91在线| 日韩女优精品一区二区三区| 很黄很污在线免费观看| 久草视频这里只是精品| 久七久精品视频黄色的| 久久精品国产99精品最新| 久久午夜福利精品日韩| 日本精品免费在线观看| 欧美丰满人妻少妇精品| 国产精品欧美激情在线观看|