ارتباط دو پروژه

9up

Active Member
سلام.
برای ارتباط بین دو پروژه از کدهای زیر استفاده کردم.

برنامه فرستنده:(که توسط یک Button ارسال میشود)
کد:
Param$ = 'TSCRB'
[B]Run[/B]("Path$","Param$")


برنامه گیرنده: (که در اسکریپت CBK_CMDLINE نوشته شده است)
کد:
n=VAL(CmdLineParam$[0])
If (n>0) Then
  For i=1 To n
    If (CmdLineParam$[i] = 'TSCRB') Then
      [B]RunScript[/B]("Top SCB")
    End
Next i


با هر بار فشردن Button در برنامه فرستنده، یک کد به برنامه گیرنده ارسال میشه و با دریافت کد کاری رو انجام میده.
مشکل اینجاست که به تعداد فشردن کلید در برنامه فرستنده، برنامه گیرنده اجرا خواهد شد!!!
یعنی اگه من 5 بار کلید رو بفشارم، 5 فایل اجرایی از برنامه ی گیرنده اجرا میشه و توی Procces Explorer هم نشون داده میشه!!

لطفاً راهنماییم کنید.
کلی وقت گزاشتم برا این برنامه. برای همه ی مشکلات یه فکری کردم و حلش کردم (البته با کمک دوستان)، دیگه فکر اینجاشو نکرده بودم!!!

ویندوز من:
Windows 7 x64

 

پیوست ها

  • 02.png
    02.png
    10.8 کیلوبایت · بازدیدها: 10

nevercom

کاربر متخصص انجمن مولتی مدیا بیلدر
هنگام خروجی گرفتن از برنامه ی گیرنده، تیک Allow only one instance رو فعال کنید. این گزینه باعث میشه همزمان فقط یک دسترسی از برنامه ی شما ایجاد بشه (یعنی اگه چندبار اجراش کنید، فقط یه پنجره باز میشه)
 

mahdi6

Member
سلام
عرض ادب و احترام
من دو تا سوال در مورد ارتباط بین دو کار دارم هینجا میپرسم تاپیک تکراری درست نشه
اول راهی هست که از تو پروژه اول پروژه دوم را بست
دوم امکان داره از تو پروژه اول یه مقداری تو متغییر سیو کنیم بعد پروژه دوم همون متغییر را بتونه بخونه؟
با تشکر
 

9up

Active Member
سلام
اگه منظورت ارتباط مستقیم بین پروژه هاست، نه نمیشه. این چیزی که شما میخوای در برنامه ویژوال بیسیک قابل اجراست. اونجا می تونی توی یه پروژه به هر تعداد که دوست داری اپلیکیشن بسازی که در اونجا متغیرها در همه جا یکی هستن!
اما در mmb من رابطه یکطرفه رو امتحان کردم و جواب قابل قبولی داد، حالا رابطه دوطرفه هم فکر نکنم که مشکلی پیش بیاد و به همون صورت باید جواب بده.
اینکه متغیری رو به صورت مستقیم بفرستی به قسمت دوم برنامه به هیج وجه امکانش نیست یا حداقل من نمیدونم!! ولی با یک ترفند میتونی این کارو انجام بدی.
باید از پروژه اول متغیر رو توی یه فایل متنی سیو کنی و با پروژه دوم اون عددی رو که تو فایل متنی سیو کردی رو بخونی. به همین راحتی و تموم...

شاید دوستان ترفندهای دیگه داشته باشن.
من با این ترفند خیلی خوب جواب گرفتم.

اگه جزییات بیشتری خواستی بگو تا بگم.

 

mahdi6

Member
سلام
تشکر و سپاس فروان
استفاده از فایل متنی بلدم الان همین کار کردم
فقط بستن پروزه دوم را نمی دونم چی کار کنم
یه سوال
الان متوجه این کار شما نشدم
دو پروژه شما چطور به هم مرتبط است چطور برنامه اول مقدار را می فرستد
با تشکر
 

9up

Active Member
اپلیکیشن 1:
دوتا Button داریم که میخوایم با زدن هر کدوم کد مشخصی به اپلیکیشن 2 ارسال بشه تا اون (اپ2) با توجه به کد دریافتی، کاری رو انجام بده.
توی Button شماره یک، اسکریپت زیرو وارد میکنیم.
PHP:
Param$ = '1'
Run("Path$","Param$")

