当我创建一个新的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。我也没有从代码的其他部分收到任何错误消息。
答案 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
查看