成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

C#調用Windows API實現自動登錄

開發 后端
本文主要闡述了C#調用Windows API實現自動登錄的設計初衷、設計思想和設計步驟,希望對大家有用。

設計初衷:

公司為了安全性考慮,不讓密碼被太多人知道,所以想實現一個自動登錄的模塊。

設計思想:

主要是通過C#調用Windows API中的一些方法,找到目標窗口和進程之后把保存在數據庫中的用戶名密碼自動填入輸入框中,并登錄。

設計步驟:

一、調用Windows API。

 C#調用Windows API方法如下:

 1、引入命名空間:using System.Runtime.InteropServices;

 2、引用需要使用的方法,格式:[DllImport("DLL文件")]方法的聲明;

  1.  [DllImport("user32.dll")]private static extern bool ShowWindow(IntPtr hWnd, int nCmdShow);  
  2.  [DllImport("user32.dll")]private static extern bool SetForegroundWindow(IntPtr hWnd);  
  3.  [DllImport("user32.dll")]private static extern IntPtr FindWindow(string lpClassName,string lpWindowName);  
  4.  [DllImport("user32.dll")]private static extern int SendMessage(IntPtr hWnd,int Msg,int wParam,int lParam);  
  5.  [DllImport("user32.dll")]private static extern bool SetCursorPos(int X, int Y);  
  6.  [DllImport("user32.dll")]private static extern void mouse_event(int dwFlags, int dx, int dy, int dwData, int dwExtraInfo);  
  7.  [DllImport("user32.dll")]private static extern void keybd_event(byte bVk, byte bScan, uint dwFlags, uint dwExtraInfo);  
  8.  [DllImport("user32.dll")]private static extern bool SetWindowPos(IntPtr hWnd, IntPtr hWndlnsertAfter, int X, int Y, int cx, int cy, uint Flags);   
  9.  //ShowWindow參數  
  10.  private const int SW_SHOWNORMAL = 1;  
  11.  private const int SW_RESTORE = 9;  
  12.  private const int SW_SHOWNOACTIVATE = 4;  
  13.  //SendMessage參數  
  14.  private const int WM_KEYDOWN = 0X100;  
  15.  private const int WM_KEYUP = 0X101;  
  16.  private const int WM_SYSCHAR = 0X106;  
  17.  private const int WM_SYSKEYUP = 0X105;  
  18.  private const int WM_SYSKEYDOWN = 0X104;  
  19.  private const int WM_CHAR = 0X102; 

二、找到目標窗口

1)、根據窗口的標題得到句柄

 IntPtr myIntPtr = FindWindow(null,"窗口名"); //null為類名,可以用Spy++得到,也可以為空

 ShowWindow(myIntPtr, SW_RESTORE); //將窗口還原

 SetForegroundWindow(myIntPtr); //如果沒有ShowWindow,此方法不能設置最小化的窗口

2)、遍歷所有窗口得到句柄

1 定義委托方法CallBack,枚舉窗口API(EnumWindows),得到窗口名API(GetWindowTextW)和得到窗口類名API(GetClassNameW)

  1.  public delegate bool CallBack(int hwnd, int lParam);  
  2.  [DllImport("user32")]public static extern int EnumWindows(CallBack x, int y);  
  3.  [DllImport("user32.dll")]private static extern int GetWindowTextW(IntPtr hWnd, [MarshalAs(UnmanagedType.LPWStr)]StringBuilder lpString, int nMaxCount);  
  4.  [DllImport("user32.dll")]private static extern int GetClassNameW(IntPtr hWnd, [MarshalAs(UnmanagedType.LPWStr)]StringBuilder lpString, int nMaxCount); 

2 調用EnumWindows遍歷窗口

  1.  CallBack myCallBack = new CallBack(Recall);  
  2.  EnumWindows(myCallBack, 0); 

3 回調方法Recall

  1.  public bool Recall(int hwnd, int lParam)  
  2.  {  
  3.   StringBuilder sb = new StringBuilder(256);  
  4.   IntPtr PW = new IntPtr(hwnd);  
  5.  
  6.   GetWindowTextW(PW,sb,sb.Capacity); //得到窗口名并保存在strName中  
  7.   string strName = sb.ToString();  
  8.  
  9.   GetClassNameW(PW,sb,sb.Capacity); //得到窗口類名并保存在strClass中  
  10.   string strClass = sb.ToString();  
  11.  
  12.   if (strName.IndexOf("窗口名關鍵字") >= 0 && strClass.IndexOf("類名關鍵字") >= 0)  
  13.   {  
  14.    return false//返回false中止EnumWindows遍歷  
  15.   }  
  16.   else 
  17.   {  
  18.    return true//返回true繼續EnumWindows遍歷  
  19.   }  
  20.  } 

3)、打開窗口得到句柄

1 定義設置活動窗口API(SetActiveWindow),設置前臺窗口API(SetForegroundWindow)

  1.  [DllImport("user32.dll")]static extern IntPtr SetActiveWindow(IntPtr hWnd);  
  2.  [DllImport("user32.dll")][return: MarshalAs(UnmanagedType.Bool)]static extern bool SetForegroundWindow(IntPtr hWnd); 

