कन्सोल ऍप्लिकेशनसाठी विंडो हँडल कसे मिळवायचे. हे वर्णनकर्ता काय आहे? विशेषता संरचनेचे वर्णन

विंडोजसाठी 14.04.2019
विंडोजसाठी

ते करण्याचा येथे एक विश्वासार्ह मार्ग आहे:

स्टॅटिक एक्सटर्न बूल AttachConsole(uint dwProcessId); स्थिर बाह्य IntPtr GetConsoleWindow(); स्थिर बाह्य bool FreeConsole();

  • सध्याची प्रक्रिया ज्या कन्सोलला जोडलेली आहे त्यासाठी, फक्त GetConsoleWindow()
  • कन्सोलशी आणखी एक प्रक्रिया जोडलेली आहे, अटॅचकन्सोल वापरून देखील त्यास कनेक्ट करा, GetConsoleWindow वर कॉल करा, ते त्वरित FreeConsole मधून वेगळे केले जातात.

अतिरिक्त सावधगिरीसाठी, तुम्ही संलग्न करण्यापूर्वी तुमच्या कन्सोल इव्हेंट हँडलरची नोंदणी करा (आणि विलग केल्यानंतर नोंदणी रद्द करा) जेणेकरून तुम्ही कन्सोलला संलग्न केलेल्या लहान टाइम स्लॉटमध्ये कन्सोल इव्हेंट घडल्यास तुम्ही चुकून संपणार नाही:

स्थिर बाह्य bool SetConsoleCtrlHandler(ConsoleCtrlDelegate HandlerRoutine, bool Add); प्रतिनिधी बुलियन कन्सोलCtrlDelegate(CtrlTypes CtrlType); enum CtrlTypes: uint ( CTRL_C_EVENT = 0, CTRL_BREAK_EVENT, CTRL_CLOSE_EVENT, CTRL_LOGOFF_EVENT = 5, CTRL_SHUTDOWN_EVENT ) bool is_attached=false; ConsoleCtrlDelegate ConsoleCtrlDelegateDetach = प्रतिनिधी(CtrlType) ( if (is_attached = !FreeConsole()) Trace.Error("FreeConsole on " + CtrlType + ": " + नवीन Win32Exception()); खरे परत करा;

फक्त वाचनासाठी वर्तमान प्रक्रियेत बदल सादर करणे खूपच कुरूप आहे (जेव्हा ती कन्सोल प्रक्रिया असते तेव्हा ती खूप कुरूप होते कारण सध्याची कन्सोल संपुष्टात येण्यापासून टाळण्यासाठी मदतीची प्रक्रिया आवश्यक आहे). तथापि, पुढील संशोधनातून असे दिसून आले आहे की प्रक्रियेमध्ये csrss किंवा लक्ष्य प्रक्रियेला इंजेक्शन देण्याशिवाय दुसरा कोणताही मार्ग नाही.

कन्सोलची ReadProcessMemory माहिती अंतर्गत आहे आणि csrss.exe द्वारे व्यवस्थापित केली जाते (किंवा त्यापैकी अनेक, Vista पासून प्रत्येक सत्रासाठी एक), म्हणून ती ReadProcessMemory वापरून पुनर्प्राप्त केली जाऊ शकत नाही. सर्व csrss प्रदान करते CSRSS LPC API. मध्ये फक्त एक संबंधित कार्य आहे पूर्ण यादी API, SrvGetConsoleWindow. आणि ते PID घेत नाही, परंतु कॉलर winsrv.dll मधील फंक्शन काय पाहत आहे किंवा वेगळे करत आहे हे निर्धारित करते.

हे करून पहा:

सार्वजनिक स्थिर बाह्य IntPtr FindWindowByCaption(IntPtr zeroOnly, स्ट्रिंग lpWindowName); … Console.Title = "Test"; … IntPtr handle = FindWindowByCaption(IntPtr.Zero, Console.Title);!}

मी फक्त माझ्यासाठी ही समस्या सोडवली (दुर्दैवाने, थॉमसचे उत्तर पाहण्यापूर्वी, जे खूप वेगवान आहे). बरं, त्याच्या उत्तरावर समाधानी नसलेल्यांसाठी हा दुसरा मार्ग आहे. मी हे उत्तर लिहित आहे कारण मला वेगळे उत्तर देऊ इच्छित आहे + सर्वोत्तम मार्गजर तुम्ही कन्सोलला विंडो मानत असाल तर प्रोग्राम क्लास तयार करा. चला या डिझाइनसह प्रारंभ करूया:

