View Full Version : ایجاد وفقه در کد نویسی VB
mostafa-sohrablou
چهارشنبه 25 مهر 1386, 17:06 عصر
سلام
یه برنامه دارم می نویسم که در اون یه برنامه دیگر را فعال می کنم و از طریق کد VB می خوام کارهای را در آن برنامه انجام بدهم با فرمان appactivate و sendkeys ولی مشکلی که دارم اینکه سرعت برنامه VB بیشتر از برنامه فرعی است و جلو جلو می ره و برنامه فرعی کلی از کارهای که گفته بودم را انجام نداده است چه کار کنم
با تشکر
saeen
پنج شنبه 26 مهر 1386, 18:28 عصر
برنامه ای که اجرا می کنی سورسه یا یه فایل اجرایی؟
subsub
پنج شنبه 26 مهر 1386, 23:35 عصر
سلام
یه برنامه دارم می نویسم که در اون یه برنامه دیگر را فعال می کنم و از طریق کد VB می خوام کارهای را در آن برنامه انجام بدهم با فرمان appactivate و sendkeys ولی مشکلی که دارم اینکه سرعت برنامه VB بیشتر از برنامه فرعی است و جلو جلو می ره و برنامه فرعی کلی از کارهای که گفته بودم را انجام نداده است چه کار کنم
با تشکر
با استفاده از حلقه Do While یا Do until باید دائماً بررسی کنی که اون چیزی که میخوای توی اون برنامه اومده یا نه. یعنی باید دائماً بررسی کنی که موقعیت برای انجام عمل روی برنامه دیگه مناسب هست یا نه.
البته این بستگی به سورس بودن یا نبودن اون برنامه هم داره.
MFiRE
جمعه 27 مهر 1386, 02:31 صبح
دوست عزیز باید از توابع Api برای ایجاد وقفه استفاده کنید !
زیاد توضیح نمی دم ... چون اینطور که معلومه می فهمین چی می گم(بابا حرفه ای ...:تشویق:).
تابع Sleep وقفه بوجود می یاره.
توی Api Viewer خودتون پیداش کنید !
یه مقدار رو دریافت می کنه ، که اونم مدت زمان وقفه هست.
برای مثال اگه بخواید وقفه ای به مدت زمان 1 ثانیه ایجاد کنید باید به صورت زیر از تابع Sleep استفاده کنید.
Call Sleep(1000)
این کد یک ثانیه وقفه بوجود می یاره.
شایدم منظورتون Suspend کردن برنامه ی دوم باشه ... یعنی برنامه ی دوم متوقف بشه !
ولی اگه منظورتون این نباشه ، بهتره در مورد کارکرد برنامه تون کمی بیشتر توضیح بدید ... دوستان حتما کمکتون می کنن.
mostafa-sohrablou
شنبه 28 مهر 1386, 07:21 صبح
از همه دوستان متشکرم که به بنده حقیر کمک می کنید.
با استفاده از حلقه DO نمی شود چون برنامه خود مشغول اجرای حلقه می شود و این خود یک مشکلی دیگر است.
ولی در مورد sleep بنده منظور شما را متوجه نمی شوم . در صورت امکان یک مثال کاملی بزنید متشکر می شوم.
در ضمن برنامه که می خواهم بنویسم، من در شرکت سایپا کار می کنم که برای ثبت مرخصی ها و اضافه کاری ها باید هر روز نزدیک به 500 تا 700 نفر را در سیستم MAIN کارگزینی ثبت کنم بنده برای این که کار باسرعت بیشتری انجام گیرد تمام اضافه کاری ها و مرخصی ها را از طریق یک بانک اطلاعاتی اکسس جمع آوری می کنم و حال می خواهم با استفاده از این ترفند اطلاعات بانک اکسس را یکی یکی بخوانم و به این صورت با فرمان SENDKEYS به سیستم کارگزینی که یک نرم افزار که فکر کنم EXTRA باشد وارد نمایم و دیگر این همه کد پرسنلی را تک تک وارد نکنم.
با تشکر - سهرابلو
mostafa-sohrablou
شنبه 28 مهر 1386, 07:42 صبح
از همه دوستان متشکرم که به بنده حقیر کمک می کنید.
با استفاده از حلقه DO نمی شود چون برنامه خود مشغول اجرای حلقه می شود و این خود یک مشکلی دیگر است.
ولی در مورد sleep بنده منظور شما را متوجه نمی شوم . در صورت امکان یک مثال کاملی بزنید متشکر می شوم.
در ضمن برنامه که می خواهم بنویسم، من در شرکت سایپا کار می کنم که برای ثبت مرخصی ها و اضافه کاری ها باید هر روز نزدیک به 500 تا 700 نفر را در سیستم MAIN کارگزینی ثبت کنم بنده برای این که کار باسرعت بیشتری انجام گیرد تمام اضافه کاری ها و مرخصی ها را از طریق یک بانک اطلاعاتی اکسس جمع آوری می کنم و حال می خواهم با استفاده از این ترفند اطلاعات بانک اکسس را یکی یکی بخوانم و به این صورت با فرمان SENDKEYS به سیستم کارگزینی که یک نرم افزار که فکر کنم EXTRA باشد وارد نمایم و دیگر این همه کد پرسنلی را تک تک وارد نکنم.
با تشکر - سهرابلو
mostafa-sohrablou
شنبه 28 مهر 1386, 07:48 صبح
از همه دوستان متشکرم که به بنده حقیر کمک می کنید.
با استفاده از حلقه DO نمی شود چون برنامه خود مشغول اجرای حلقه می شود و این خود یک مشکلی دیگر است.
ولی در مورد sleep بنده منظور شما را متوجه نمی شوم . در صورت امکان یک مثال کاملی بزنید متشکر می شوم.
در ضمن برنامه که می خواهم بنویسم، من در شرکت سایپا کار می کنم که برای ثبت مرخصی ها و اضافه کاری ها باید هر روز نزدیک به 500 تا 700 نفر را در سیستم MAIN کارگزینی ثبت کنم بنده برای این که کار باسرعت بیشتری انجام گیرد تمام اضافه کاری ها و مرخصی ها را از طریق یک بانک اطلاعاتی اکسس جمع آوری می کنم و حال می خواهم با استفاده از این ترفند اطلاعات بانک اکسس را یکی یکی بخوانم و به این صورت با فرمان SENDKEYS به سیستم کارگزینی که یک نرم افزار که فکر کنم EXTRA باشد وارد نمایم و دیگر این همه کد پرسنلی را تک تک وارد نکنم.
با تشکر - سهرابلو
mostafa-sohrablou
شنبه 28 مهر 1386, 07:58 صبح
از همه دوستان متشکرم که به بنده حقیر کمک می کنید.
با استفاده از حلقه DO نمی شود چون برنامه خود مشغول اجرای حلقه می شود و این خود یک مشکلی دیگر است.
ولی در مورد sleep بنده منظور شما را متوجه نمی شوم . در صورت امکان یک مثال کاملی بزنید متشکر می شوم.
در ضمن برنامه که می خواهم بنویسم، من در شرکت سایپا کار می کنم که برای ثبت مرخصی ها و اضافه کاری ها باید هر روز نزدیک به 500 تا 700 نفر را در سیستم MAIN کارگزینی ثبت کنم بنده برای این که کار باسرعت بیشتری انجام گیرد تمام اضافه کاری ها و مرخصی ها را از طریق یک بانک اطلاعاتی اکسس جمع آوری می کنم و حال می خواهم با استفاده از این ترفند اطلاعات بانک اکسس را یکی یکی بخوانم و به این صورت با فرمان SENDKEYS به سیستم کارگزینی که یک نرم افزار که فکر کنم EXTRA باشد وارد نمایم و دیگر این همه کد پرسنلی را تک تک وارد نکنم.
با تشکر - سهرابلو
Payman62
شنبه 28 مهر 1386, 18:20 عصر
سلام.
این تابع اسلیپ.
Private Declare Sub Sleep Lib "kernel32" Alias "Sleep" (ByVal dwMilliseconds As Long)
ولی روش کارت اصلا استاندارد نیست.
MFiRE
یک شنبه 29 مهر 1386, 01:20 صبح
سلام
این کار به هیچ وجه کار درستی نیست !!
شاید بشه با برنامه نویسی vb چیز بهتری طراحی کرد.
استفاده از تابع Sendkeys برای اینکار کار خطرناکی هست !! ...خطرناکه حسن ... نکن این کارو حسن !
بهتره که کامل بانک رو توی Vb ببری و یه برنامه ی خوب بنویسی.
!! DANGER !!
ولی در مورد تابع Sleep :
همونطور که گفتم این تابع وقفه بوجود می یاره.
یک نمونه کد رو در زیر براتون گذاشتم ... فقط کافیه روی فرم دابل کلیک کنید و این کدها رو Paste کنید.
Private Declare Sub Sleep Lib "kernel32" (ByVal dwMilliseconds As Long)
Private Sub Form_Load()
MsgBox "1"
Call Sleep(1000)
MsgBox "2"
End Sub
این کد یه پیغام نشون می ده ... بعد از 1 ثانیه یه پیغام دیگه نشون می ده.
همین!!!
vbhamed
یک شنبه 29 مهر 1386, 02:14 صبح
سلام
فکر می کنم تابع Sleep مناسب نباشه چون کار برنامه خودتونو متوقف می کنه
اما اگر شما از یک کنترل تایمر استفاده کنید و در هر مرحله از اجرای تایمر یک فرمان رو به برنامه فرعی بفرستید هم تاخیر رو ایجاد کردید و هم برنامه خودتون می تونه به کارش ادامه بده
یک متغیر عمومی تعریف کنید و هر بار تایمر اجرا میشه یکی بهش اضافه کنید و در روال تایمر با توجه به مقدار این متغیر دستوری که نوبتش هست رو به برنامه فرعی بفرستید
ضمنا یادتون باشه طبق مستندات میکروسافت، تابع SendKeys با ویندوز ویستا مشکل داره !
Mbt925
یک شنبه 29 مهر 1386, 15:50 عصر
واسه ی اینکه کاری که دارین انجام میدین حرفه ای و منطقی پیش بره باید یکم بیشتر روی اون برنامه کنترل داشته باشین ،
مثلا بفهمین که کاری که الان بهش گفتین انجام بده ، انجام شده یا نه.
اگه فقط قراره یه سری کار رو بهش بدین و اصلا نتونین تشخیص بدین که کدوم کار انجام شده یا نشده ،
از هر روشی برای ایجاد تاخیر استفاده کنین ، فایده ای نداره ،
چون ممکنه یه بار زودتر انجام بشه و یه بار دیرتر.
subsub
دوشنبه 30 مهر 1386, 22:11 عصر
از همه دوستان متشکرم که به بنده حقیر کمک می کنید.
با استفاده از حلقه DO نمی شود چون برنامه خود مشغول اجرای حلقه می شود و این خود یک مشکلی دیگر است.
ولی در مورد sleep بنده منظور شما را متوجه نمی شوم . در صورت امکان یک مثال کاملی بزنید متشکر می شوم.
در ضمن برنامه که می خواهم بنویسم، من در شرکت سایپا کار می کنم که برای ثبت مرخصی ها و اضافه کاری ها باید هر روز نزدیک به 500 تا 700 نفر را در سیستم MAIN کارگزینی ثبت کنم بنده برای این که کار باسرعت بیشتری انجام گیرد تمام اضافه کاری ها و مرخصی ها را از طریق یک بانک اطلاعاتی اکسس جمع آوری می کنم و حال می خواهم با استفاده از این ترفند اطلاعات بانک اکسس را یکی یکی بخوانم و به این صورت با فرمان SENDKEYS به سیستم کارگزینی که یک نرم افزار که فکر کنم EXTRA باشد وارد نمایم و دیگر این همه کد پرسنلی را تک تک وارد نکنم.
با تشکر - سهرابلو
1- منظورم این نبود که از Do دائماً استفاده کنی. بلکه فقط برای بررسی رسیدن برنامه فرعی به مرحل مورد نظر شما باید از Do استفاده کنید.
2- بهتره از sendkey استفاده نکنی. من بهت پیشنهاد میکنم که نام و کلاس TextBox های توی
اون برنامه رو بدست بیاری (TextBoxهایی که برای وارد کردن مشخصات هستند.) سپس با استفاده از تابع API به نام FindWindow دستگیره اون TextBoxها رو بدست بیاری و مقدار اونها را با همین دستگیره تغییر بدی. فکر کنم سرعتش بیشتر از sendkey باشه و اطمینانش هم بیشتر.
vBulletin® v4.2.5, Copyright ©2000-1404, Jelsoft Enterprises Ltd.