--- In [email protected], "brucexs" <[EMAIL PROTECTED]> wrote:
>
> >
> > I also want it to switch to that folder and come to the front if
> > another folder is open in DirOpus, whether hidden or minimized.
> >
>
> This is not easy.
>
> What you need is some way to send information to a running program.
> There are at least four ways to do it, but whether any one of them
> will work in your case depends on your program.
>
> 1. Some programs have a "single instance only" option. Then, if you
> try to run a second instance, the program is smart enough to take the
> command line from that second instance and send the information to
> the already-running instance. PowerPro works this way for running
> commands from a command line. So does TextPad. Possibly your
> program has sucn an option.
>
> 2. If not, the most reliable way is a COM automation interface. If
> your program supports automation via COM, you could write a script
> using the COM plugin. Consult the COM plugin documentation and your
> program's documentation.
>
> 3. Another possibility is DDE. This is an old technology that MS
> abandoned when it invented COM, but your program may still support
> it. If so, you could use the DDE plugin. Again, you will need to
> get the details from documentation of your program and the plugin.
>
> 4. Finally, it may be possible to do this by sending keystrokes to
> your program. This is the least reliable way and may fail depending
> on the level of activity on your system. Assuming there are a series
> of keys strokes that switch your program to a folder, you would do a
> script like the following
>
> if (not anywindow("=yourprog")) do // program is not running
> run with command line
> quit script
> endif
>
> find window of your program //see note below
> if window is minimized
> show it using win plugin service
> else
> set it to foreground
>
> wait for program to become foreground
> send the keys that cause the program to switch to your folder.
>
> There is one important point above relating to finding the right
> window to unminimize and to make foreground before sending keys. As
> you have learned, something like
> win.show("=yourprog")
> is not reliable. This is because "=yourprog" can match any window
> created by yourprog. Many programs create hidden, off-screen, or
> zero-sized windows for internal purposes, and it is possible for one
> of these to be matched by =yourprog, leading to the type of behavior
> you saw.
>
> Instead, you need to find a unique way of identifying the main window
> that your program displays for you to interact with. Possibly there
> is something unique about the caption, e.g. it may always start
> with "yourprog -". Or there it may have a special window class. You
> can use the exec windowinfo command to look at window classes. Or
> you can write a script that uses handlelist("=yourprog") to get all
> of the handles of the program, and then display the class and caption
> of each.
>
> BTW, the =yourprog is the write matcher to use with anywindow
> function to see if a program is running, since you do want to match
> any window from that program.
I have it working like I want it now. Your point about "=yourprog"
helped. I finally changed it to "c=" and it responded correctly. The
program has a command line to switch folders, and win.show brings it to
the front.
if(anywindow("c=dopus.lister"))do
do("C:\\Program Files\\GPSoftware\\Directory Opus\\dopusrt.exe","/cmd GO
\"D:\\My Documents")
win.show("=dopus")
else
do("D:\\My Documents")
endif
Thanks,
Ben