मी प्रोग्राम वर्गाची डीफॉल्ट शैली बदलली आहे. मी प्रत्यक्षात ते एका वर्गात बदलले ज्यामध्ये प्रोग्राम आहे, केवळ एक पद्धत नाही जी त्याचे प्रतिनिधित्व करते आणि सामग्रीसाठी इतर वर्ग वापरते. (तुम्हाला मला काय म्हणायचे आहे ते माहित नसेल तर काही फरक पडत नाही).

मला असे करावे लागले कारण मला खालील इव्हेंट हँडलर लिहायचे होते:

खाजगी शून्यता CatchUnhandled(ऑब्जेक्ट प्रेषक, UnhandledExceptionEventArgs e) ( var अपवाद = e.ExceptionObject अपवाद म्हणून; MessageBox.Show(हा, अपवाद. संदेश, "त्रुटी"); // तपासापहिला आर्ग. )

कन्सोल IWin32Window ची अंमलबजावणी करत नसल्यामुळे, मला ते स्वतः अंमलात आणावे लागले, अर्थातच, फक्त 1st युक्तिवादात कॉल करण्यासाठी.

त्याची अंमलबजावणी आणि इतर सर्व काही येथे आहे:

टीप: हा कोड माझ्या ऍप्लिकेशनमधून कॉपी केला आहे, तुम्ही ऍक्सेस मॉडिफायर मुक्तपणे बदलू शकता

कार्यक्रम वर्ग घोषणा:

अंतर्गत वर्ग कार्यक्रम: IWin32Window (... )

IN सामान्य रूपरेषा, वर्णनकर्ता हे ऑब्जेक्ट्सचे विशिष्ट गुणधर्म आहेत ज्यासाठी संबंधित वर्तन परिभाषित केले आहे. ॲक्सेस केल्यावर, निर्दिष्ट गुणधर्म पुनर्प्राप्त केले जातात, सेट केले जातात किंवा शब्दकोशातून काढले जातात. बोलणे सोप्या भाषेत, हे विशेष आहेत कीवर्ड, एखाद्या वस्तूचे वर्तन, त्याचे गुणधर्म किंवा रचना परिभाषित करणे. लेख वर्णनकर्त्यांसाठी अनेक पर्यायांचा विचार करेल. हे आपल्याला त्यांचे सार आणि हेतू अधिक अचूकपणे समजून घेण्यास अनुमती देईल.

HTML

हायपरटेक्स्ट मार्कअप लँग्वेजमध्ये, जी स्टॅटिक वेब पेजेस तयार करण्यासाठी वापरली जाते, टॅग हे टॅग्सपेक्षा अधिक काही नसतात. या वातावरणात, ते लेबल म्हणून कार्य करतात, ज्यामुळे त्यांच्या दरम्यान ठेवलेला मजकूर प्रदर्शित होतो एका विशिष्ट प्रकारे. अशा प्रकारे पृष्ठावरील घटकांची रचना आणि व्यवस्था तयार केली जाते.

नियमानुसार, भाषेची वैशिष्ट्ये ओपनिंग आणि क्लोजिंग डिस्क्रिप्टरची उपस्थिती निर्धारित करतात. मधील सर्व काही बदलाच्या अधीन आहे.

वर्णनकर्त्यामध्ये गुणधर्म असू शकतात, म्हणजेच विशिष्ट गुणधर्म. त्यांचे वाक्यरचना असे दिसते: विशेषता नाव = त्याचे मूल्य.

सामान्य तर्कशास्त्राच्या अधीन, HTML मधील वर्णनकर्ते ऑब्जेक्ट्सची ओळख लेबले दर्शवतात. त्यांच्या मदतीने तुम्ही नियंत्रण करू शकता देखावा, पृष्ठाशी संवाद साधा आणि त्यास विशेष अर्थ नियुक्त करा.

x86 आर्किटेक्चर

प्रोसेसरमध्ये, वर्णनकर्ता ही एक विशेष रचना आहे ज्याच्या मदतीने विविध संक्रमणे केली जातात. त्याची रचना अशी दिसते:

  • पक्षपात. कोड प्रक्रिया बदलू शकते.
  • निवडकर्ता. प्रक्रिया कोठे जायची हे एक प्रकारचे लेबल प्रतिबिंबित करते.
  • पॅरामीटर्सची संख्या.
  • प्रवेश अधिकार.

जावा

Java EE मध्ये डिप्लॉयमेंट डिस्क्रिप्टरची संकल्पना आहे. हे सर्व्हलेट कसे तैनात केले जाईल ते परिभाषित करते. मूलत: हे आहे कॉन्फिगरेशन फाइल, सेटिंग्ज, गुणधर्म आणि हार्डवेअर आवश्यकता असलेले.

वेब ऍप्लिकेशन्समध्ये, नियमांनुसार, अशा फाईलला web.xml म्हटले जावे आणि विशिष्ट फोल्डरमध्ये स्थित असावे.

फाइल वर्णनकर्ते

IN ऑपरेटिंग सिस्टमअहो, फाइल्ससह कार्य करण्यासाठी, तुम्हाला प्रथम त्यामध्ये प्रवेश करणे आवश्यक आहे. हे फाइल डिस्क्रिप्टरद्वारे केले जाऊ शकते. IN या उदाहरणातहे एक प्रकारचे लेबल म्हणून कार्य करते जे I/O प्रवाह तयार करणारी प्रक्रिया ओळखते.

विंडोज ऑपरेटिंग सिस्टम तुम्हाला CreateFile फंक्शन वापरून हँडलमध्ये प्रवेश करण्याची परवानगी देते. आवश्यक फाइलसह काम करताना ते नंतर वापरले जाऊ शकते.

IN युनिक्स प्रणालीवापरलेल्या फाइल वर्णनासाठी डिजिटल पदनाम. 0 हे टर्मिनल प्रक्रियेचे मानक इनपुट आहे, 1 त्याचे आउटपुट आहे, 2 निदान प्रवाह आहे. संख्यात्मक प्रतिनिधित्वांव्यतिरिक्त, तुम्ही स्पेसिफिकेशनद्वारे परिभाषित प्रतीकात्मक स्थिरांक वापरू शकता.

विंडो हँडल

सिस्टममध्ये कोणतीही विंडो तयार केल्यानंतर, त्यास विशिष्ट हँडल नियुक्त केले जाते. त्यात वापरलेले डेटा प्रकार HWND आहेत. प्रोग्रामर, अनुप्रयोग तयार करताना, प्रवेश करण्यासाठी ते योग्यरित्या वापरणे आवश्यक आहे

FindWindow फंक्शनला कॉल करून प्रोग्राम हँडल मिळवू शकतो. ते वर्ग किंवा विंडो ऑब्जेक्टच्या नावाने ते शोधण्यात सक्षम असेल आणि वर्णनकर्त्याचे मूल्य परत करेल.

ओळख योग्यरित्या पूर्ण झाली आहे की नाही हे तपासण्यासाठी, तुम्ही IsWindow फंक्शन वापरावे.

त्रुटी क्रमांक 1400

ऑपरेटिंग रूमच्या कुटुंबात ही समस्या सामान्य आहे. विंडोज प्रणाली. जेव्हा ती दिसते तेव्हा तिच्यासोबत असू शकते लहान वर्णन- अवैध विंडो हँडल. किंवा असा शब्द असू शकतो - “Error_invalid_window_handle” किंवा 0x578.

कसे लढायचे आणि चुकीच्या वर्णनाचा अर्थ काय आहे? ऑब्जेक्टच्या संदर्भानुसार, वेगवेगळ्या उपाययोजना करणे आवश्यक आहे.

कोणत्याही परिस्थितीत, आपण सिस्टमसह सर्व समस्यांसाठी घेतलेल्या मानक उपायांमधून त्वरित जावे:

  • सिस्टम फाइल इंटिग्रिटी चेक युटिलिटी वापरून त्रुटी लॉन्च करणे आणि स्कॅन करणे;
  • व्हायरससाठी तुमचा संगणक तपासा.
  • जर मुलभूत पायऱ्या मदत करत नसतील, तर क्रॅश होणारे ॲप अनइंस्टॉल करणे आणि पुन्हा इंस्टॉल करणे फायदेशीर ठरू शकते.

    दुसरा विश्वसनीय मार्गप्रणालीची कार्यक्षमता द्रुतपणे पुनर्संचयित करा - वापरून ते परत करा मानक साधने. सिस्टम रिस्टोर वापरल्यानंतर, ते शेवटच्या सक्रियवर परत येईल. बॅकअप प्रत, ते पूर्वी तयार केले होते.

    जेव्हा एखादी त्रुटी येऊ शकते

    बहुतेक प्रकरणांमध्ये, स्थापित सॉफ्टवेअरमधील त्रुटींमुळे अवैध हँडल त्रुटी उद्भवते. म्हणून, आपल्या संगणकावर कोणते सॉफ्टवेअर दिसते ते आपण काळजीपूर्वक निरीक्षण केले पाहिजे. उपलब्ध सर्व गोष्टी वेळोवेळी अपडेट करणे देखील आवश्यक आहे सॉफ्टवेअरआणि त्याच्या प्रकृतीचे निरीक्षण करा. त्याच वेळी, चांगल्या अँटीव्हायरस सॉफ्टवेअरसह स्वत: ला सशस्त्र करणे फायदेशीर आहे.

    निष्कर्ष

    प्रस्तुत लेख सर्वसामान्य तत्त्वेमध्ये वर्णनकर्त्यांचे कार्य विविध भाषाप्रोग्रामिंग आणि ऑपरेटिंग सिस्टम, त्यांची कार्ये, गुणधर्म आणि प्रकार. नियमानुसार, हा शब्द मुख्यतः प्रोग्रामर आणि विकसकांद्वारे त्यानंतरच्या प्रवेशासाठी आणि व्यवस्थापनासाठी ऑब्जेक्ट्स आणि घटक ओळखण्यासाठी वापरला जातो.

    हे चुकीचे वर्णन करणारे असल्याचेही स्पष्ट झाले. तो बाहेर वळते म्हणून, ही एक सामान्य समस्या आहे विंडोज वातावरण, बहुतेक प्रकरणांमध्ये सोप्या हाताळणीद्वारे निराकरण केले जाते.

    भाषांच्या C कुटुंबाच्या शक्यता खरोखर अमर्याद आहेत, तथापि, या स्वातंत्र्यामध्ये तोटे देखील आहेत: प्रोग्रामरला नेहमी लक्ष ठेवणे आणि "बफर ओव्हरफ्लो" नियंत्रित करणे आवश्यक आहे जेणेकरून प्रोग्राम नंतर क्रॅश होणार नाही. निळा पडदा"विविध प्रकारच्या वर विंडोज आवृत्त्याआणि वापरकर्त्यांकडून हार्डवेअर. तेच क्रॅकर्स आणि रिव्हर्सर्स विशेषत: सी प्रोग्राम्सच्या कोडमध्ये भेद्यता शोधतात जिथे ते कोणतेही रोपण करू शकतात व्हायरस कोड, लेखकाने त्याच्या व्हिडिओ कोर्समध्ये याबद्दल अधिक तपशीलवार बोलले. मी तेथे बरेच काही शिकलो आणि आता माझा कोड अधिक सुरक्षित आहे.

    कन्सोल विंडो हँडल (HWND) कसे मिळवायचे

    काहीवेळा आपल्याला कन्सोल अनुप्रयोगाशी संबंधित विंडोवर काही क्रिया करण्याची आवश्यकता असते. Win32 APIs कन्सोल अनुप्रयोगाशी संबंधित विंडो हँडल मिळविण्यासाठी थेट पद्धती प्रदान करत नाहीत. तथापि, FindWindow() वर कॉल करून विंडो हँडल मिळवता येते. हे फंक्शन वर्गाच्या नावावर किंवा विंडोच्या नावावर आधारित विंडो हँडल शोधते.

    वर्तमान कन्सोल शीर्षक निश्चित करण्यासाठी, GetConsoleTitle() म्हणतात. हे शीर्षक नंतर FindWindow() फंक्शनमध्ये निर्दिष्ट केले जाते.

    अनेक खिडक्या असू शकतात समान शीर्षक, नंतर तुम्हाला वर्तमानाचे शीर्षक बदलावे लागेल कन्सोल विंडोअद्वितीय करण्यासाठी. हे चुकीचे विंडो हँडल प्राप्त करण्यापासून संरक्षण करण्यात मदत करेल. SetConsoleTitle() चा वापर सध्याच्या कन्सोल विंडोचे शीर्षक बदलण्यासाठी केला जातो. ते कसे केले जाते ते येथे आहे:

    1. वर्तमान कन्सोल विंडोचे शीर्षक जतन करण्यासाठी GetConsoleTitle() वर कॉल करा.
    2. एक अद्वितीय शीर्षक बदलण्यासाठी SetConsoleTitle() वर कॉल करा.
    3. हेडर बदलण्यासाठी वेळ देण्यासाठी स्लीप(40) वर कॉल करा.
    4. HWND मिळविण्यासाठी FindWindow(NULL, uniquetitle) वर कॉल करा. ही क्वेरी अयशस्वी झाल्यास HWND किंवा NULL देईल.
    5. मूळ विंडो शीर्षक पुनर्संचयित करण्यासाठी चरण 1 मध्ये प्राप्त केलेल्या मूल्यासह SetConsoleTitle() वर कॉल करा.

    तुम्हाला मिळालेला HWND तपासणे आवश्यक आहे. उदाहरणार्थ, तुम्ही परिणामी HWND सध्याच्या प्रक्रियेशी जुळत आहे की नाही हे तपासू शकता त्यावर GetWindowText() वर कॉल करून आणि GetConsoleTitle() वापरून मिळवलेल्या निकालाशी त्याची तुलना करा.

    परिणामी HWND विंडो हँडलवरील सर्व संभाव्य ऑपरेशन्ससाठी योग्य असेल याची कोणतीही हमी नाही.

    उदाहरण कोड

    पुढील कार्यहँडल वर्तमान कन्सोल ऍप्लिकेशन विंडोवर (HWND) परत करते. फंक्शन यशस्वीरित्या कार्यान्वित झाल्यास, परत केलेले मूल्य कन्सोल विंडोचे हँडल असेल, अन्यथा, त्रुटीच्या बाबतीत, NULL परत केले जाईल. संक्षिप्ततेसाठी, काही तपासण्या संभाव्य चुकाकाढले.

    HWND GetConsoleHwnd(void) ( #define MY_BUFSIZE 1024 // कन्सोल विंडो शीर्षकासाठी बफर आकार. HWND hwndFound; // हे तेच परत केले जाईल. char pszNewWindowTitle; // अनन्य विंडो शीर्षक. char pszOldWindowTitle; // शीर्षक विंडो. / / वर्तमान विंडो शीर्षक निवडा (pszOldWindowTitle, MY_BUFSIZE); विंडो शीर्षक (pszNewWindowTitle); // नवीन विंडो शीर्षक शोधा.

    सूचना

    मिळवा वर्णनकर्ता खिडकीते तयार करून. API फंक्शन्स CreateWindow किंवा CreateWindowEx वर कॉल करा, किंवा वापरलेल्या फ्रेमवर्क किंवा लायब्ररीच्या वर्गांच्या संबंधित रॅपर पद्धतींना कॉल करा, ज्यामध्ये कार्य करण्याची कार्यक्षमता समाविष्ट आहे. खिडकी mi किंवा नियंत्रणे CreateWindow आणि CreateWindowEx फंक्शन्स थेट परत येतात वर्णनकर्ता खिडकीयशस्वी निर्मितीवर. कॉल अयशस्वी झाल्यास, ते NULL परत करतात. GetLastError API फंक्शन वापरून त्रुटी कारण कोडची विनंती केली जाऊ शकते. प्रोटोटाइप आणि तपशीलवार वर्णन CreateWindow आणि CreateWindowEx फंक्शन्सचे पॅरामीटर्स http://msdn.microsoft.com/en-us/library/windows/desktop/ms632679%28v=vs.85%29.aspx आणि http://msdn या लिंक्सवरून मिळू शकतात. मायक्रोसॉफ्ट ) किंवा स्पष्टपणे (RAII धोरणाची अंमलबजावणी करणे). म्हणून वर्णनकर्ता खिडकीते रेडीमेड इनिशियलाइज्ड ऑब्जेक्टवर प्राप्त करणे चांगले आहे. परत येणाऱ्या वर्ग पद्धतींबद्दल वर्णनकर्ता खिडकी, ऑब्जेक्टद्वारे अंतर्भूत केलेले, संबंधित फ्रेमवर्कच्या दस्तऐवजीकरणामध्ये आढळू शकते. उदाहरणार्थ, MFC मध्ये अशीच पद्धत CWnd वर्गाची GetSafeHwnd आहे.

    मिळवा वर्णनकर्ता खिडकीत्याचा शोध घेऊन. FindWindow आणि FindWindowEx API फंक्शन्स किंवा लागू केलेल्या फ्रेमवर्कच्या क्लास ऑब्जेक्ट्सच्या संबंधित रॅपर पद्धती वापरा वर्णनकर्ता खिडकी शीर्ष पातळी, आढळल्यास, किंवा अयशस्वी झाल्यास NULL. शोध वर्गाचे नाव आणि शीर्षकानुसार केला जातो खिडकी. फंक्शनच्या ऑपरेशनचे पॅरामीटर्स आणि पैलूंचे वर्णन http://msdn.microsoft.com/en-us/library/windows/desktop/ms633499%28v=vs.85%29.aspx वर आढळू शकते FindWindowEx फंक्शन हे FindWindow सारखेच आहे अपवाद वगळता ते चाइल्ड विंडो शोधते. FindWindowEx साठी दस्तऐवजीकरण http://msdn.microsoft.com/en-us/library/windows/desktop/ms633500%28v=vs.85%29.aspx येथे उपलब्ध आहे.

    शोधणे वर्णनकर्ता खिडकीत्यांच्या संचांची गणना करण्याच्या प्रक्रियेत. EnumWindows, EnumChildWindows, EnumThreadWindows API फंक्शन्स किंवा EnumWindows आणि EnumChildWindows फंक्शन्सच्या फ्रेमवर्कच्या पद्धती वापरा खिडकीउच्च स्तर आणि मुले खिडकीअनुक्रमे EnumThreadWindows फंक्शन सर्व गैर-मुलांची गणना करते खिडकीनिर्दिष्ट प्रवाह. यापैकी प्रत्येक फंक्शनला कॉलबॅक प्रक्रियेसाठी एक पॉइंटर पास करणे आवश्यक आहे, जे ऑपरेशन दरम्यान पास केले जाईल वर्णनकर्ता s ची पॅरामीटर्स म्हणून गणन कार्ये एकत्र करून, कॉलबॅक प्रक्रियेत विंडो गुणधर्म मिळवणे आणि विश्लेषित करणे शक्य आहे. वर्णनकर्ताआवश्यक खिडकी. वर्णन केलेल्या कार्यांसाठी दस्तऐवजीकरण खालील लिंक्सवर प्रदान केले आहे: - EnumWindows: http://msdn.microsoft.com/en-us/library/windows/desktop/ms633497%28v=vs.85%29.aspx ;- EnumChildWindows: http://msdn.microsoft.com/en-us/library/windows/desktop/ms633494%28v=vs.85%29.aspx ;- EnumThreadWindows: http://msdn.microsoft.com/en-us/library /windows/desktop /ms633495%28v=vs.85%29.aspx .

    मिळवा वर्णनकर्ता खिडकीज्ञात समन्वयांवर. WindowFromPoint, ChildWindowFromPoint, ChildWindowFromPointEx रिटर्न फंक्शन वर्णनकर्तादिलेला बिंदू ज्या विंडोशी संबंधित आहे त्या विंडोफ्रॉम पॉइंट फंक्शन वापरण्यास सर्वात सोपा आहे, परंतु परत येत नाही वर्णनकर्ता s लपविलेल्या आणि अक्षम केलेल्या विंडो. त्यासाठी दस्तऐवज http://msdn.microsoft.com/en-us/library/windows/desktop/ms633558%28v=vs.85%29.aspx येथे स्थित आहे वर्णनकर्तादिलेल्या पालकांच्या चाइल्ड विंडो खिडकीच्या मालकीचे दिलेला मुद्दा. या प्रकरणात, ChildWindowFromPointEx चे वर्तन लवचिकपणे वापरून नियंत्रित केले जाऊ शकते अतिरिक्त पॅरामीटर. या कार्यांसाठी दस्तऐवजीकरण खालील लिंक्सवर प्रदान केले आहे: - ChildWindowFromPoint: http://msdn.microsoft.com/en-us/library/windows/desktop/ms632676%28v=vs.85%29.aspx ;- ChildWindowFromPointEx: http :// msdn.microsoft.com/en-us/library/windows/desktop/ms632677%28v=vs.85%29.aspx .

    विषयावरील व्हिडिओ

    ऑपरेटिंग सिस्टम ऍप्लिकेशन प्रोग्रामिंग इंटरफेस विंडोज फॅमिलीफंक्शन्सच्या संचाद्वारे दर्शविले जाते. जेव्हा त्यांना बोलावले जाते तेव्हा ते तयार करू शकतात विविध वस्तू(फाईल्स, प्रक्रिया, धागे, सिंक्रोनाइझेशन ऑब्जेक्ट्स इ.). पुरेसा गोषवारा प्रदान करण्यासाठी आणि एकीकृत प्रवेशया वस्तू वर्णनकर्त्यांचा वापर करून ओळखल्या जातात - "वैयक्तिक" संख्यात्मक मूल्ये.

    तुला गरज पडेल

    • - अनुमती देणाऱ्या प्रोग्रामिंग भाषेतील अनुवादक विंडोज वापरून API;
    • - शक्यतो विंडोज प्लॅटफॉर्म SDK.

    सूचना

    विंडो हँडल मिळवा. हे अनेक प्रकारे केले जाऊ शकते. विशिष्ट पद्धतअंतिम ध्येयावर अवलंबून आहे.

    विंडो तयार करण्यासाठी CreateWindow किंवा CreateWindowEx API फंक्शन्स वापरा. ते यशावर हँडल आणि अपयशावर NULL परत करतात.

    द्वारे शीर्ष-स्तरीय विंडो आणि चाइल्ड विंडो शोधा विविध पॅरामीटर्स FindWindow आणि FindWindowEx फंक्शन्स अनुक्रमे वापरून. येथे यशस्वी शोधविंडो हँडल मिळेल.

    EnumWindows, EnumChildWindows, EnumThreadWindows फंक्शन्ससह विंडोची गणना करा. सापडलेल्या विंडोचे हँडल कॉलबॅक फंक्शनला पॅरामीटर म्हणून पास केले जातील.

    स्क्रीनवरील विशिष्ट स्थानावर असलेल्या विंडोचे हँडल शोधा. यापैकी एक फंक्शन कॉल करा: WindowFromPoint, ChildWindowFromPoint, किंवा ChildWindowFromPointEx.

    प्रक्रिया हँडल मिळवा. तयार करा नवीन प्रक्रिया CreateProcess, CreateProcessAsUser, CreateProcessWithTokenW, किंवा CreateProcessWithLogonW API फंक्शनला कॉल करून. ते सर्व PROCESS_INFORMATION प्रकारच्या संरचनेच्या hProcess फील्डमधील नवीन प्रक्रियेचे वर्णनक परत करतात, एक पॉइंटर ज्याला शेवटचा पॅरामीटर म्हणून पास करणे आवश्यक आहे.

    त्याच्या ज्ञात आयडीद्वारे प्रक्रिया हँडल शोधा. OpenProcess कॉल वापरा. सर्वांचे आयडी चालू असलेल्या प्रक्रियामिळवता येते, उदाहरणार्थ, CreateToolhelp32Snapshot, Process32First आणि Process32Next फंक्शन्स वापरून साधन लायब्ररीमदत करा.

    GetCurrentProcess फंक्शन वापरून वर्तमान प्रक्रियेसाठी छद्म हँडल पुनर्प्राप्त करा.

    थ्रेड हँडल मिळवा. CreateThread आणि CreateRemoteThread फंक्शन्स त्यांच्या स्वतःच्या आणि इतर कोणाच्याही प्रक्रियेत अनुक्रमे त्यांचे हँडल परत करून थ्रेड तयार करतात. तुम्ही OpenThread फंक्शन वापरून, संबंधित डिस्क्रिप्टर प्राप्त करून, त्याचा अभिज्ञापक वापरून विद्यमान थ्रेड उघडू शकता. GetCurrentThread ला कॉल करताना वर्तमान थ्रेडचे छद्म हँडल परत केले जाते.



    आम्ही वाचण्याची शिफारस करतो

    वर