c#虚拟键盘、虚拟鼠标以及窗口查找

摘要:
我想编译一个qq自动登录程序。我发现C#中的许多api都没有封装,只是由平台调用。它使用窗口搜索、虚拟键盘和虚拟鼠标等功能。
c#虚拟键盘、虚拟鼠标以及窗口查找第1张我想编制一个qq自动登陆程序,确发现C#中对很多api没有封装,只有使用平台调用了。其中用到窗体查找和虚拟键盘、虚拟鼠标等函数。具体代码如下:
c#虚拟键盘、虚拟鼠标以及窗口查找第1张
c#虚拟键盘、虚拟鼠标以及窗口查找第1张
using System;
c#虚拟键盘、虚拟鼠标以及窗口查找第1张
using System.Collections.Generic;
c#虚拟键盘、虚拟鼠标以及窗口查找第1张
using System.ComponentModel;
c#虚拟键盘、虚拟鼠标以及窗口查找第1张
using System.Data;
c#虚拟键盘、虚拟鼠标以及窗口查找第1张
using System.Drawing;
c#虚拟键盘、虚拟鼠标以及窗口查找第1张
using System.Text;
c#虚拟键盘、虚拟鼠标以及窗口查找第1张
using System.Windows.Forms;
c#虚拟键盘、虚拟鼠标以及窗口查找第1张
using System.Runtime.InteropServices;
c#虚拟键盘、虚拟鼠标以及窗口查找第1张
c#虚拟键盘、虚拟鼠标以及窗口查找第1张
namespace SimulateMouse
c#虚拟键盘、虚拟鼠标以及窗口查找第13张c#虚拟键盘、虚拟鼠标以及窗口查找第14张
c#虚拟键盘、虚拟鼠标以及窗口查找第15张{
c#虚拟键盘、虚拟鼠标以及窗口查找第16张    
public partial class DemoForm : Form
c#虚拟键盘、虚拟鼠标以及窗口查找第17张c#虚拟键盘、虚拟鼠标以及窗口查找第18张    
c#虚拟键盘、虚拟鼠标以及窗口查找第15张{
c#虚拟键盘、虚拟鼠标以及窗口查找第16张        [StructLayout(LayoutKind.Sequential)]
c#虚拟键盘、虚拟鼠标以及窗口查找第16张        
struct NativeRECT
c#虚拟键盘、虚拟鼠标以及窗口查找第17张c#虚拟键盘、虚拟鼠标以及窗口查找第18张        
c#虚拟键盘、虚拟鼠标以及窗口查找第15张{
c#虚拟键盘、虚拟鼠标以及窗口查找第16张            
public int left;
c#虚拟键盘、虚拟鼠标以及窗口查找第16张            
public int top;
c#虚拟键盘、虚拟鼠标以及窗口查找第16张            
public int right;
c#虚拟键盘、虚拟鼠标以及窗口查找第16张            
public int bottom;
c#虚拟键盘、虚拟鼠标以及窗口查找第29张        }

c#虚拟键盘、虚拟鼠标以及窗口查找第16张
c#虚拟键盘、虚拟鼠标以及窗口查找第16张        [Flags]
c#虚拟键盘、虚拟鼠标以及窗口查找第16张        
enum MouseEventFlag : uint
c#虚拟键盘、虚拟鼠标以及窗口查找第17张c#虚拟键盘、虚拟鼠标以及窗口查找第18张        
c#虚拟键盘、虚拟鼠标以及窗口查找第15张{
c#虚拟键盘、虚拟鼠标以及窗口查找第16张            Move        
= 0x0001,
c#虚拟键盘、虚拟鼠标以及窗口查找第16张            LeftDown    
= 0x0002,
c#虚拟键盘、虚拟鼠标以及窗口查找第16张            LeftUp      
= 0x0004,
c#虚拟键盘、虚拟鼠标以及窗口查找第16张            RightDown   
= 0x0008,
c#虚拟键盘、虚拟鼠标以及窗口查找第16张            RightUp     
= 0x0010,
c#虚拟键盘、虚拟鼠标以及窗口查找第16张            MiddleDown  
= 0x0020,
c#虚拟键盘、虚拟鼠标以及窗口查找第16张            MiddleUp    
= 0x0040,
c#虚拟键盘、虚拟鼠标以及窗口查找第16张            XDown       
= 0x0080,
c#虚拟键盘、虚拟鼠标以及窗口查找第16张            XUp         
= 0x0100,
c#虚拟键盘、虚拟鼠标以及窗口查找第16张            Wheel       
= 0x0800,
c#虚拟键盘、虚拟鼠标以及窗口查找第16张            VirtualDesk 
= 0x4000,
c#虚拟键盘、虚拟鼠标以及窗口查找第16张            Absolute    
= 0x8000
c#虚拟键盘、虚拟鼠标以及窗口查找第29张        }

