是窗体上的控键的ID
还是系统ID

解决方案 »

  1.   

    我也知道不复杂,但是有些要求是我不能办到的一,必须在公用的电脑上用,但这台电脑无软驱,只有联网下载
    二,我就是要查这几个API 函数的用法啊是查窗体上的控件的ID,以及窗体的叵柄
    多谢谢大家指教啊
      

  2.   

    用记事本打开,粘贴保存FindhWnd.vbp
    ====================================================================
    Type=Exe
    Form=FrmMain.frm
    Reference=*\G{00020430-0000-0000-C000-000000000046}#2.0#0#..\..\..\..\..\..\WINDOWS\SYSTEM\StdOle2.Tlb#OLE Automation
    Object={831FDD16-0C5C-11D2-A9FC-0000F8754DA1}#2.0#0; MSCOMCTL.OCX
    IconForm="FrmMain"
    Startup="FrmMain"
    ExeName32="FindhWnd.exe"
    Command32=""
    Name="FindhWnd"
    HelpContextID="0"
    CompatibleMode="0"
    MajorVer=1
    MinorVer=0
    RevisionVer=0
    AutoIncrementVer=0
    ServerSupportFiles=0
    VersionCompanyName="91"
    CompilationType=0
    OptimizationType=0
    FavorPentiumPro(tm)=0
    CodeViewDebugInfo=0
    NoAliasing=0
    BoundsCheck=0
    OverflowCheck=0
    FlPointCheck=0
    FDIVCheck=0
    UnroundedFP=0
    StartMode=0
    Unattended=0
    Retained=0
    ThreadPerObject=0
    MaxNumberOfThreads=1
      

  3.   

    FrmMain.frm
    ====================================================================
    VERSION 5.00
    Object = "{831FDD16-0C5C-11D2-A9FC-0000F8754DA1}#2.0#0"; "MSCOMCTL.OCX"
    Begin VB.Form FrmMain 
       Caption         =   "查找窗口"
       ClientHeight    =   3195
       ClientLeft      =   60
       ClientTop       =   345
       ClientWidth     =   4680
       LinkTopic       =   "Form1"
       LockControls    =   -1  'True
       ScaleHeight     =   3195
       ScaleWidth      =   4680
       StartUpPosition =   3  '窗口缺省
       Begin VB.CommandButton CmdOpen 
          Caption         =   "打开"
          Height          =   300
          Left            =   2550
          TabIndex        =   21
          Top             =   0
          Width           =   840
       End
       Begin VB.Frame FraInfo 
          Caption         =   "信息"
          Height          =   1455
          Left            =   0
          TabIndex        =   4
          Top             =   1710
          Width           =   4635
          Begin VB.TextBox TxtH 
             Height          =   270
             Left            =   3825
             TabIndex        =   19
             Text            =   "Text1"
             Top             =   1110
             Width           =   750
          End
          Begin VB.TextBox TxtW 
             Height          =   270
             Left            =   2640
             TabIndex        =   17
             Text            =   "Text1"
             Top             =   1110
             Width           =   750
          End
          Begin VB.TextBox TxtY 
             Height          =   270
             Left            =   1350
             TabIndex        =   15
             Text            =   "Text1"
             Top             =   1110
             Width           =   750
          End
          Begin VB.TextBox TxtID 
             Height          =   270
             Left            =   2820
             TabIndex        =   13
             Text            =   "Text1"
             Top             =   510
             Width           =   1750
          End
          Begin VB.TextBox TxtX 
             Height          =   270
             Left            =   300
             TabIndex        =   11
             Text            =   "Text1"
             Top             =   1110
             Width           =   750
          End
          Begin VB.TextBox TxtClass 
             Height          =   270
             Left            =   540
             TabIndex        =   9
             Text            =   "Text1"
             Top             =   810
             Width           =   4035
          End
          Begin VB.TextBox TxthWnd 
             Height          =   270
             Left            =   540
             TabIndex        =   7
             Text            =   "Text1"
             Top             =   510
             Width           =   1750
          End
          Begin VB.TextBox TxtCap 
             Height          =   270
             Left            =   540
             TabIndex        =   5
             Text            =   "Text1"
             Top             =   210
             Width           =   4035
          End
          Begin VB.Label LblH 
             AutoSize        =   -1  'True
             Caption         =   "高:"
             Height          =   180
             Left            =   3480
             TabIndex        =   20
             Top             =   1170
             Width           =   360
          End
          Begin VB.Label LblW 
             AutoSize        =   -1  'True
             Caption         =   "宽:"
             Height          =   180
             Left            =   2310
             TabIndex        =   18
             Top             =   1170
             Width           =   360
          End
          Begin VB.Label LblY 
             AutoSize        =   -1  'True
             Caption         =   "Y:"
             Height          =   180
             Left            =   1110
             TabIndex        =   16
             Top             =   1170
             Width           =   270
          End
          Begin VB.Label LblID 
             AutoSize        =   -1  'True
             Caption         =   " ID:"
             Height          =   180
             Left            =   2340
             TabIndex        =   14
             Top             =   570
             Width           =   540
          End
          Begin VB.Label LblX 
             AutoSize        =   -1  'True
             Caption         =   "X:"
             Height          =   180
             Left            =   60
             TabIndex        =   12
             Top             =   1170
             Width           =   270
          End
          Begin VB.Label LblClass 
             AutoSize        =   -1  'True
             Caption         =   "类名:"
             Height          =   180
             Left            =   60
             TabIndex        =   10
             Top             =   870
             Width           =   540
          End
          Begin VB.Label LblhWnd 
             AutoSize        =   -1  'True
             Caption         =   "hWnd:"
             Height          =   180
             Left            =   60
             TabIndex        =   8
             Top             =   570
             Width           =   540
          End
          Begin VB.Label LblCap 
             AutoSize        =   -1  'True
             Caption         =   "标题:"
             Height          =   180
             Left            =   60
             TabIndex        =   6
             Top             =   270
             Width           =   540
          End
       End
       Begin VB.CommandButton CmdUp 
          Caption         =   "向上"
          Height          =   300
          Left            =   1710
          TabIndex        =   3
          Top             =   0
          Width           =   840
       End
       Begin VB.CommandButton CmdMe 
          Caption         =   "恢复"
          Height          =   300
          Left            =   840
          TabIndex        =   2
          Top             =   0
          Width           =   840
       End
       Begin VB.CommandButton CmdSX 
          Caption         =   "刷新"
          Height          =   300
          Left            =   0
          TabIndex        =   1
          Top             =   0
          Width           =   840
       End
       Begin MSComctlLib.ListView LV1 
          Height          =   1395
          Left            =   0
          TabIndex        =   0
          Top             =   300
          Width           =   2745
          _ExtentX        =   4842
          _ExtentY        =   2461
          LabelEdit       =   1
          LabelWrap       =   -1  'True
          HideSelection   =   0   'False
          FullRowSelect   =   -1  'True
          GridLines       =   -1  'True
          _Version        =   393217
          ForeColor       =   -2147483640
          BackColor       =   -2147483643
          BorderStyle     =   1
          Appearance      =   1
          NumItems        =   0
       End
    End
    Attribute VB_Name = "FrmMain"
    Attribute VB_GlobalNameSpace = False
    Attribute VB_Creatable = False
    Attribute VB_PredeclaredId = True
    Attribute VB_Exposed = False
    Option Explicit
    Private Declare Function GetWindow Lib "user32" (ByVal hWnd As Long, ByVal wCmd As Long) As Long
    Private Const GW_HWNDFIRST = 0 '为一个源子窗口寻找第一个兄弟(同级)窗口,或寻找第一个顶级窗口
    Private Const GW_HWNDLAST = 1  '为一个源子窗口寻找最后一个兄弟(同级)窗口,或寻找最后一个顶级窗口
    Private Const GW_HWNDNEXT = 2  '为源窗口寻找下一个兄弟窗口
    Private Const GW_HWNDPREV = 3  '为源窗口寻找前一个兄弟窗口
    Private Const GW_OWNER = 4     '寻找窗口的所有者
    Private Const GW_CHILD = 5     '寻找源窗口的第一个子窗口Private Declare Function GetParent Lib "user32" (ByVal hWnd As Long) As Long
    Private Declare Function GetDesktopWindow Lib "user32" () As LongPrivate Declare Function GetWindowText Lib "user32" Alias "GetWindowTextA" (ByVal hWnd As Long, ByVal lpString As String, ByVal cch As Long) As Long
    Private Declare Function GetClassName Lib "user32" Alias "GetClassNameA" (ByVal hWnd As Long, ByVal lpClassName As String, ByVal nMaxCount As Long) As Long
    Private Declare Function GetDlgCtrlID Lib "user32" (ByVal hWnd As Long) As LongPrivate Declare Function GetWindowRect Lib "user32" (ByVal hWnd As Long, lpRect As RECT) As LongPrivate Type RECT
        Left As Long
        Top As Long
        Right As Long
     
      

  4.   


    Public Function GetCaption(hWnd As Long) As String
        Dim TempLng As Long
        Dim TempStr As String
        Dim Rc As Long
        
        TempLng = 260
        TempStr = Space(TempLng)
        
        Rc = GetWindowText(hWnd, TempStr, TempLng)
        
        GetCaption = StrConv(LeftB$(StrConv(TempStr, vbFromUnicode), Rc), vbUnicode)
        
    End FunctionPublic Function GetClassNameStr(hWnd As Long) As String
        Dim TempLng As Long
        Dim TempStr As String
        Dim Rc As Long
        
        TempLng = 260
        TempStr = Space(TempLng)
        
        Rc = GetClassName(hWnd, TempStr, TempLng)
        
        GetClassNameStr = StrConv(LeftB$(StrConv(TempStr, vbFromUnicode), Rc), vbUnicode)
        
    End FunctionPrivate Sub FindWnd()
        Dim TemphWnd As Long
        Dim TempLI As ListItem
        
        LV1.ListItems.Clear
        
        TemphWnd = hWndDir
        Set TempLI = LV1.ListItems.Add(, , ".")
        TempLI.SubItems(1) = TemphWnd
        TempLI.SubItems(2) = GetClassNameStr(TemphWnd)
        TempLI.SubItems(3) = GetDlgCtrlID(TemphWnd)
        LV1_ItemClick TempLI
        
        TemphWnd = GetParent(hWndDir)
        If TemphWnd = 0 Then TemphWnd = GetWindow(hWndDir, GW_OWNER)
        If TemphWnd Then
            Set TempLI = LV1.ListItems.Add(, , "..")
            TempLI.SubItems(1) = TemphWnd
            TempLI.SubItems(2) = GetClassNameStr(TemphWnd)
            TempLI.SubItems(3) = GetDlgCtrlID(TemphWnd)
        End If
        CmdUp.Enabled = TemphWnd
        
        TemphWnd = GetWindow(hWndDir, GW_CHILD)
        TemphWnd = GetWindow(TemphWnd, GW_HWNDFIRST)
        Do While TemphWnd
            Set TempLI = LV1.ListItems.Add(, , GetCaption(TemphWnd))
            TempLI.SubItems(1) = TemphWnd
            TempLI.SubItems(2) = GetClassNameStr(TemphWnd)
            TempLI.SubItems(3) = GetDlgCtrlID(TemphWnd)
            
            TemphWnd = GetWindow(TemphWnd, GW_HWNDNEXT)
            
        Loop
        
    End SubPrivate Sub CmdMe_Click()
        hWndDir = GetDesktopWindow
        FindWnd
        
    End SubPrivate Sub CmdOpen_Click()
        LV1_DblClick
        
    End SubPrivate Sub CmdSX_Click()
        FindWnd
    End SubPrivate Sub CmdUp_Click()
        Dim TemphWnd As Long
        
        TemphWnd = GetParent(hWndDir)
        If TemphWnd = 0 Then TemphWnd = GetWindow(hWndDir, GW_OWNER)
        If TemphWnd Then
            hWndDir = TemphWnd
            FindWnd
        End If
        
    End SubPrivate Sub Form_Load()
        LV1.View = lvwReport
        LV1.ColumnHeaders.Add , , "标题", 1200
        LV1.ColumnHeaders.Add , , "hWnd", 540
        LV1.ColumnHeaders.Add , , "类名", 2100
        LV1.ColumnHeaders.Add , , "ID", 420
        
        CmdMe_Click
        
    End SubPrivate Sub Form_Resize()
        If Me.WindowState = 1 Then Exit Sub
        On Error Resume Next
        
        LV1.Width = Me.ScaleWidth
        LV1.Height = Me.ScaleHeight - 300 - FraInfo.Height
        
        FraInfo.Top = LV1.Height + 300
        FraInfo.Width = Me.ScaleWidth
        'FraInfo.Height = LV1.Height
        
    End SubPrivate Sub LV1_DblClick()
        Dim TempLI As ListItem
        Dim TemphWnd As Long
        
        If LVB = 1 Then
            'Debug.Print "1"
            Set TempLI = LV1.SelectedItem
            If (TempLI Is Nothing) = False Then
                'Debug.Print "2"
                If TempLI.Text <> "." Then
                    'Debug.Print "3"
                    TemphWnd = CLng(TempLI.SubItems(1))
                    
                    If GetWindow(TemphWnd, GW_CHILD) Then
                        'Debug.Print "4"
                        hWndDir = TemphWnd
                        FindWnd
                        
                    End If
                    
                End If
                
            End If
            
        End If
        
    End SubPrivate Sub LV1_ItemClick(ByVal Item As MSComctlLib.ListItem)
        Dim TemphWnd As Long
        Dim rct As RECT
        
        TemphWnd = CLng(Item.SubItems(1))
        GetWindowRect TemphWnd, rct
        
        TxtCap.Text = GetCaption(TemphWnd)
        TxthWnd.Text = TemphWnd
        TxtID.Text = GetDlgCtrlID(TemphWnd)
        TxtClass.Text = GetClassNameStr(TemphWnd)
        TxtX.Text = rct.Left
        TxtY.Text = rct.Top
        TxtW.Text = rct.Right - rct.Left
        TxtH.Text = rct.Bottom - rct.Top
        
        CmdOpen.Enabled = GetWindow(TemphWnd, GW_CHILD)
        
    End SubPrivate Sub LV1_KeyPress(KeyAscii As Integer)
        If KeyAscii = vbKeyReturn Then
            LVB = 1
            LV1_DblClick
            LVB = 0
        End If
        
    End SubPrivate Sub LV1_MouseDown(Button As Integer, Shift As Integer, x As Single, y As Single)
        LVB = Button
        LVX = x
        LVY = y
        
    End Sub