求vb.net句柄实例,实现操作其他程序窗口。如我给的例子

帮忙写一个实例,了解下vb.net句柄。最好都有注解。如对这个进程进行以下操作1.自动打开。我知道可以用process.start2.将textbox1.text写入账号... 帮忙写一个实例,了解下vb.net 句柄。最好都有注解。
如对这个进程进行以下操作1.自动打开。我知道可以用process.start
2.将textbox1.text 写入 账号的框。textbox2.text 写入密码的编辑框
3.判断记住密码的复选框。如果没勾选。勾选。
4.点击 登陆 按钮。

这个登陆窗口。我放在http://pan.baidu.com/s/1sjpVCD3 了。您可以下载来分析下。
要求使用.net 2.0 版本。。。
满意答题再追加分。我知道分没什么意义,聊表心意 。
展开
 我来答
Linmson
推荐于2017-12-16 · TA获得超过138个赞
知道答主
回答量:124
采纳率:100%
帮助的人:129万
展开全部
Imports System.Text
Imports System.Runtime.InteropServices

Public Class Form1
    ' 相关API函数声明,注释掉的这里没用到,但是也比较常用吧,这些函数的功能都能搜到。
    Private Declare Function FindWindow Lib "user32" Alias "FindWindowA" (ByVal lpClassName As String, ByVal lpWindowName As String) As IntPtr
    Private Declare Function FindWindowEx Lib "user32" Alias "FindWindowExA" (ByVal hWnd1 As IntPtr, ByVal hWnd2 As IntPtr, ByVal lpsz1 As String, ByVal lpsz2 As String) As IntPtr
    Private Delegate Function EnumChildProc(ByVal hWnd As IntPtr, ByVal lParam As Integer) As Boolean
    Private Declare Function EnumChildWindows Lib "user32.dll" (ByVal hWndParent As IntPtr, ByVal lpEnumFunc As EnumChildProc, ByVal lParam As Integer) As Boolean
    Private Declare Auto Function SendMessage Lib "User32.dll" (ByVal hWnd As IntPtr, ByVal Msg As Integer, ByVal wParam As Integer, ByVal lParam As String) As Integer
    'Private Declare Function CheckDlgButton Lib "user32" Alias "CheckDLGButtonA" (ByVal hDlg As IntPtr, ByVal nIDButton As IntPtr, ByVal wCheck As Integer) As Integer
    Private Declare Function GetClassName Lib "user32" Alias "GetClassNameA" (ByVal hWnd As IntPtr, ByVal lpClassName As StringBuilder, ByVal nMaxCount As Integer) As Integer
    'Private Declare Function GetWindowThreadProcessId Lib "user32" Alias "GetWindowThreadProcessId" (ByVal hwnd As IntPtr, ByVal lpdwProcessId As Long) As Integer
    Private Declare Auto Function GetWindowTextLength Lib "user32" Alias "GetWindowTextLength" (ByVal hwnd As IntPtr) As Integer
    Private Declare Function GetWindowText Lib "user32" Alias "GetWindowTextA" (ByVal hwnd As IntPtr, ByVal lpString As StringBuilder, ByVal cch As Integer) As Integer


    ' 相关消息定义,也有没用到的
    Const WM_SETTEXT = &HC
    Const WM_GETTEXT = &HD
    'Const WM_SETFOCUS = &H7
    'Const WM_KILLFOCUS = &H8
    'Const WM_CLOSE = &H10
    'Const WM_SYSCOMMAND = &H112
    'Const SC_CLOSE = &HF060&
    'Const SC_MINIMIZE = &HF020&

    Const BM_GETCHECK = &HF0
    Const BM_SETCHECK = &HF1
    Const BM_GETSTATE = &HF2
    Const BM_SETSTATE = &HF3
    Const BM_SETSTYLE = &HF4
    Const BM_CLICK = &HF5
    'Const BM_GETIMAGE = &HF6
    'Const BM_SETIMAGE = &HF7
    Const BST_UNCHECKED = &O0
    Const BST_CHECKED = &O1
    Const BST_INDETERMINATE = &O2

    ' 储存窗口句柄
    Dim WindowHandle As IntPtr
    ' 储存两个(或者多个)编辑框句柄
    Dim EditHandle As New List(Of IntPtr)
    Dim EditWindowsText As List(Of String)
    ' 储存复选框句柄
    Dim CheckHandle As IntPtr = 0

    Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
        Button1_Click(sender, e)

    End Sub

    ' EnumChildWindows 回调函数,该函数名作为API函数EnumChildWindows 的一个参数
    ' 该函数实现了枚举各个子窗口,找出编辑框属性的功能
    Public Function EnumChildProcC(ByVal hwnd As IntPtr, ByVal lParam As Integer) As Boolean
        Dim dwWindowClass As StringBuilder = New StringBuilder(100)

        ' 获得某一个句柄的类名
        GetClassName(hwnd, dwWindowClass, 100)
        If dwWindowClass.ToString.Contains("EDIT") Or dwWindowClass.ToString.Contains("Edit") Then     ' 类名包含EDIT的为编辑框
            EditHandle.Add(hwnd)                        ' 存储该句柄
        End If

        ' 返回 True 一直枚举完
        Return True
    End Function


    Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
        WindowHandle = FindWindow(vbNullString, "登陆")
        If WindowHandle.ToInt32 = 0 Then
            MsgBox("未捕获到窗口" + "<登陆>")
            Return
        End If

        ' 枚举所有主窗口的子窗口(控件),枚举时自动调用回调函数,完成编辑框句柄的获取
        EnumChildWindows(WindowHandle, AddressOf EnumChildProcC, 0)
        ' 寻找复选框
        CheckHandle = FindWindowEx(WindowHandle, IntPtr.Zero, vbNullString, "记住密码")
        Dim str As New StringBuilder
        Dim j As Integer = 0
        ' 对编辑框文本赋值
        For j = 0 To EditHandle.Count - 1
            SendMessage(EditHandle(j), WM_SETTEXT, 0, "Text")
            'GetWindowText(EditHandle(j), str, 20)
            'EditWindowsText.Add(Str.ToString)
            'Str.Clear()
        Next
        If EditHandle.Count = 0 Then
            MsgBox("未找到输入框!")
        End If        

        If CheckHandle.ToInt32 <> 0 Then
            'CheckDlgButton(WindowHandle, id, 1)
            ' 对复选框进行鼠标单击操作
            SendMessage(CheckHandle, BM_CLICK, 0, 0)

            'SendMessage(CheckHandle, BM_SETCHECK, True, 0)
        End If
    End Sub
    
End Class
zhjc313
2014-03-28
知道答主
回答量:1
采纳率:0%
帮助的人:1390
展开全部
先话说,这个奖赏分是干什么的?
其次,你要实现的功能是不是就是譬如:可以在这个界面内直接登录QQ那样?
知道了才好帮你做做看。
追问
对。类似于。直接登陆QQ。
追答
我试了下,好像QQ的程序句柄不好找。我试了下,用API来模拟鼠标点击去运行倒是可以的。
我去vb.net吧回你去,也给吧内加加人气。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
黄十安C
2014-03-27 · TA获得超过211个赞
知道答主
回答量:304
采纳率:0%
帮助的人:84.5万
展开全部
很简单啊,你把我点为最传佳答案我就教你。
更多追问追答
追问
....怎么感觉是来骗分的。呵呵。您就把这个代码写下吧。完了给你最佳。再加追分。
追答
你都不相信我,没一点诚意,你先选我为最佳的,我给了答案在加分给我。别人都有订金的。我只要你的订分。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 2条折叠回答
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式