c#虚拟键盘、虚拟鼠标以及窗口查找第16张
c#虚拟键盘、虚拟鼠标以及窗口查找第16张        [DllImport(
"user32.dll")]
c#虚拟键盘、虚拟鼠标以及窗口查找第16张        
static extern bool SetCursorPos(int X, int Y);  
c#虚拟键盘、虚拟鼠标以及窗口查找第16张
c#虚拟键盘、虚拟鼠标以及窗口查找第16张        [DllImport(
"user32.dll")]
c#虚拟键盘、虚拟鼠标以及窗口查找第16张        
static extern void mouse_event(MouseEventFlag flags, int dx, int dy, uint data, UIntPtr extraInfo);
c#虚拟键盘、虚拟鼠标以及窗口查找第16张
c#虚拟键盘、虚拟鼠标以及窗口查找第16张        [DllImport(
"user32.dll")]
c#虚拟键盘、虚拟鼠标以及窗口查找第16张        
static extern IntPtr FindWindow(string strClass, string strWindow);
c#虚拟键盘、虚拟鼠标以及窗口查找第16张
c#虚拟键盘、虚拟鼠标以及窗口查找第16张        [DllImport(
"user32.dll")]
c#虚拟键盘、虚拟鼠标以及窗口查找第16张        
static extern IntPtr FindWindowEx(HandleRef hwndParent, HandleRef hwndChildAfter, string strClass, string strWindow);
c#虚拟键盘、虚拟鼠标以及窗口查找第16张
c#虚拟键盘、虚拟鼠标以及窗口查找第16张        [DllImport(
"user32.dll")]
c#虚拟键盘、虚拟鼠标以及窗口查找第16张        
static extern bool GetWindowRect(HandleRef hwnd, out NativeRECT rect);
c#虚拟键盘、虚拟鼠标以及窗口查找第16张        [DllImport(
"user32.dll")]
c#虚拟键盘、虚拟鼠标以及窗口查找第16张        
static extern void keybd_event(byte bVk,byte bScan,uint dwFlags,uint dwExtraInfo);
c#虚拟键盘、虚拟鼠标以及窗口查找第16张        
private Point endPosition;
c#虚拟键盘、虚拟鼠标以及窗口查找第16张
c#虚拟键盘、虚拟鼠标以及窗口查找第16张        
public DemoForm()
c#虚拟键盘、虚拟鼠标以及窗口查找第17张c#虚拟键盘、虚拟鼠标以及窗口查找第18张        
c#虚拟键盘、虚拟鼠标以及窗口查找第15张{
c#虚拟键盘、虚拟鼠标以及窗口查找第16张            InitializeComponent();
c#虚拟键盘、虚拟鼠标以及窗口查找第29张        }

