abdorreza
چهارشنبه 30 آبان 1386, 14:25 عصر
چطور میشه وقتی یک برنامه اجرا شد و دوباره روش دابل کلیک کردیم تشخیص بده که برنامه قبلا اجرا شده و پیغام بده؟ (سرچ کردم پیدا نکردم!!!)
sassan
چهارشنبه 30 آبان 1386, 15:00 عصر
این کد را در init فرمتان قرار دهید :
If _Screen.FormCount > 1
For each MyForm in _Screen.Forms
If MyForm.name = this.Name
wait wind 'this program run before'
.return .f
Endif
Endfor
Endif
rezaTavak
پنج شنبه 01 آذر 1386, 07:48 صبح
اما منظور ایشان این است که برنامه فقط یک بار اجرا شود نه هر فرم یکبار.
مثلا اگر روی برنامه ای مانند jetaudio کلیک کنید (البته نگارش قدیمی منظور من است چون سالهاست من دیگر از آن استفاده نکرده ام) فقط یکبار اجرا میشود و دفعات بعدی اجرا نخواهد شد.
اینکار اینگونه ممکن است که یک عنوان مشخص به برنامه خودتان بدهید مثل _screen.Caption = "Ali"
حالا با تایع FindWindow ویندوز آنرا در ابتدای اجرا تست کنید اگر پیدا شد اجرا نشود و اگر پیدا نشد اجرا شود.
البته راه دیگری هم دارد که شاید دوستان بدانند.
binyaz2003
پنج شنبه 01 آذر 1386, 10:09 صبح
این کد رو در یک فایل prg ذخیره کنید حالا در برنامه اصلیتون اینطوری صداش بزنید :
If Not AppMutex('myprg')
Quit
Endif
این اسم برنامه myprg باید caption پنجره screen شما باشه.
Function AppMutex
Lparameters prgname
Declare Integer CreateMutex In WIN32API Integer, Integer, String @
Declare Integer CloseHandle In WIN32API Integer
Declare Integer GetLastError In WIN32API
Declare Integer SetProp In WIN32API Integer, String @, Integer
Declare Integer GetProp In WIN32API Integer, String @
*Declare Integer Removeprop In WIN32API Integer, String @
Declare Integer IsIconic In WIN32API Integer
Declare Integer SetForegroundWindow In WIN32API Integer
Declare Integer GetWindow In WIN32API Integer, Integer
Declare Integer ShowWindow In WIN32API Integer, Integer
Declare Integer GetDesktopWindow In WIN32API
Declare Long FindWindow In WIN32API Long, String
#Define SW_RESTORE 9
#Define ERROR_ALREADY_EXISTS 183
#Define GW_HWNDNEXT 2
#Define GW_CHILD 5
Local llRetVal, lcExeFlag, lnExeHwnd, lnHwnd
lcExeFlag = Strtran(prgname, " ", "") + Chr(0)
lnExeHwnd = CreateMutex(0, 1, @lcExeFlag)
If GetLastError() = ERROR_ALREADY_EXISTS
lnHwnd = GetWindow(GetDesktopWindow(), GW_CHILD)
Do While lnHwnd > 0
If GetProp(lnHwnd, @lcExeFlag) = 1
If IsIconic(lnHwnd) > 0
ShowWindow(lnHwnd, SW_RESTORE)
Endif
SetForegroundWindow(lnHwnd)
Exit
Endif
lnHwnd = GetWindow(lnHwnd, GW_HWNDNEXT)
Enddo
CloseHandle(lnExeHwnd)
llRetVal = .F.
Else
SetProp(FindWindow(0, prgname), @lcExeFlag, 1)
llRetVal = .T.
Endif
Return llRetVal
Endfunc
kia1349
شنبه 03 آذر 1386, 09:21 صبح
اینم برنامه اش و یک مثال دیگه با استفاده از کلاس
vBulletin® v4.2.5, Copyright ©2000-1404, Jelsoft Enterprises Ltd.