如何将新创建的Outlook电子邮件对象带到前台VBA

时间:2019-07-24 23:51:34

标签: vba api ms-access

当我创建一个新的Outlook电子邮件对象时,它并不总是位于最前面。 他们都没有一致地工作。他们都停止了任务栏的闪烁(这表明发生了某些事情),但从未将其始终显示在前台。

我尝试过:

.Display
Visible = True
Application.ActiveWindow etc

API调用,例如Private Declare Function SetForegroundWindow Lib "user32" (ByVal hwnd As Long) As Long with SW_SHOW,, SW_SHOWNORMAL,, SW_MAXIMIZE

这是用于Access 2016

Call AttachThreadInput(CurrentForegroundThreadID, NewForegroundThreadID, True)
lngRetVal = SetForegroundWindow(MyAppHWnd)
Call AttachThreadInput(CurrentForegroundThreadID, NewForegroundThreadID, False)

If lngRetVal <> 0 Then

    '''Now that the window is active, let's restore it from the taskbar
    If IsIconic(MyAppHWnd) Then
        MsgBox (1)
    Else
        Call ShowWindow(MyAppHWnd, SW_SHOWNORMAL)
        MsgBox (2)
    End If

它始终运行代码的Else部分,即消息框2。我也没有从代码的其他部分收到任何错误消息。

1 个答案:

答案 0 :(得分:0)

我终于明白了。经过几天又几天。我注释掉了

Call AttachThreadInput(CurrentForegroundThreadID, NewForegroundThreadID, False)

我想知道为什么那段代码在那里。这没有道理。哇哇哇好大。哦,在我拨打电话的部分

Call ShowWindow(MyAppHWnd, SW_SHOWNORMAL)

我还必须更改从模块的初始调用中接收消息的方式,并将结果显示在消息框中。看起来像这样:

'Call FnSetForegroundWindow(strWindowTitleMine) 'This way does not work
Result = FnSetForegroundWindow(strWindowTitleMine) 'This line is absolutely necessary

If Result = True Then
    MsgBox ("Success") 'This line is absolutely necessary
Else
    MsgBox ("Not successful")  'This line is absolutely necessary
End If

对编写完成该工作的所有代码的人表示感谢。您可以在这里EverythingAccess - Bring an external application window to the foreground

查看