PDA

View Full Version : pipe



majid2230
دوشنبه 10 اسفند 1388, 07:26 صبح
کسی می دونه چه جوری میشه به یه کنسول پایپ زد ؟

BORHAN TEC
دوشنبه 10 اسفند 1388, 18:52 عصر
بي زحمت بيشتر توضيح بدين، چون اصلاً منظورتون رو متوجه نمي شم!!!

majid2230
دوشنبه 10 اسفند 1388, 19:32 عصر
سلام
ممنون از توجهتون , منظورم این بود (هر چند فکر می کنم همون پایپ منظور رو می رسونه )که من دستورات رو به یه برنامه کنسول مثل cmd بفرستم برنامه مورد نظر دستور رو اجرا کنه و نتایج رو به من برگردونه .من یه کد برای این کار دارم ولی بعد از دفعه اول که کامپایل شد دیگه کامپایل نمی شه و access violation error می ده (زمان create process کردن).اگه فکر می کنید کمکی می کنه کدشرو بذارم ؟

BORHAN TEC
دوشنبه 10 اسفند 1388, 20:15 عصر
اگه فکر می کنید کمکی می کنه کدشرو بذارم ؟
اگه كدش رو قرار بدين خيلي بهتر ميشه.

vcldeveloper
دوشنبه 10 اسفند 1388, 21:04 عصر
کدش در همین سایت موجود هست، یک جستجو کنید، پیدا می کنید.

majid2230
دوشنبه 10 اسفند 1388, 22:36 عصر
سلام
من که "pipe زدن" سرچ کردم چیزی مرتبط پیدا نکردم اگه ممکنه یه لینک بذارید .
این نمونه کدی که من دارم , کامند dir رو در cmd اجرا می کنه نتایج رو در یه ممو بر می گردونه . برای سیستم و ورژن من که خطا می ده البته قبلا نمی داد , شما اجرا کن اگه خطا نداد خبری بده

BORHAN TEC
دوشنبه 10 اسفند 1388, 22:48 عصر
در پارامتر اول به جاي nil مسير برنامه اي كه ميخواهيد اجرا شود را وارد كنيد. به عنوان مثال 'C:\windows\system32\cmd.exe' .

majid2230
سه شنبه 11 اسفند 1388, 12:59 عصر
سلام
پیشنهادتون رو امتحان کردم , خطا نداد اما برنامه هنگ کرد و تو حلقه repeat بعد از چند دور اجرا , در خط کد اول حلقه گیر کرد و به ادامه کد برنگشت .:متفکر:

vcldeveloper
سه شنبه 11 اسفند 1388, 18:16 عصر
Capture Output of a Console Application (http://www.delphi3000.com/articles/article_3361.asp)

majid2230
سه شنبه 11 اسفند 1388, 19:04 عصر
سلام
access violation error می ده (زمان create process کردن) , آیا این کد برای شما کار کرد؟

vcldeveloper
سه شنبه 11 اسفند 1388, 23:23 عصر
access violation error می ده (زمان create process کردن) , آیا این کد برای شما کار کرد؟
من ازش استفاده نکردم. لینک را قرار دادم که چگونگی انجام این کار را متوجه بشید. اگر مشکلی داره، می تونید مستندات توابع API استفاده شده، و پارامترهای ارسالی را مطالعه کنید. در Commentهای اون مطلب هم کاربرانی اظهار نظر هایی کردند.

Securebit
سه شنبه 11 اسفند 1388, 23:55 عصر
یک یونیت کامل که از دلفی 2010 2009 هم پشتیبانی میکنه.

majid2230
سه شنبه 11 اسفند 1388, 23:57 عصر
سلام آقای کشاورز
من همین کد رو قبلا استفاده کردم , کار نکرد و سر همین خطی که اشاره شد خطای access violation داد, توی نت گشتم یه برنامه برای اصلاح سیستم پیدا کردم چون کد مشکلی نداشت, یه کنسول پیدا کردم که خطا های سیستم رو فیکس می کرد با اجرای این کنسول برنامه کامپایل شد و درست هم کار می کرد, حالا که دوباره به این کد نیاز دارم دوباره با همون خطا مواجه می شم و هر چه دنبال اون کنسول می گردم پیداش نمی کنم , این تاپیک رو برای این مطرح کردم شاید روش دیگه ای باشه حالا اگه ممکنه این کد رو روی سیستمتون کامپایل کنید اگه کامپایل شد بگید من سیستم عاملم رو عوض کنم .
با تشکر از Strong Bytes (http://barnamenevis.org/forum/member.php?u=50994)
من هنوز نتونستم کدتون رو امتحان کنم امیدوارم جواب بده .

majid2230
چهارشنبه 12 اسفند 1388, 03:48 صبح
سلام
آقای/خانم Strong Bytes (http://barnamenevis.org/forum/member.php?u=50994) اگر براتون مقدوره یه نمونه کد از کار با این یونیت بذارید .
ممنون

BORHAN TEC
پنج شنبه 13 اسفند 1388, 01:14 صبح
در پارامتر اول تابع CreateProcess در صورتي مي توانيد از nil استفاده كنيد كه از يك پلاتفرم 16 بيتي استفاده كنيد، در غير اين صورت بايد مسير يك برنامه را به عنوان آرگومان به تابع ارسال كنيد. البته ديشب در رابطه با اين برنامه يك كد پيدا كردم كه تا حدودي اون رو اصلاح كردم كه سعي مي كنم سعي مي كنم در همين قسمت قرار بدمش.

hello37
یک شنبه 26 آذر 1391, 18:59 عصر
سلام
پیشنهادتون رو امتحان کردم , خطا نداد اما برنامه هنگ کرد و تو حلقه repeat بعد از چند دور اجرا , در خط کد اول حلقه گیر کرد و به ادامه کد برنگشت .:متفکر:




سلام من این تغییرات رو دادم و جواب داد اما کدیکه به عنوان CMD در Memo1.Lines.add(RunProg('cd d:\','c:\windows')); وازد کردم مثلا در اینجا "cd d:\" اصلا کار نمی کند.


DuplicateHandle(GetCurrentProcess(), hOutputReadTmp, GetCurrentProcess(),
@hOutputRead, 0, false, IO_COMPLETION_MODIFY_STATE);//DUPLICATE_SAME_ACCESS);
DuplicateHandle(GetCurrentProcess(), hInputWriteTmp, GetCurrentProcess(),
@hInputWrite, 0, false, IO_COMPLETION_ALL_ACCESS);