2 打開窗口

  1.  Process proc = Process.Start(@"目標程序路徑");  
  2.  SetActiveWindow(proc.MainWindowHandle);  
  3.  SetForegroundWindow(proc.MainWindowHandle); 

三、向指定的窗口輸入數據

1 利用發送消息API(SendMessage)向窗口發送數據 

  1. InputStr(myIntPtr, _GameID); //輸入游戲ID  
  2.  SendMessage(myIntPtr, WM_SYSKEYDOWN, 0X09, 0); //輸入TAB(0x09)  
  3.  SendMessage(myIntPtr, WM_SYSKEYUP, 0X09, 0);  
  4.  InputStr(myIntPtr, _GamePass); //輸入游戲密碼  
  5.  SendMessage(myIntPtr, WM_SYSKEYDOWN, 0X0D, 0); //輸入ENTER(0x0d)  
  6.  SendMessage(myIntPtr, WM_SYSKEYUP, 0X0D, 0);  
  7.  
  8.  /// < summary>  
  9.  /// 發送一個字符串  
  10.  /// < /summary>  
  11.  /// < param name="myIntPtr">窗口句柄< /param>  
  12.  /// < param name="Input">字符串< /param>  
  13.  public void InputStr(IntPtr myIntPtr, string Input)  
  14.  {  
  15.   byte[] ch = (ASCIIEncoding.ASCII.GetBytes(Input));  
  16.   for (int i = 0; i <  ch.Length; i++)  
  17.   {   
  18.    SendMessage(PW, WM_CHAR, ch, 0);  
  19.   }  
  20.  }  
  21.  

2 利用鼠標和鍵盤模擬向窗口發送數據

  1.  SetWindowPos(PW, (IntPtr)(-1), 0, 0, 0, 0, 0x0040 | 0x0001); //設置窗口位置  
  2.  SetCursorPos(476, 177); //設置鼠標位置  
  3.  mouse_event(0x0002, 0, 0, 0, 0); //模擬鼠標按下操作  
  4.  mouse_event(0x0004, 0, 0, 0, 0); //模擬鼠標放開操作  
  5.  SendKeys.Send(_GameID);   //模擬鍵盤輸入游戲ID  
  6.  SendKeys.Send("{TAB}"); //模擬鍵盤輸入TAB  
  7.  SendKeys.Send(_GamePass); //模擬鍵盤輸入游戲密碼  
  8.  SendKeys.Send("{ENTER}"); //模擬鍵盤輸入ENTER 

另:上面還提到了keybd_event方法,用法和mouse_event方法類似,作用和SendKeys.Send一樣。

這樣,就實現了C#調用Windows API自動登錄。

【編輯推薦】

  1. 四種C#參數類型簡介
  2. Java與C#的不同之處
  3. 學習C#程序集
  4. C#和ADO.NET建立數據綁定網格
  5. 介紹C# 4.0新特性dynamic
責任編輯:book05 來源: csdn
相關推薦

2009-07-31 16:12:10

Windows APIC#

2009-08-03 13:34:57

C#調用Windows

2009-08-17 13:18:01

C#調用Windows

2009-08-17 13:49:20

C#中調用Window

2009-08-17 13:26:20

C#調用Windows

2009-08-07 16:10:20

C#調用API

2009-08-05 15:10:19

C#調用GoogleE

2009-08-03 13:13:52

C#調用Outlook

2009-08-07 16:43:44

C#調用Windows

2009-08-03 14:09:15

C#調用API

2009-08-21 17:42:36

C#調用API

2009-08-07 17:01:22

C#調用QuickTe

2009-07-31 15:47:20

Win32 APIC#

2009-08-17 17:08:35

C# ADSL自動撥號

2012-05-31 13:59:43

PHP

2009-08-11 14:16:00

Winform調用WEC#

2009-09-03 16:20:14

C#調用Windows

2024-05-16 12:33:37

C#編程指針

2009-08-21 11:24:16

C#異步調用

2009-08-17 16:18:47

C#調用CreateO
點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 欧美日韩亚洲二区 | 国产亚洲精品精品国产亚洲综合 | 91网站在线观看视频 | 精品日韩在线 | 久久福利网站 | 欧美高清视频 | 一级毛片高清 | 手机看黄av免费网址 | 欧美一区二区黄 | 国产超碰人人爽人人做人人爱 | 欧美精品一区二区免费 | 久久免费精品视频 | 日韩在线一区二区 | 欧美日韩久久精品 | 成人国产精品免费观看 | 91免费电影 | 欧美成视频 | 日本免费小视频 | 欧美日韩三区 | 91国产在线播放 | 九九热在线免费视频 | 久久久国产一区二区 | 精品伦精品一区二区三区视频 | 国产三级一区二区三区 | 国产伦精品一区二区三区精品视频 | 日韩高清中文字幕 | 久久99精品久久久久久噜噜 | 国产真实精品久久二三区 | 日韩精品久久久 | 99热首页 | 久久久久久亚洲 | 精品久久国产老人久久综合 | 日韩在线小视频 | 天天综合国产 | 美女啪啪国产 | 国产精品99久久久久久久vr | www国产精品 | 国产一区二区不卡 | 日本一区二区三区在线观看 | 手机在线不卡av | 日本天堂视频在线观看 |