c#虚拟键盘、虚拟鼠标以及窗口查找第16张
c#虚拟键盘、虚拟鼠标以及窗口查找第16张               
private void button1_Click(object sender, EventArgs e)
c#虚拟键盘、虚拟鼠标以及窗口查找第17张c#虚拟键盘、虚拟鼠标以及窗口查找第18张        
c#虚拟键盘、虚拟鼠标以及窗口查找第15张{
c#虚拟键盘、虚拟鼠标以及窗口查找第16张            NativeRECT rect;
c#虚拟键盘、虚拟鼠标以及窗口查找第16张
c#虚拟键盘、虚拟鼠标以及窗口查找第16张            IntPtr ptrTaskbar 
= FindWindow("#32770","QQ用户登录");
c#虚拟键盘、虚拟鼠标以及窗口查找第16张            
if (ptrTaskbar == IntPtr.Zero)
c#虚拟键盘、虚拟鼠标以及窗口查找第17张c#虚拟键盘、虚拟鼠标以及窗口查找第18张            
c#虚拟键盘、虚拟鼠标以及窗口查找第15张{
c#虚拟键盘、虚拟鼠标以及窗口查找第16张                MessageBox.Show(
"No taskbar found.");
c#虚拟键盘、虚拟鼠标以及窗口查找第16张                
return;
c#虚拟键盘、虚拟鼠标以及窗口查找第29张            }

c#虚拟键盘、虚拟鼠标以及窗口查找第16张
c#虚拟键盘、虚拟鼠标以及窗口查找第16张            IntPtr ptrStartBtn 
= FindWindowEx(new HandleRef(this, ptrTaskbar), new HandleRef(this, IntPtr.Zero), "ComboBox"null);
c#虚拟键盘、虚拟鼠标以及窗口查找第16张            
if (ptrStartBtn == IntPtr.Zero)
c#虚拟键盘、虚拟鼠标以及窗口查找第17张c#虚拟键盘、虚拟鼠标以及窗口查找第18张            
c#虚拟键盘、虚拟鼠标以及窗口查找第15张{
c#虚拟键盘、虚拟鼠标以及窗口查找第16张                MessageBox.Show(
"No qq号码框 found.");
c#虚拟键盘、虚拟鼠标以及窗口查找第16张                
return;
c#虚拟键盘、虚拟鼠标以及窗口查找第29张            }

