PDA

View Full Version : بدست آوردن window handle ایجاد شده توسط shellexecex



benyaminrahimi
جمعه 29 مهر 1390, 11:36 صبح
var

Rec: TShellExecuteInfo;
hand: HWND;

begin

if not (FileExists(afile)) then
abort;

FillChar(Rec, SizeOf(Rec), #0);

Rec.cbSize := SizeOf(Rec);
Rec.fMask := SEE_MASK_NOCLOSEPROCESS;
Rec.lpVerb := PChar('open');

rec.lpFile := PChar(afile);

Rec.nShow := SW_MINIMIZE;

hand := 0;

if ShellExecuteEx(@Rec) then
begin

می خوام بدونم همین جا @rec چه
window handle
ایجاد کرده

مثلا اگه فوتو شاپ باز شده

benyaminrahimi
سه شنبه 03 آبان 1390, 09:55 صبح
مرصی ... 35 بار مشاهده .. فقط

Felony
سه شنبه 03 آبان 1390, 10:27 صبح
می خوام بدونم همین جا @rec چه
window handle
ایجاد کرده
rec هیچ هندلی ایجاد نکرده ! بلکه یک Process ایجاد کرده که اون Process دارای Handle و ID هست و ممکنه n تا فرم ایجاد کنه که معلوم نیست شما کدوم فرم مد نظرت هست ( از نظر ویندوز ) ؛ پس راه حل مستقیمی برای این کار ندارید ؛ میتونید با استفاده از hProcess همون rec هندل پروسه ایجاد شده رو بگیری و با تابع EnumWindow لیست پنجره های در حال نمایش رو بگیری و بعد هم با توابعی مثل GetWindowThreadProcessId شناسه پروسه ایجاد کننده پنجره ها رو بگیری و با استفاده از اون به Process Handle های پنجره های باز دسترسی پیدا کنی و در آخر هم با یک مقایسه ببینی کدوم پنجره دارای Process Hadle هستی که rec برگردونده .

این لینک هم برای پیاده سازی این پروسه کمکت میکنه : http://www.codeguru.com/forum/showthread.php?t=392273

benyaminrahimi
پنج شنبه 05 آبان 1390, 14:24 عصر
مرصی با enum خیلی سرو کله زدم باید دوباره سعی کنم

benyaminrahimi
پنج شنبه 05 آبان 1390, 14:38 عصر
حرفت درسته مثلا فوتو شاپ 10 تا ویندو هندل ایجاد میکنه مشکلم با گرفتن caption حل شد