SendKeys Doesn't Always Work?

P

Phil Galey

I have a VB.NET application that uses SendKeys to close the open document in
QuarkXPress 5.0

I'm using the following commands:

AppActivate(QXP_Process_ID)
SendKeys.SendWait("^{F4}")

in an effort to close the document currently open in QuarkXPress. However,
it only works if I set a breakpoint on or shortly before the AppActivate
command and then hit F5 to run it through the above commands. But if it
just runs through without stopping along the way, this command pair does not
work and the document stays open.

What might be the cause and solution to this frustrating problem? Thanks.
 
R

R. MacDonald

Hello, Phil,

I always advocate working very hard to find some other method than
SendKeys. This is because you really have no "absolute" control over
which application will end up "processing" the "keys" sent.

Having said that, you might try adding a "DoEvents" between the
AppActivate and the SendKeys. (Or better, delay in some kind of a loop
testing for the active application to be QXP_Process_ID.)

Even if this were to work most of the time, I believe that SendKeys does
not come with any guarantee about which application the receiver will
be, and there's always the chance something unintended will sneak in and
catch them.

Cheers,
Randy
 
C

CMM

Look into SendMessage API. Together with the WM_CLOSE message (or is it
SC_CLOSE?) it does what you want the RIGHT way.
 
P

Phil Galey

In VB.NET, if I know the hwnd of an external MDI program that has zero or
more child documents loaded, how can I close the child documents? It has a
File\Close menu item that closes the active document. Is it possible to
remotely execute the File\Close menu item? That would be great if I could
do that. Otherwise, I tried the EnumChildWindows and EnumChildProc
scenerio, but for some reason, I'm not able to get to the child windows.
GetWindowText returns an empty string for each one and doing a
SendMessage(hwndChild, WM_CLOSE, vbNull, vbNull) doesn't do anything.

How can I close the child windows (loaded documents) without closing the
program? Thanks.
 

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