المساعدة - البحث - قائمة الأعضاء - التقويم
نسخة كاملة: How can i get Handle to window to any running application
برمجة - شبكات - كمبيوتر - منتديات الفريق العربي للبرمجة > منتديات لغات البرمجة العام > منتدى مبرمجي C و ++C و C++.NET > أرشيف منتدى قسم السي ++
alaamostafa2000
i need to get handle to window to some running applications
like as an example
if there is some program name program.exe
is running on my machine
and i need to make program to get a window handle to this program
so what is the name of the function to do such a thing
thanks
إسماعيل ابراهيم
كود
// Compiled by Visual C++6.0 & C++ builder5.0 on winxp

#include <stdio.h>

#include <conio.h>

#include <string.h>

#include <windows.h>

HWND whandle[256];

int count=0;

BOOL CALLBACK EnumWindowsProc(HWND hwnd, LPARAM lParam);



int main(int argc, char* argv[])

{

printf("Hide ? ");

int lParam=getchar();

if (lParam=='Y'||lParam=='y')

lParam=1; //enumerate & hide

else

lParam=0; //enumerate with hidding

getchar(); // Why ? You try to find the reason  

EnumWindows(&EnumWindowsProc,lParam); //Hide

if(lParam==1) //Unhide

{

printf("Press anykey to unhide ...n");

getch();

for(int i=0;i<=count;i++)

ShowWindow(whandle[i],SW_SHOWNA);

}

printf("Press any key to halt ...n");

getch();

return 0;

}



BOOL CALLBACK EnumWindowsProc(HWND hwnd, LPARAM lParam)

{

char Buffer[256];

if( IsWindowVisible(hwnd) /*|| IsIconic(hwnd)*/)

//You try to keep the condition IsIconic & check the different

{

if(lParam==1)

{

whandle[count]=hwnd;

count++;

GetClassName(hwnd,Buffer,256);

if(

//Desktop

strcmp(Buffer,"Progman")&

//Our program

(hwnd!=GetForegroundWindow()) &

//TaskBar

strcmp(Buffer,"Shell_TrayWnd")

)

ShowWindow(hwnd,SW_HIDE);

}

//------- Show handle & Caption of windows---

GetWindowText(hwnd, Buffer, 256);

if(strlen(Buffer)== 0 )

strcat(Buffer , "Empty");

printf("%dt%sn",hwnd,Buffer);

//-------------------------------------------

}

return true;

}

هذا كود كتبه يوما اخي tmaaa , ترى كيف يقوم البرنامج برصد كل النوافذ الموجودة (الشغالة), وانت تضع الشرط للنافذة التي تريدها...

جرب الكود واي مشكلة إسأل.
alaamostafa2000
جزاك الله كل خير يا أخ إسماعيل
أنا جربت البرنامج وكان به بالضبط ما اريد
ولكن عندى تساؤل
الدوال المستخدمة فى هذا البرنامج موجودة بالفعل فى MFC ولكن
بـ Parameters مختلفة
فحتى الان انا لم استطع استخدامها فى برناج بـ MFC
فإذا كان عندك الحل فأتمنى ان تعطية لى
وانا شاكر جدا لاهتمامك بالرد
والسلام عليكم ورحمة الله وبركاته
tmaaa
السلام عليكم
WOW!
اخ ابراهيم لسه مذكر هذا؟! :eek:
انا نسيت اني كتبت هذا من قبل teeth_smile.gif , الان تذكرت كل شي .
هناك طريقه لعمل المطلوب ولكن ربما ليست هي الطريقه الأمثل. هذه فكره عنها :
الفكره تعتمد على معرفه مسبقه بالـ PID للبرنامج المستهدف ولتكن TargetPID.
سنقوم باستعمال EnumWindows للحصول على كل الـ windows الموجوده , أثناء ذلك سنحصل على الـ Handle الخاص بكل window , وباستعمال التابع GetWindowThreadProcessId يمكن الحصول على الـ PID الخاصه بالـ Handle , سنقوم بمقارنه كل PID نحصل عليها من التابع السابق مع الـ TargetPID , وما ان يتحقق TargetPID=PID نعلم ان الـ Handle هو المطلوب .
بالنسبه للحصول على الـ PID لـ Process معينه معروف اسمها فقط نقوم بعمل Enumerate للـ Process التي هي قيد العمل ( الشغاله حاليا ) , و بمقارنه اسم الـ Process يمكن معرفه الـ PID الخاصة بالبرنامج الذي هو هدفنا ( يمكن ان يكون هناك اكثر من Process بنفس الاسم ).
(f)
CIONO1
tmaaa
السلام عليكم
تذكرت شي teeth_smile.gif
في برنامج اسمه PrcView يقوم بعرض Running Process فيه ميزه switch to window . وهو يعتمد على نفس الطريقه السابقه ( من خلال الاطلاع على DisAssembly للبرنامج المذكور لاحظت ذلك . جرب اعمل DisAssemble للبرنامج المذكور وستلاحظ ذلك ).
(f)
CIONO1
alaamostafa2000
السلام عليكم ورحمة الله وبركاته
انا بصراحة مش عارف كيف اشكرك على الرد السريع
ربنا يكرمك إن شاء الله
انا بالفعل حصلت بالضبط على ما اريد ولكن هناك سؤال آخر
هل يمكن ان احصل على handle to window للبرامج الشغاله على جهاز آخر فى الشبكة
اذا كنت لا تعرف بالضبط يا ريت تذكرلى كيف ابحث عن هذه المعلومة
ولك جزيل الشكر والاحترام
والسلام عليكم ورحمة الله وبركاته
tmaaa
السلام عليكم
تحتاج لعمل connection للكمبيوتر الاخر . راجع التوابع Windows Networking Functions في MSDN .
WNetAddConnection
WNetAddConnection2
WNetAddConnection3
WNetCancelConnection
WNetCancelConnection2
WNetCloseEnum
WNetConnectionDialog
WNetDisconnectDialog
WNetEnumResource
WNetGetConnection
WNetGetLastError
WNetGetUniversalName
WNetGetUser
WNetOpenEnum
(f)
CIONO1
Neo_2010
FindWindow Function helps you to search for specific window By ClassName Or Window Title and If you want to Search For Another find Use FindWindow Too Or FindowWindowEx
هذه "نسخة - خفيفة" من محتويات الرئيسية للإستعراض الكامل مع المزيد من الصور والخيارات الرجاء إضغط هنا.
Invision Power Board © 2001-2009 Invision Power Services, Inc.