SendKeys to a minimized window

F

frustratedbob

I'm using VBA code in an Access 2000 form to control a CAD program (Bentley's
MicroStation) that is running in its own window.

When this form loads, the VBA code in its On Load event launches the CAD
program with the following code:

Public g_lngBentleyWindowHandle As Long
Public g_lngBentleyPID As Long

Private Sub Form_Load()
g_lngBentleyPID = _
Shell("C:\program files\Bentley\program\view\BentleyView.exe
m:\dgn", 1)
g_lngBentleyWindowHandle = HwndFromProcessID(g_lngBentleyPID)
End Sub

Public Function HwndFromProcessID(ProcessID As Long) As Long
' returns hwnd, based on Karl E. Peterson's code, he is using
' ProcessID returned from Shell VB function
Dim hWndJob As Long, PID As Long
hWndJob = FindWindow(vbNullString, vbNullString)
Do Until hWndJob = 0
If GetParent(hWndJob) = 0 Then
Call GetWindowThreadProcessId(hWndJob, PID)
If PID = ProcessID Then Exit Do
End If
hWndJob = GetWindow(hWndJob, GW_HWNDNEXT)
Loop
HwndFromProcessID = hWndJob
End Function

After the form loads: the CAD program is launched, its PID is saved in the
global variable g_lngBentleyPID, its window handle is saved in the global
variable g_lngBentleyWindowHandle.

When the user clicks on the "View" command button on the form, the VBA code
in its On Click event uses SendKeys to send keystrokes to the CAD program to
open a drawing file.

Private Sub cmdView_Click()
AppActivate g_lngBentleyPID
SendKeys "{ESC}{ESC}{ESC}{ESC}", True
SendKeys "rd="
SendKeys "m:\dgn\"
SendKeys Me!Drawing & "{ENTER}"
End Sub

This all works fine as long as the user has not minimized the CAD program
window.

If the CAD window is minimized, AppActivate and SendKeys have no effect.
I've tried adding ShowWindow before the AppActivate:

ShowWindow g_lngBentleyWindowHandle, SW_RESTORE
AppActivate g_lngBentleyPID
SendKeys "{ESC}{ESC}{ESC}{ESC}", True
SendKeys "rd="
SendKeys "m:\dgn\"
SendKeys Me!Drawing & "{ENTER}"

This resulted in the SendKeys still not working when the CAD window is
minimized and a "DDE Server Window" appearing in the task bar.

I've also tried each of the following code lines in place of the ShowWindow
code line with no success.
Call SetForegroundWindow(g_lngBentleyWindowHandle)

Call BringWindowToTop(g_lngBentleyWindowHandle)

Call SendMessage(g_lngBentleyWindowHandle, WM_SYSCOMMAND, _
SC_RESTORE, 0)

Can anyone help me solve this problem?

Thanks
 
B

BAC

try

GLOBAL in place of Public in:

Public g_lngBentleyWindowHandle As Long
Public g_lngBentleyPID As Long
 

Ask a Question

Want to reply to this thread or ask your own question?

You'll need to choose a username for the site, which only take a couple of moments. After that, you can post your question and our members will help you out.

Ask a Question

Top