View Full Version : باز شدن پنجره جديد
DAMAVAND
یک شنبه 19 مهر 1388, 23:01 عصر
با سلام
دوستان کسي ميدونه آيا در ويندوز پيامي هست که با هندل کردنش توي برنامه بشه فهميد که يه پنجره جديد باز شده ????????
يعني ويندوز پيامي داره که وقتي يه پنجره جديد باز ميشه يا يه پنجره تغيير حالت ميده بشه اون رو تو برنامه هندل کرد ???
مثلا فرض کنيد کاربر يه پنجره جديد باز ميکنه ,حالا ممکنه اين پنجره متعلق به هر برنامه اي باشه , وقتي اين اتفاق ميفته ميشه از تو برنامه فهميد که يه پنجره جديد باز شده ????????
آيا ويندوز ' پيامي ' داره برا اين کار يا نه??????
با تشکر.
AliReza Vafakhah
دوشنبه 20 مهر 1388, 00:45 صبح
تابع معمول FindWindow عنوان پنجره و نام کلاس رو میگیره و بعد اگه پیداش کرد هندلش رو بهت بر میگردونه
البته میتونید child و Dialog را هم با FindWindowEX هندل کنید
DAMAVAND
دوشنبه 20 مهر 1388, 04:17 صبح
اين روش رو ميدونم ولي اين کار احتياج به يه تايمر داره !
يعني همش بايد چک کنيد !
منم منظورم باز شدن پنجره از برنامه خاصي نيست که بخوام با Findwindow چک کنم.
ميخوام اين کار رو با هندل کردن Message ويندوز انجام بدم.
آيا ويندوز وقتي يه پنجره جديد باز ميشه پيامي رو ارسال ميکنه که بشه هندلش کرد ????
Felony
دوشنبه 20 مهر 1388, 11:15 صبح
آيا ويندوز وقتي يه پنجره جديد باز ميشه پيامي رو ارسال ميکنه که بشه هندلش کرد ????
در مورد این هم حتما پیغامی داره ، ولی راحت تر از هوک کردن اون پیغام این هست که وقتی پنجره ی جدیدی در ویندوز باز بشه 100% پنجره ی فعلی برنامه ی شما از حالت Active خارج میشه و فوکوس رو از دست میده و این کار شما رو راحت میکنه ، مگر اینکه برنامه ی شما پنجره نداشته باشه یا انکه پنجرش حالت فوکوس نداشته باشه که مجبورید از همون هوک کردن پیغام استفاده کنید ...
Mahmood_M
دوشنبه 20 مهر 1388, 22:44 عصر
این Unit (http://delphi.about.com/od/windowsshellapi/a/delphi-hooks.htm) شاید کمک کنه ...
در این یونیت کلاسی قرار داره به نام TCBHook که فکر کنم می تونه برای این کار مفید باشه ...
این صفحه (http://delphi.about.com/od/kbwinshell/l/aa030403a.htm) هم کامپوننتی هست که البته جواب سئوالی که پرسیدید نیست ولی شاید توی پروژتون به درد بخوره ...
اگه فقط می خواید بفهمید که پنجره ی جدیدی اضافه شده یا نه می تونید توی یک Thread با تابع EnumWindow پنجره ها رو شمارش کنید و تغییرات رو بفهمید ...
اگه مشکلتون اینطوری حل میشه بگید شاید تونستم نمونه ای قرار بدم ...
موفق باشید ...
DAMAVAND
سه شنبه 21 مهر 1388, 20:42 عصر
محمود خان با EnumWindow هم کار کردم ولي براي کار با اون هم بايد با يه تايمر يا يه حلقه مرتب چک کنيد و کارم رو راه نميندازه. حتي توي يه Thread ديگه.
بايد همون طور که گفتيد از Hook استفاده کنم منتها من مثالي در باره اين که چطوري ميشه با هوک اين کار رو کرد پيدا نکردم هر چي بود در مورد کي برد و غيره بود .......
با تشکر
vBulletin® v4.2.5, Copyright ©2000-1404, Jelsoft Enterprises Ltd.