1 Son düzenleyen, sasmazali (23.12.2010 18:09:11)

Konu: Bir programın çalıştığını yakalamak?

Forumda aradım fakat bulamadım yada arama kriterlerimden dolayı varsada ulaşamadım

sıkıntım şu;
Bir programı çalıştırmak istediğim o program çalışıp çalışmadığını öğrenmek bir exe'yi ikinci kez çalıştırılmasına izin vermek istemiyorum.
EXE nin çalıştığını nasıl yakalayabilirim? Elinizde örnek kod varsa çok sevinirim şimdiden teşekkürler

Programı FOX'da SHELL ile çağırıyorum. Ve açık olup olmadığını kontrol ederek ikinci kez çalıştırılmasına izin vermek istemiyorum

2

Re: Bir programın çalıştığını yakalamak?

ben alttaki kodu kullanıyorum
işine yarar sanırım
declare integer FindWindow in WIN32API string cNull, string cWinName
winname="programadi"
if ( FindWindow(0,winname) # 0 )
    wait window "bu programi 2.kez calistiramazsiniz !" timeout(2)
    quit
endif

3

Re: Bir programın çalıştığını yakalamak?

Hocam çok teşekkür ederim eline sağlık işimi fazlasıyla gördü tekrar çok teşekkür

4

Re: Bir programın çalıştığını yakalamak?

Şöyle bir sorunla karşılaştım

foxda derlenmiş programları bu komut satırı ile yakalayamıyorum fakat diğer programları yakalıyorum bunun sebebi nedir veya en azından çalışanların listesini alabilirmiyim ordanda sebebini anlayabilirim

5

Re: Bir programın çalıştığını yakalamak?

kaynağı hatırlamıyorum

Visual Fox Pro
************************************one instance prog

PROCEDURE myInstance
PARAMETERS myApp
    =ddesetoption("SAFETY",.F.)
    ichannel = DDEINITIATE(myapp,"ZOOM")
    IF ichannel =>0
        =DDETERMINATE(ichannel)
        QUIT
    ENDIF
    =DDESETSERVICE(myapp,"define")
    =DDESETSERVICE(myapp,"execute")
    =DDESETTOPIC(myapp,"","ddezoom")
    RETURN
******************************************
PROCEDURE ddezoom
    PARAMETER  ichannel,saction,sitem,sdata,sformat,istatus
    ZOOM WINDOW SCREEN NORM
    RETURN
**********************************************************
VFP9 SP2

6 Son düzenleyen, sasmazali (24.12.2010 09:30:17)

Re: Bir programın çalıştığını yakalamak?

Kodu kullandım fakat findwindow programın caption'da yazan satıra göre arıyor. Eğerki kullanılan program bu başlığı değiştiriyorsa mesela bir menüye girildiğinde bu başlık değişiyor bu durumda onu ilk açıldığındaki isimle bulamıyor. Görev yöneticisinde işlemlerdki exe ismini bulabilirmiyiz. Orası kesin çözüm

bu HANDLE  değeri bilgisayar yeniden başlayana kadar birkeremi oluşturuluyor yoksa bir program açıldı ve kapandı ardından başka bir program bu handle değerini alabiliyor mu?

7

Re: Bir programın çalıştığını yakalamak?

http://www.fox4um.com/topic/1105/calisa … ri-bulmak/

8

Re: Bir programın çalıştığını yakalamak?

hocam verdiğiniz örnek çok güzel. Çalışıyor da. Fakat sunucuda tüm kullalanıcılar aynı anda sistemde çalıştığından sadece o an çalıştıran kullanıcıcnın programı kullanıp kullanmadığı lazım. SYS(0) ile kullanıcıyı buluyorum fakat kullanıcın ID sini nasıl bulabilirim ? bulduğum takdirde verdiğiniz kodla eşleştirip sorunumu çözeceğim

9

Re: Bir programın çalıştığını yakalamak?

Ayni soruyu N yerde sormussun.


Visual Fox Pro
Local objWMIService,User,Domain

objWMIService = Getobject("winmgmts:{impersonationLevel=impersonate}!\\.\root\cimv2")
 
colProcesses = objWMIService.ExecQuery( "select * from win32_process where Name='VFP9.exe'" )
For Each objProcess In colProcesses
    Store '' To User,Domain
    Try
        If objProcess.GetOwner ( @User, @Domain ) = 0
            ? "Process ", objProcess.Caption, " belongs to ", m.Domain, m.USer
        Else
            ? "Problem  getting the owner for process", objProcess.Caption
        Endif
    Catch
    Endtry
Next

10

Re: Bir programın çalıştığını yakalamak?

Yardimda ayni yerde LogonSession'lar ile ilgili ornek de var. Ac modifiye edip kullanmayi dene.