سؤال

أحتاج إلى إضافة خيار "التشغيل عند بدء تشغيل Windows" إلى برنامجي CintaNotes، لكن لا أريد التضحية بـ "نظافته":وهو برنامج مجاني محمول بنسبة 100% ويجب ألا يترك أي أثر في النظام.لقد توصلت إلى فكرة الاكتشاف التلقائي للتشغيل من اختصار بدء التشغيل والتصغير تلقائيًا إلى علبة النظام.هل هناك طريقة للقيام بذلك؟أنا أستخدم C++ وWinapi الخام.

لذا:- لا كتابة إلى السجل - لا توجد معلمات سطر الأوامر

شكرًا!

محدث:السؤال ليس كيفية التصغير إلى علبة النظام!والسؤال هو كيف يمكن لبرنامج التفريق بين التشغيل بشكل طبيعي وتشغيله من اختصار مجلد بدء التشغيل دون استخدام معلمات التسجيل وسطر الأوامر.

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

المحلول

يبدو أن "نظافتك" هي بناء مصطنع في أحسن الأحوال.إذا كنت تطلب من المستخدم إنشاء اختصار في مجلد بدء التشغيل، فإنك تترك بالفعل بصمة (ولأكون صادقًا، هناك فرق بسيط بين "myprog.exe" و"myprog.exe -m") .في هذه الحالة، هناك بعض الطرق الأسهل من محاولة اكتشاف المكان الذي تهرب منه تلقائيًا.

أود ببساطة توفير خيار قائمة في برنامجك ("تثبيت") والذي سيؤدي بعد ذلك إلى تثبيت البرنامج على موقع قرص ثابت (على عكس محرك الأقراص المحمول)، بما في ذلك إدخال البرامج المطلوبة (ابدأ، كافة البرامج، CintaNotes).

وكجزء من هذه العملية (أو حتى بعد التثبيت)، يمكنك السماح لهم بتحديد "البدء باستخدام Windows" ثم تقوم بإنشاء اختصار مجلد بدء التشغيل للمستخدم مع خيار سطر الأوامر حتى يتمكن برنامجك من معرفة ما إذا كان يعمل بهذه الطريقة.ليس هناك فائدة من السماح بـ "البدء باستخدام Windows" ما لم يكن البرنامج متاحًا (أي على القرص الثابت، وليس محرك الأقراص المحمول).

لا داعي للقلق على الإطلاق بشأن إنشاء اختصارات على الإطلاق، ناهيك عن تلك التي تحتوي على معلمات.وهذا يمنح برنامجك التحكم في كيفية تشغيله - وضعان، "التثبيت" (والبدء في التصغير) أو "التشغيل بدون التثبيت أولاً" (والبدء بشكل عادي).

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

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

إضافة هذا تعديل لأن التعليقات لا تسمح بمساحة كافية:

أنت تسأل:

ما رأيك في مجرد تعطيل خيار "البدء عند بدء تشغيل Windows" عندما يكتشف البرنامج أنه يتم تشغيله من محرك الأقراص المحمول؟أعتقد أن هناك طريقة للكشف عن هذا.

هذه فكرة جيدة لأنه ليس من المنطقي السماح بالتشغيل التلقائي حتى يتم تثبيته (نظرًا لأن محرك الأقراص المحمول قد لا يكون موجودًا).احتمال واحد:

1/ عند التشغيل من الفلاش، تبدأ بـ "myprog.exe" نظرًا لأنك قمت بالنقر المزدوج فوق الملف القابل للتنفيذ وتشغيله في نافذة عادية.يقدم هذا خيار "التثبيت على قرص ثابت" وليس "البدء باستخدام Windows".كجزء من عملية التثبيت، يمكنك السماح لهم بإعداد النسخة المثبتة على "البدء مع Windows" ولكن ليس النسخة قيد التشغيل الحالية.

2/ يمكن إعداد البرنامج المثبت لديك ليعمل كـ "myprog.exe -i"، حيث أنك تقوم بإنشاء العنصر في Start/AllPrograms.سيؤدي هذا إلى تعطيل "التثبيت على القرص الثابت" ولكنه يسمح لك بتبديل "البدء باستخدام Windows".يمكنك اختيار ما إذا كنت تريد أن يبدأ التشغيل الصريح (من قبل المستخدم) بشكل طبيعي أو مصغر (انظر (3)).

3/ يمكن أن يكون الاختصار في StartUp هو "myprog.exe -s" (مرة أخرى، يمكنك التحكم في هذا لأنك قمت بإنشائه).هذا مطابق لـ (2) ولكنه يبدأ في التصغير (إذا بدأ (2) في التصغير على أي حال، فلا يوجد تمييز بين (2) و (3) ولا يوجد سبب لخيارات سطر الأوامر المختلفة).

بهذه الطريقة، يمكن أن يكون لكل خيار سلوك مختلف حسب ما تراه مناسبًا.

نصائح أخرى

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

وراجع قسم "كشف إذا تم بدء قابل للتنفيذ من قص قصير "في غير الموثقة CreateProcess

وتحقق التسجيل لهذا المفتاح. HKEY_LOCAL_MACHINE \ SOFTWARE \ مايكروسوفت \ ويندوز \ \ تشغيل وإضافة مفتاح سلسلة جديدة مع مسار التطبيق الخاص بك كقيمة. واستخدام بنية NOTIFYICONDATA لتقليل الطلب على الدرج.

لماذا لا يتم استخدام حجة لبدء تطبيق الحد الأدنى مثل:

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