易语言句柄怎么弄??

易语言句柄怎么弄??,第1张

返回“0” 代表获取句柄失败!

出错的原因一般是在 窗口类名、窗口标题 的地方上。

请确认你所填写的窗口类名、窗口标题 是否正确。

还有你的API函数是什么,会不会是你API函数错误之类造成的。

取句柄的API函数是:FindWindow

请把以下的代码复制到易语言里:

.DLL命令 FindWindow, 整数型, "user32", "FindWindowA", 寻找窗口列表中第一个符合指定条件的顶级窗口(在vb里使用:FindWindow最常见的一个用途是获得ThunderRTMain类的隐藏窗口的句柄;该类是所有运行中vb执行程序的一部分。获得句柄后,可用api函数GetWindowText取得这个窗口的名称;该名也是应用程序的标题) 找到窗口的句柄。如未找到相符窗口,则返回零。会设置GetLastError

    .参数 lpClassName, 文本型, , 指向包含了窗口类名的空中止(C语言)字串的指针;或设为零,表示接收任何类

    .参数 lpWindowName, 文本型, , 指向包含了窗口文本(或标签)的空中止(C语言)字串的指针;或设为零,表示接收任何窗口标题  示例Dim hw&, cnt&Dim rttitle As  * 256hw& = FindWindow("ThunderRT5Main", vbNullString) ' ThunderRTMain under VB4cnt = GetWindowText(hw&, rttitle, 255)MsgBox Left$(rttitle, cnt), 0, "RTMain title" 句柄=FindWindow("类名",“标题”)

编辑框1.内容=到文本(句柄)

希望我的回答对你有所帮助!Kiss灬小猪

给构造函数加一个参数不就可以传了,把主调的句柄赋给类的成员

随便写一下,

class A

{

public:

void test()

}

class B

{

A *m_pa

public :

B(A * pa)

{

m_pa=pa

}

}

void A::test(){

B b(this)

}

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


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/yw/8165718.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-04-14
下一篇 2023-04-14

发表评论

登录后才能评论

评论列表(0条)

保存