c#虚拟键盘、虚拟鼠标以及窗口查找第16张
c#虚拟键盘、虚拟鼠标以及窗口查找第16张            GetWindowRect(
new HandleRef(this, ptrStartBtn), out rect);
c#虚拟键盘、虚拟鼠标以及窗口查找第16张
c#虚拟键盘、虚拟鼠标以及窗口查找第16张            endPosition.X 
= (rect.left + rect.right) / 2;
c#虚拟键盘、虚拟鼠标以及窗口查找第16张            endPosition.Y 
= (rect.top + rect.bottom) / 2;
c#虚拟键盘、虚拟鼠标以及窗口查找第16张
c#虚拟键盘、虚拟鼠标以及窗口查找第16张            SetCursorPos(endPosition.X, endPosition.Y);
c#虚拟键盘、虚拟鼠标以及窗口查找第16张            mouse_event(MouseEventFlag.LeftDown, 
000, UIntPtr.Zero);
c#虚拟键盘、虚拟鼠标以及窗口查找第16张            mouse_event(MouseEventFlag.LeftUp, 
000, UIntPtr.Zero);
c#虚拟键盘、虚拟鼠标以及窗口查找第16张            mouse_event(MouseEventFlag.LeftDown, 
000, UIntPtr.Zero);
c#虚拟键盘、虚拟鼠标以及窗口查找第16张            mouse_event(MouseEventFlag.LeftUp, 
000, UIntPtr.Zero);
c#虚拟键盘、虚拟鼠标以及窗口查找第16张
c#虚拟键盘、虚拟鼠标以及窗口查找第16张
c#虚拟键盘、虚拟鼠标以及窗口查找第16张           
c#虚拟键盘、虚拟鼠标以及窗口查找第16张
c#虚拟键盘、虚拟鼠标以及窗口查找第16张           System.IO.StreamWriter tw 
= new System.IO.StreamWriter(@"d:/aa.txt");
c#虚拟键盘、虚拟鼠标以及窗口查找第16张           tw.Write(
"49593533");
c#虚拟键盘、虚拟鼠标以及窗口查找第16张           tw.Close();
c#虚拟键盘、虚拟鼠标以及窗口查找第16张
c#虚拟键盘、虚拟鼠标以及窗口查找第16张           System.IO.StreamReader tr 
= new System.IO.StreamReader(@"d:/aa.txt");
c#虚拟键盘、虚拟鼠标以及窗口查找第16张           String mystr 
= tr.ReadToEnd();
c#虚拟键盘、虚拟鼠标以及窗口查找第16张           tr.Close();
c#虚拟键盘、虚拟鼠标以及窗口查找第16张
c#虚拟键盘、虚拟鼠标以及窗口查找第16张           
for(int i=0;i<mystr.Length;i++)
c#虚拟键盘、虚拟鼠标以及窗口查找第16张           keybd_event((
byte)mystr[i], 000);
c#虚拟键盘、虚拟鼠标以及窗口查找第16张
c#虚拟键盘、虚拟鼠标以及窗口查找第16张       IntPtr ptrPassWord 
= FindWindowEx(new HandleRef(this, ptrTaskbar), new HandleRef(this, IntPtr.Zero), "#32770"null);
c#虚拟键盘、虚拟鼠标以及窗口查找第16张       GetWindowRect(
new HandleRef(this, ptrPassWord), out rect);
c#虚拟键盘、虚拟鼠标以及窗口查找第16张
c#虚拟键盘、虚拟鼠标以及窗口查找第16张       endPosition.X 
= (rect.left + rect.right) / 2;
c#虚拟键盘、虚拟鼠标以及窗口查找第16张       endPosition.Y 
= (rect.top + rect.bottom) / 2;
c#虚拟键盘、虚拟鼠标以及窗口查找第16张
c#虚拟键盘、虚拟鼠标以及窗口查找第16张       SetCursorPos(endPosition.X, endPosition.Y);
c#虚拟键盘、虚拟鼠标以及窗口查找第16张       mouse_event(MouseEventFlag.LeftDown, 
000, UIntPtr.Zero);
c#虚拟键盘、虚拟鼠标以及窗口查找第16张       mouse_event(MouseEventFlag.LeftUp, 
000, UIntPtr.Zero);
c#虚拟键盘、虚拟鼠标以及窗口查找第16张       mouse_event(MouseEventFlag.LeftDown, 
000, UIntPtr.Zero);
c#虚拟键盘、虚拟鼠标以及窗口查找第16张       mouse_event(MouseEventFlag.LeftUp, 
000, UIntPtr.Zero);
c#虚拟键盘、虚拟鼠标以及窗口查找第16张
c#虚拟键盘、虚拟鼠标以及窗口查找第16张
c#虚拟键盘、虚拟鼠标以及窗口查找第16张       mystr 
= "mypassword";
c#虚拟键盘、虚拟鼠标以及窗口查找第16张       
for (int i = 0; i < mystr.Length; i++)
c#虚拟键盘、虚拟鼠标以及窗口查找第17张c#虚拟键盘、虚拟鼠标以及窗口查找第18张       
c#虚拟键盘、虚拟鼠标以及窗口查找第15张{
c#虚拟键盘、虚拟鼠标以及窗口查找第16张          keybd_event((
byte)mystr[i], 000);
c#虚拟键盘、虚拟鼠标以及窗口查找第29张       }

c#虚拟键盘、虚拟鼠标以及窗口查找第16张
c#虚拟键盘、虚拟鼠标以及窗口查找第29张        }

c#虚拟键盘、虚拟鼠标以及窗口查找第29张    }

c#虚拟键盘、虚拟鼠标以及窗口查找第147张}

c#虚拟键盘、虚拟鼠标以及窗口查找第1张
c#虚拟键盘、虚拟鼠标以及窗口查找第1张说明:(
1)所有虚拟键盘码可以到http://msdn.microsoft.com/library/default.asp?url=/library/en-us/winui/WinUI/WindowsUserInterface/UserInput/VirtualKeyCodes.asp去查找。
c#虚拟键盘、虚拟鼠标以及窗口查找第1张