و توی Button شماره 2 به ترتیب زیر
PHP:
Param$ = '2'
Run("Path$","Param$")

اپلیکیشن 2:
تو پروژه دومت یه Script میسازی و اسمشو میزاری CBK_CMDLINE
بعد کد زیر رو توش مینویسی
PHP:
n=VAL(CmdLineParam$[0])
If (n>0) Then
  For i=1 To n
    If (CmdLineParam$[i] = '1') Then
      ***
    End
    If (CmdLineParam$[i] = '2') Then
      ***
    End
  Next i
End
اینجوری با توجه به کد دریافتی کاری رو انجام میده.
اونجایی که *** گزاشتم می تونی هر چیزی که خواستی بزاری. یعنی هرکاری که بعد از دریافت کد میخوای انجام بدی.
امیدوارم خوب توضیح داده باشم.

 

mahdi6

Member
سلام
عرض ادب و احترام
خیلی لطف کردید
تشکر و سپاس فروان
فقط دوستان سوال اولم را اگر کسی بلده جواب بده بستن پروژه دوم
با تشکر
 

nevercom

کاربر متخصص انجمن مولتی مدیا بیلدر
خب شما میتونید یک پارامتر تعیین کنید که هروقت پروژه ی دوم اون رو دریافت کرد، دستور Exit بده.
و یا میتونید توسط پلاگین پروسه ی مربوط به برنامه رو ببندید. (Microbe Process )
 

m javad

کاربر متخصص
اجرای برنامه با دستور run و ارسال پارامتر با کامند لاین زیاد جالب نیست
چون هم یکم زمانبر هست (زمان اجرای مجدد برنامه) و هم اینکه میشه برنامه رو توسط برنامه های دیگه کنترل کرد (با به دست آوردن مقدار های ارسالی به کامند لاین)

اونجا می تونی توی یه پروژه به هر تعداد که دوست داری اپلیکیشن بسازی که در اونجا متغیرها در همه جا یکی هستن!
هر aplication موقع اجرا فضایی رو در اختیار میگیره و اطلاعات خودش رو انجا ثبت میکنه، پس متغییر های اون هم انجا نوشته میشه و این بدین معناست که نمیشه متغییرهای یه برنامه رو برای دیگری استفاده کرد، دسترسی به فضای برنامه های دیگر کار چندان راحتی نیست !!
اون چیزی که شما میگید فرم هست. امکان ایجاد چندین فرم برای یک برنامه هست که متغییر ها برای تمام اونها ثابت و قابل دسترسی هست

اول راهی هست که از تو پروژه اول پروژه دوم را بست
دوم امکان داره از تو پروژه اول یه مقداری تو متغییر سیو کنیم بعد پروژه دوم همون متغییر را بتونه بخونه؟
با تشکر

توی برنامتون یه تایمر بزارید و با استفاده از اون به طور پیوسته یه متغییر رو بخونید و با مقدار های مختلف اون توی برنامتون کار های متفاوت رو انجام بدید
مثلا توی برنامه اول کد زیر رو میزنید:
V$='Close'
SaveVariable("Val1","V$")

و توی برنامه دوم توی تایمر این رو چک میکنید

LoadVariable("Val1","V$")
If (V$='Close') Then
Exit()
End

یادتون باشه در ابتدای اجرای برنامه متغییر رو برابر مقدار خالی قرار بدید
و با توجه به این کد بالا هر متغییری رو میتونید تو برنامه اول مقداردهی کنید و تو برنامه دوم اون رو دریافت کنید
موفق باشید
 

9up

Active Member
خیلی ممنون از راهنماییتون.
یه سوال
من تو برنامم یه کرونومتر دارم که هر 1000ms باید بدون کوچکترین وقفه ای عمل شمارش رو انجام و نمایش بده.
اینکه بخوام از یه تایمر دیگه برای چک کردن مداوم متغیر استفاده کنم، مشکلی برای تایمر اولی پیش نمیاد!!!؟؟
و اینکه چک کردن مداوم متغیر مقدار حافظه رو الکی اشغال نمیکنه!!؟
من یه مشکل کوچولو با روشی Param دارم. اگه این روش ذخیره و بازیابی متغیر در حافظه خوب جواب بده، از همین روش استفاده می کنم.
خواهش می کنم یه توضیح جامع بدین و در مورد تایمرها هم توضیح بدین.
 

جدیدترین ارسال ها

بالا