دلفي: تنفيذ البرنامج والإجراءات الداخلية / الدالة الدعوة من CMD أو باستخدام DoubleClick على الملحق المرتبط

StackOverflow https://stackoverflow.com/questions/1285204

سؤال

لذلك - في الآونة الأخيرة، قمت بتشغيل بعض المشكلات الحاسمة من أي طريقة تم استدعاء البرنامج، إذا كانت المعلمات في كلتا الزمن هي نفسها - مثل: / شيء / شيء ما. أقوم بربط الأيقونة مع البرنامج في Runetime ويمكنني استخدام CMD للاتصال به، ولكن، كلما قمت بإنشاء الملفات المرتبطة (بالأيقونة)، فتح PROGAM، ولكن لا يتصل بالدوائر اللازمة لأنني لا أملك الزناد / السمة الضرورية / المعلمة أنه إذا تم تنفيذ التنفيذ DoubleClick، فلن يعمل ...> appname.exe / شيء / شيء ما.

هل يمكنك إعطاء مثال بسيط أو الكتابة من الناحية النظرية جميعا مع وظائف متتالية وما إلى ذلك.

حاليا، كما يمكنك تخمين، أقوم باستخدام Paramstr / ParamCount / Blowlabla / FindCmdlineswitch / وبعض المهام الأخرى ... ولكن ... لا يزال ... :(

هل كانت مفيدة؟

المحلول

هل يمكنك شرح القليل؟

أنا فكر في تريد أن تكون قادرا على القيام بعمل # 1 إذا كان المستخدم DoubleClicks على أيقونة مستند ل "mydocument.ext"، والعمل رقم 2 إذا كان

appname.exe mydocument.exe

سيجعل DoubleClicking شل تشغيل الفعل "المفتوح"، والذي يحتوي على "سلسلة الأوامر" المرتبطة بالرقم. أفضل رهان هو تعيين سلسلة الأوامر هذه إلى شيء مثل ...

MyProgram.exe "%1" /doubleclicked

... ثم تحقق من العلم / DoubleClicked في وقت التشغيل. من الواضح أنه لا توجد طريقة يمكنك من خلالها تمنع المستخدم كتابة الأمر باستخدام خيار "/ doubleclicked"، ولكن هذه هي الطريقة التي تعمل بها شل.

نصائح أخرى

كما يوحي روددي، فإن مفتاحي المعلمة أعتقد أن الحل الوحيد الموثوق به. ملاحظة ولكن إذا قام المستخدم بإنشاء اختصارات (اختصار) الخاص به، فقد لا يناسب احتياجاتك.

أي إذا قام المستخدم بإنشاء اختصار يتضمن بعض "المستند" في سطر الأوامر، هل تريد أن تعامل كاحتجاز سطر الأوامر أو "نقرة مزدوجة". تخميني هو الأخير.

إذا كان الأمر الأول، فيمكنك التوقف عن القراءة هنا. :)

ولكن إذا كان ذلك يكون هذا الأخير قد تحتاج إلى وضع المزيد من العمل في (أكثر) بشكل موثوق في الحصول على السلوك الذي تريده ....

من شأنها أن تنطوي على استخدام مفتاح سطر الأوامر للإشارة إطلاق سطر الأوامر, ، بدلا من إطلاق نقرة مزدوجة، نظرا لوجود طرق متعددة "بفعالية" انقر نقرا مزدوجا فقط، ولكن طريقة واحدة فقط لتشغيل شيء من سطر الأوامر - أي استخدام سطر الأوامر! (أفكر في قائمة البدء -> تشغيل ... لتكون إطلاق سطر الأوامر، بالمناسبة. YMMV)

لذلك، إذا كان أنا سأقوم بإنشاء قاذفة محددة من الأوامر للتطبيق. سيكون قاذفة سطر الأوامر في الواقع جزء بسيط للغاية من التعليمات البرمجية التي تأخذ سطر الأوامر يتم تقديمها، وإلحاق ببساطة بمعلمة إضافية، قبل استدعاء التطبيق الفعلي قابل التنفيذ:

على سبيل المثال

MyApp Param1 Param2.

التي تستدعي ببساطة Shellexecute بفعالية:

myappgui. param1 param2. / cmd.

أنا نفسي غير مهتم للغاية بوجود اثنين من التنفيذيين لأن المستخدم أقل قلقا بكثير مع الاسم الفعلي للإكس الذي يمثل التطبيق "الحقيقي" الخاص بك عند استدعاءه من خلال واجهة المستخدم الرسومية لأنه بالطبع تداعيات واجهة المستخدم الرسومية التي لا تنطوي على معرفة ، أو الحاجة إلى معرفة، الاسم. الجمعيات والاختصارات الخاصة بك من نوع الملفات وغيرها ببساطة كل نقطة مباشرة إلى "حقيقي" myappgui.exe., ، بدلا من myapp.exe.

ومرجع سطر الأوامر الخاص بك يفسد المستخدم المستخدم myapp.exe. لاستدعاء التطبيق الخاص بك من سطر الأوامر.

في التطبيق، إذا وجد أن مفتاح سطر الأوامر، فهذا يعرف أنه تم إطلاقه عبر تطبيق قاذفة سطر الأوامر، وإلا كان يجب أن يكون تشغيل نقرة مزدوج / واجهة المستخدم الرسومية.

فيما يتعلق بأغلبية مستخدمي المستخدمين، قد لا يحتاجون أبدا إلى أن يعرفوا أن هناك نشاطين exe. في أي حال، عليك أن تقبل ذلك إذا / عندما يكتشف المستخدم تقنية الخاص بك - والتي تختارها - فيمكنك من خلال خداع سطر الأوامر لتحقيق أي نهايات يرغبون فيها.

إذا كان هذا مهم بالنسبة لك، فإن نهج قاذفة سطر الأوامر ربما يجعلها أقل احتمالا أن يكتشفون الآلية - مع العلم أن هناك اثنين من الملفات التنفيذية ليست كافية - فسيحتاجون أيضا إلى معرفة تبديل سطر الأوامر أن سطر الأوامر الخاص بك يضيف قاذفة - إذا استخدموا للتو myappgui.exe. مباشرة من سطر الأوامر، دون استخدام قاذفة سطر الأوامر myapp.exe., ، ثم ما زال يستجيب كما لو تم إطلاقه من واجهة المستخدم الرسومية!

من ناحية أخرى، باستخدام مفتاح للإشارة إلى واجهة المستخدم الرسومية إطلاق يستلزم وضع هذا التبديل المطلوب على "عرض عام".

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top