C# 屏幕取词 取密码 例程 源码

基本原理

GetCursorPos   用来取得鼠标的坐标  
WindowFromPoint   用来取得相应坐标上的对象的句柄  
GetWindowText   取得相应对象上的文字  

 

以上函数在C#中的定义方法例程

 

GetCursorPos定义与用法 

using System.Runtime.InteropServices;

        [DllImport("user32.dll")]

       static extern bool GetCursorPos(ref Point lpPoint);

 

[DllImport("user32.dll")]
[return: MarshalAs(UnmanagedType.Bool)]
static extern bool GetCursorPos(out Point lpPoint);

 

例程:
Point p;
if (GetCursorPos(out p))
{
    label1.Text = Convert.ToString(p.X) + ";" + Convert.ToString(p.Y);
}

WindowFromPoint定义与用法 

[DllImport("user32.dll")]
static extern IntPtr WindowFromPoint(POINT Point);

例程:

[DllImport("user32.dll")]
static extern IntPtr WindowFromPoint(POINT Point);

[DllImport("user32.dll")]
static extern bool GetCursorPos(out Point lpPoint);

[DllImport("user32.dll")]
static extern bool SetWindowText(IntPtr hWnd, string lpString);

Point p;
if (GetCursorPos(out p))
{
   IntPtr hWnd = WindowFromPoint(p);
   SetWindowText(hWnd, "Window Found");
}

 

GetWindowText/GetWindowTextLength定义与用法例程

//[DllImport("user32.dll", SetLastError=true, CharSet=CharSet.Auto)]
//static extern int GetWindowText(IntPtr hWnd, [Out] StringBuilder lpString, int nMaxCount);

[DllImport("user32.dll", CharSet = CharSet.Auto, SetLastError = true)]
static extern int GetWindowText(IntPtr hWnd, StringBuilder lpString, int nMaxCount);

[DllImport("user32.dll", SetLastError=true, CharSet=CharSet.Auto)]
static extern int GetWindowTextLength(IntPtr hWnd);
 

例程:

public string GetText(IntPtr hWnd)
{
    // Allocate correct string length first
    int length       = GetWindowTextLength(hWnd);
    StringBuilder sb = new StringBuilder(length + 1);
    GetWindowText(hWnd, sb, sb.Capacity);
    return sb.ToString();
}
 

用VB编写屏幕取看密码工具

  看到诸如Suit Boy、GetCaption之类的看密码(星星)的软件后,我总想自己编一个。经过一番努力,终于实现了这一愿望。不敢独享,现介绍如下:
  一、用GetCursorPos和WindowFormPoint 两个 API 函数获得鼠标所指的对象的句柄。

  二、获取文本。这个用GetWindowText是得不到的,但用SendMessage发一条WM_GETTEXT消息,它就会老老实实地把密码传回来了。
  程序如下:
  新建一标准的EXE工程,在窗体中添加一文本框(Name = Txt Text = ″″)、一定时器(Name = Tim Interval= 100 Enabled = False)、两个按钮(Name = CmdStart Caption=″Start″、Name = CmdStop Caption=″Stop″)。安排好界面后输入以下代码:
  ′申明部分
  Private Type POINTAPI
   x As Long
   y As Long
  End Type
  Dim Pos As POINTAPI
  Dim hResult As Long
  Dim hNow As Long
  Dim hLength As Long
  Dim bArr() As Byte, bArr2() As Byte
  Private Const WM_GETTEXT = &HD
  Private Const WM_GETTEXTLENGTH = &HE
  Private Declare Sub RtlMoveMemory Lib ″KERNEL32″ (lpvDest As Any, lpvSource As Any, ByVal cbCopy As Long)
  Private Declare Function SendMessage Lib ″user32″ Alias ″SendMessageA″ (ByVal hWnd As Long, ByVal wMsg As Long, ByVal wParam As Long, lParam As Any) As LongPrivate Declare Function WindowFromPoint Lib ″user32″ (ByVal xPoint As Long, ByVal yPoint As Long) As Long
  Private Declare Function GetCursorPos Lib ″user32″ (lpPoint As POINTAPI) As Long′获取文本的函数
  Function GetText(ByVal hWndNow As Long) As String
  ′获取文本长度
  hLength = SendMessage(hWndNow, WM_GETTEXTLENGTH, 0, 0)
  If hLength > 0 Then
  ′设置缓冲区
   ReDim bArr(hLength + 1) As Byte, bArr2(hLength - 1) As Byte
   Call RtlMoveMemory(bArr(0), hLength, 2)
  ′发送 WM_GETTEXT 消息
   Call SendMessage(hWndNow, WM_GETTEXT, hLength + 1, bArr(0))
   Call RtlMoveMemory(bArr2(0), bArr(0), hLength)
  ′得到文本
   GetText = StrConv(bArr2, vbUnicode)
  Else
   GetText = ″″
  End If
  End Function
  ′开始获取文本
  Private Sub CmdStart_Click()
  Tim.Enabled = True
  End Sub
  ′停止获取文本
  Private Sub CmdStop_Click()
  Tim.Enabled = False
  End Sub
  ′Timer控件调用获取文本函数
  Private Sub Tim_Timer()
  hResult = GetCursorPos(Pos)
  hNow = WindowFromPoint(Pos.x, Pos.y)
  ′防止获取自身文本
  If hNow <> Txt.hWnd Then
   Txt.Text = GetText(hNow)
  End If
  DoEvents
  End Sub
  运行程序,按 Start按钮后,鼠标所指的密码就看到了

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
DSP2812是德州仪器(Texas Instruments)推出的一款数字信号处理器。它的例程源码是指为该处理器编写的示例代码,用于展示如何在DSP2812上进行程序设计和开发。 DSP2812例程源码主要包括几个方面的内容。首先是引导程序(bootloader)的源码,用于初始化和配置DSP2812的各个模块,并加载用户程序。其次是中断处理程序的源码,用于处理各种中断事件,包括定时器中断、外部中断等。再次是外设驱动程序的源码,用于对外部设备进行控制和操作,如ADC、DAC、串口等。最后是应用程序的源码,根据具体需求编写的主程序,实现具体的功能和算法。 在DSP2812例程源码中,通常会提供一些基本示例,如数字滤波、FFT变换、PID控制等,以便用户可以更好地理解和使用DSP2812的特性和功能。同时,也可以根据自己的需求对这些示例进行修改和扩展,以实现更为复杂的应用。 DSP2812例程源码的学习和应用对于初学者而言可能会有一定的难度,需要具备一定的嵌入式系统和数字信号处理的基础知识。但通过仔细阅读代码,并结合DSP2812的技术手册和参考资料,学习者可以逐步理解并掌握相关的编程技巧和调试方法。 总之,DSP2812例程源码是学习和开发DSP2812的重要参考资源,通过研究源码并进行实践,可以帮助我们更好地运用DSP2812的强大功能,开发出高性能的数字信号处理应用。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值