c++ - موقع - كيف تصمم تطبيق




إنشاء تطبيق بدون نافذة (4)

إذا كان لديك حاجة إلى تشغيل برنامجك دون الحاجة إلى وجود وحدة تحكم أو نافذة ، فقد تجد deamon مفيدًا على * NIX أو خدمات على Windows ، هذا المثال على .NET إذا كنت تحتاج إلى win32 عاديًا فقط google قليلاً للعينة.
نظرًا لأن سؤالك الذي تم وضع علامة عليه باسم win32 ، أفترض أن الخدمات أكثر ملاءمة لك.

كيف يمكنك برمجة تطبيق C / C ++ يمكن تشغيله بدون فتح نافذة أو وحدة التحكم؟


إذا كنت تستخدم MSVC أو Visual Studio فقط استخدم معالج Project الجديد وحدد تطبيق وحدة التحكم .


عند كتابة برنامج WinMain ، تحصل تلقائياً على خيار / SUBSYSTEM ليكون windows في المحول البرمجي. (بافتراض أنك تستخدم Visual Studio). بالنسبة لأي مترجم آخر ، قد يكون هناك خيار مشابه ، ولكن قد يكون اسم العلامة مختلفًا.

يؤدي هذا المحول البرمجي لإنشاء إدخال في تنسيق الملف القابل للتنفيذ ( تنسيق PE ) الذي يميز الملف القابل للتنفيذ كإطار قابل للتنفيذ.

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

لكن برنامج windows لا يحتاج إلى إنشاء أي نوافذ إذا لم يكن بحاجة إلى ذلك ، مثل جميع البرامج والخدمات التي تشاهدها على شريط المهام ، ولكن لا ترى أي نوافذ ملائمة لها. يمكن أن يحدث هذا أيضًا إذا قمت بإنشاء إطار ولكن اختر عدم إظهاره.

كل ما عليك القيام به ، لتحقيق كل هذا ،

#include <Windows.h>

int WinMain(HINSTANCE hInstance,
            HINSTANCE hPrevInstance, 
            LPTSTR    lpCmdLine, 
            int       cmdShow)
    {
    /* do your stuff here. If you return from this function the program ends */
    }

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


في Visual Studio Express 2010 بعد إعداد النظام الفرعي إلى windows (كما هو مقترح من قبل user17224) ، بدلاً من تغيير الرئيسي إلى WinMain (كما اقترحه user17224 و Brian R. Bondy) ، يمكن تعيين وظيفة الإدخال الرئيسي في الخصائص ، رابط ، نقطة دخول متقدمة: اكتب فقط في مربع النص.





winapi