且构网

分享程序员开发的那些事...
且构网 - 分享程序员编程开发的那些事

Findwindow在64位VBA7中不起作用

更新时间:2023-02-06 13:02:17

Figured it out. The issue wasn't 64bit, it was a timing/focus issue.

Sub unlockVBA(wb)

If wb.name = "PERSONAL.XLSB" Then Exit Sub

Application.VBE.MainWindow.Visible = True

TimerID = SetTimer(0&, 0&, 500&, AddressOf TimerProc)

Application.VBE.CommandBars(1).FindControl(ID:=2578, recursive:=True).Execute

End Sub

Public Sub TimerProc(ByVal hwnd As LongPtr, ByVal wMsg As LongPtr, ByVal idEvent As LongPtr, ByVal dwTime As LongPtr)

On Error Resume Next
KillTimer hwnd, TimerID

MyPassword = "password"

Ret = FindWindow(vbNullString, "VBAProject Password")
ChildRet = FindWindowEx(Ret, ByVal 0&, "Edit", vbNullString)
If ChildRet <> 0 Then
Call SendMessage(ChildRet, WM_SETTEXT, False, ByVal MyPassword)
DoEvents
End If

ChildRet = FindWindowEx(Ret, ByVal 0&, "Button", vbNullString)

If ChildRet <> 0 Then
'MsgBox "Button's Window Found"

'~~> Get the caption of the child window
strBuff = String(GetWindowTextLength(ChildRet) + 1, Chr(0))
GetWindowText ChildRet, strBuff, Len(strBuff)
ButCap = strBuff

'~~> Loop through all child windows
Do While ChildRet <> 0
    '~~> Check if the caption has the word "OK"
    If InStr(1, ButCap, "OK") Then
    '~~> If this is the button we are looking for then exit
    OpenRet = ChildRet
    Exit Do
    End If

    '~~> Get the handle of the next child window
    ChildRet = FindWindowEx(Ret, ChildRet, "Button", vbNullString)
    '~~> Get the caption of the child window
    strBuff = String(GetWindowTextLength(ChildRet) + 1, Chr(0))
    GetWindowText ChildRet, strBuff, Len(strBuff)
    ButCap = strBuff
Loop

If OpenRet <> 0 Then
'~~> Click the OK Button
SendMessage ChildRet, BM_CLICK, 0, vbNullString
Else
MsgBox "The Handle of OK Button was not found"
End If
Else
MsgBox "Button's Window Not Found"
End If

上一篇 : :sql2005中的sql查询下一篇 : 在sql2005中迭代xml

相关阅读

技术问答最新文章