c#虚拟键盘、虚拟鼠标以及窗口查找第1张
2)首先介绍一下Keybd_event函数。Keybd_event能触发一个按键事件,也就是说回产生一个WM_KEYDOWN或WM_KEYUP消息。当然也可以用产生这两个消息来模拟按键,但是没有直接用这个函数方便。Keybd_event共有四个参数,第一个为按键的虚拟键值,如回车键为vk_return, tab键为vk_tab。第二个参数为扫描码,一般不用设置,用0代替就行第三个参数为选项标志,如果为keydown则置0即可,如果为keyup则设成“KEYEVENTF_KEYUP”或者2,第四个参数一般也是置0即可。
c#虚拟键盘、虚拟鼠标以及窗口查找第1张
c#虚拟键盘、虚拟鼠标以及窗口查找第1张keybd_event(VK_CONTROL, (BYTE)
00 ,0);
c#虚拟键盘、虚拟鼠标以及窗口查找第1张keybd_event(
'A',(BYTE)00 ,0); //此处可以用 'A', (BYTE)65, 用'a'不起作用.
c#虚拟键盘、虚拟鼠标以及窗口查找第1张
keybd_event('A', (BYTE)0, KEYEVENTF_KEYUP,0);
c#虚拟键盘、虚拟鼠标以及窗口查找第1张keybd_event(VK_CONTROL, (BYTE)
0, KEYEVENTF_KEYUP,0);
c#虚拟键盘、虚拟鼠标以及窗口查找第1张
c#虚拟键盘、虚拟鼠标以及窗口查找第1张上面的代码表示 ctl
+a
c#虚拟键盘、虚拟鼠标以及窗口查找第1张
c#虚拟键盘、虚拟鼠标以及窗口查找第1张 
c#虚拟键盘、虚拟鼠标以及窗口查找第1张

免责声明:文章转载自《c#虚拟键盘、虚拟鼠标以及窗口查找》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇jQuery 1.9升级指南Failed to connect to the host via ssh: Permission denied (publickey,gssapi-keyex,gssapi-with-mic,password下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

随便看看

android studio如何查看数据库文件

Android Studio可以通过两种方式查看数据库文件:1。SQLCOUT优点:功能强大。缺点:解决麻烦。2.Android DeviceMonitor中FileExpoler的优点:免费缺点:需要导出数据库并使用数据库可视化工具查看;手机需要root获得su权限,并通过adb命令修改/data/data/data下数据库文件的访问权限。具体修改方法:...

季调方法论

理论与实践“季节性调整原则季节性调整方法分析季节性调整实践中遇到的问题只有同比数据缺少春节效应阅读”通货膨胀的季节性调整和预测模型“通货膨胀预测CPI的季节性调整具有明显的春节效应考虑春节效应的季节性调节春节效应的确定CPI的季节调整基于季节性调整后CPI的预测通货膨胀的修正(应对非洲猪瘟的影响)修订并扩大了季度调查方法的CPI预测读数...

【问题】如何批量导出AI文件里内嵌的图片

截止目前为止,新版的AI里面没有直接可以批量导出内嵌图片的选项,手动一个个导出实在太麻烦了。有人说用Phantasm插件可以导出,但新版的找不到对应支持的插件版本,所以这里就不说了。这里介绍一种简单粗暴的方法。...

ClickHouse之访问权限控制

Ck当前只有select和insert。这是我刚才提到的:60cd41aedc4e47e8883682b416109e7b7e345e15ecc63c2c98ecdab5e8e053a只读defaultdefault此部分意味着添加具有只读权限的dba用户。允许访问的数据库是默认值。源IP不受限制::/0尝试以dba用户身份登录:clickhouse-cli...

mysql 视图

如果更新的值不在视图范围内,则不允许更新。如果创建视图时未使用withcheck选项,则MySQL在更新视图中的某些数据时不会执行有效性检查。对于上面的团队视图,MySQL将使用视图的公式来替换它,视图公式将合并到select中。也就是说,它最终被提交给MySQL来处理SQL语句。具体来说,MySQL首先获得视图执行结果,该结果形成中间结果,并临时存储在内存...

64/32位oracle客户端安装配置详细教程

如何连接远程oracle数据库?.点击完成,正式安装产品…如何实验安装是否可用?...