How to close an open image...

O

obsessive

Hi .. I have the following code ... (thanks to the message board) that
opens an image but I am wondering if it's possible to have the image
automatically close (after maybe a minute)...
I am familiar with "application.wait", but do not know how to close the
file...here's my opening code...any ideas??

Sub OpenButton1_Click()
Dim Picture As String
Dim RETVAL
Picture = "c:\picfolder\" & ActiveSheet.Range("C2").Value & ".tif"
RETVAL = Shell("EXPLORER " & Picture, 1)
End Sub

Any help would be greatly appreciated.
 
A

AA2e72E

Is is possible, if somewhat messy to achieve.

Determine the application that opens the picture; it could be Paint or
another application with which the extension TIF is associated.

Use the FindWindow API call to get the handle of the Window for that
application. If you do not know the class name, use the caption (the latter
is less reliable as it is difficult to get right ... it has to match exactly).

Use the PostMessage API to send a WM_CLOSE message to the Window handle.

The APIs are:

Declare Function FindWindow Lib "user32" Alias "FindWindowA" (ByVal
lpClassName As String, ByVal lpWindowName As String) As Long

Declare Function PostMessage Lib "user32" Alias "PostMessageA" (ByVal hwnd
As Long, ByVal wMsg As Long, ByVal wParam As Long, ByVal lParam As Long) As
Long
 
O

obsessive

Well does anyone know of a picture viewer (or have any ideas) that
prohibits the user from doing anything except closing it. I figured I
could disable a the escape key and user a fullscreen view if I could
automatically close the file. My problem is all the viewers have print
and edit functions and I do not want the viewer to have those
options???
Anyone with any suggestions on how I can overcome that?
Regards
 
S

Steve Yandl

Could you draw from a set of pictures that were gif files rather than tif.
Then you could create a UserForm, fill it with an image control and use
something like

Fname = "C:\pictureSet\myPic.gif"
Image1.Picture = LoadPicture(Fname)

inside a UserForm Activate sub.

It is easy to set a timer for a userform and the only thing the user would
be able to do would be to shut the form down before your timer did it
automatically.

I did a quick test with a tif file and, unfortunately, that won't work.

Steve
 
O

obsessive

Thanks for the reply... that may be my only option... I would have to
convert all the files but if thats what I have to do... so be it I
guess.
 
S

Steve Yandl

My original thought was to create an IE window that could easily be
controlled but many users will have registry settings that will result in a
TIF image appearing as an image placeholder in the IE window.

Can you be certain that your users will all be using WinME, WinXP, Win2k or
beyond? If that is the case, you could use the Windows picture and fax
viewer to show the picture and use WMI to isolate the process and terminate
it on your schedule. That won't work if any users are using Win98 or
earlier.

Steve
 
O

obsessive

Well I'm certain of the users will be using winXP but I have no idea
how to use WMI to isolate and terminate the process??
Can you give me more info ?
 
S

Steve Yandl

WMI will let you obtain a collection of all the running processes. One of
the properties of each process is commandline and one of the methods is
terminate. Since you can be fairly sure that the process displaying your
tif file will be the only process containing the name of the file as part of
its command line, you could use something like the following to terminate
that process.

_ _ _ _ _ _ _ _ _ _

strPicture = "c:\picfolder\" & ActiveSheet.Range("C2").Value & ".tif"

Set objWMI = GetObject("winmgmts:" _
& "{impersonationLevel=impersonate}!\\.\root\cimv2")
Set colProcess = objWMI.ExecQuery _
("Select * from Win32_Process")

For Each objProcess In colProcess
If InStr(objProcess.CommandLine, strPicture) > 0 Then
objProcess.Terminate
End If
Next
_ _ _ _ _ _ _ _ _ _


Steve
 
O

obsessive

Hey Steve,
Thanks for all your help. After much time and thought I have opted to
change all my image files to bitmaps and go with a userform.
I figure I'll just maximize the userform and add a couple of zoom and
scroll functions. That should suffice. Thanks again for your time
and your help. I appreciate it.
 

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