PDA

View Full Version : عدم نمایش برنامه در Alt+Tab



Mask
شنبه 21 دی 1387, 22:41 عصر
با سلام به همه دوستان
من یه برنامه نوشتم و نمی خام در Alt+Tab نمایش داده بشه و همچنین اگر کدی برای انجام این کار هست به صورتی نباشه که دستورات منو از کار بندازه.دوستان اگه بتونند بنده رو راهنمایی کنند ممنون می شم.

vcldeveloper
یک شنبه 22 دی 1387, 02:30 صبح
برنامه ایی در لیست Alt+Tab نمایش داده میشه که پنجره ایی برای نمایش داشته باشه. اگر برنامه شما پنجره ایی داره، نمایش ندادنش معنی نداره، اگر هم پنجره ایی برای نمایش نداره، چیزی برای لیست شدن در Alt+Tab نداره.

Mask
یک شنبه 22 دی 1387, 08:28 صبح
نمایش ندادنش معنی نداره
ببخشید اینو من تعیین نمی کنم شرایط برنامه تعیین میکنه.
شما درست می فرمایید اگه برنامه فرم داشته باشه در حالت استاندارد در Alt+Tab نمایش داده میشه اما این کاری که من می خام مثل اینه که بخای برنامت در تسکبار نمایش داده نشه.
به نظر این کار هم غیر منطقیه اما به راحتی انجام میشه.

hojjatcroos
یک شنبه 22 دی 1387, 09:41 صبح
آقای دلفی 7 حرف آقای کشاورز درسته این کار عملی نیست مگه این که با dWinlock از کار بندازیش

Mask
دوشنبه 23 دی 1387, 23:53 عصر
مگه این که با dWinlock از کار بندازیش
این کامپونت کلید ها رو از کار میندازه.(فایده نداره)
حتما راهی هست.
دوستان اگه کسی میتونه منو راهنمایی کنه.

Naruto
چهارشنبه 25 دی 1387, 04:28 صبح
سلام.



procedure TForm1.FormShow(Sender: TObject);
Var
Style : Integer;
begin
Form1.BorderStyle:=bsToolWindow; {Or bsSizeToolWin}
//ShowWindow(Application.Handle, SW_HIDE) ;
Style:=GetWindowLong(Handle, GWL_EXSTYLE);
SetWindowLong(Application.Handle,GWL_EXSTYLE,
(Style or WS_EX_TOOLWINDOW)and NOT WS_EX_APPWINDOW);
end;


بقیه راه ها به غیرفعال کردن کلیدها ختم میشن.
موفق باشید.

hojjatcroos
چهارشنبه 25 دی 1387, 09:35 صبح
سلام دوست عزیز با تشکر از پاسخ شما حالا اگه میشه یکی از دوستان این سه خط اصلی رو برام توضیح بده-با تشکر
Style:=GetWindowLong(Handle, GWL_EXSTYLE);
SetWindowLong(Application.Handle,GWL_EXSTYLE,
(Style or WS_EX_TOOLWINDOW)and NOT WS_EX_APPWINDOW);

Mask
چهارشنبه 25 دی 1387, 10:25 صبح
سلام.



procedure TForm1.FormShow(Sender: TObject);
Var
Style : Integer;
begin
Form1.BorderStyle:=bsToolWindow; {Or bsSizeToolWin}
//ShowWindow(Application.Handle, SW_HIDE) ;
Style:=GetWindowLong(Handle, GWL_EXSTYLE);
SetWindowLong(Application.Handle,GWL_EXSTYLE,
(Style or WS_EX_TOOLWINDOW)and NOT WS_EX_APPWINDOW);
end;


بقیه راه ها به غیرفعال کردن کلیدها ختم میشن.
موفق باشید.

آقای کشاورز کار نشد نداره

vcldeveloper
چهارشنبه 25 دی 1387, 11:26 صبح
آقای کشاورز کار نشد نداره
شما ظاهرا پست ها را با دقت نمی خوانید:

برنامه ایی در لیست Alt+Tab نمایش داده میشه که پنجره ایی برای نمایش داشته باشه. اگر هم پنجره ایی برای نمایش نداره، چیزی برای لیست شدن در Alt+Tab نداره.

حالا...


Form1.BorderStyle:=bsToolWindow; {Or bsSizeToolWin}
//ShowWindow(Application.Handle, SW_HIDE) ;
Style:=GetWindowLong(Handle, GWL_EXSTYLE);
SetWindowLong(Application.Handle,GWL_EXSTYLE,
(Style or WS_EX_TOOLWINDOW)and NOT WS_EX_APPWINDOW);

اون توابعی که قرمز شدن برای کار با چه موجودیتی هستند؟ پنجره ها.
اون Form1 که قرمز شده چی هست؟ یک پنجره هست.

شب عالی بخیر

Naruto
چهارشنبه 25 دی 1387, 12:30 عصر
سلام.

GWL_EXSTYLE یا window's extended style اطلاعاتی در مورد حالت پنجره بهمون میده.
اطلاعات پنجره ما که تو متغیر Style قرار گرفت به کمک تابع SetWindowLong قابل تغییره.
موقعی که برنامه اجرا شد Taskbar میاد GWL_EXSTYLE را چک میکنه.
اگر GWL_EXSTYLE در حالت WS_EX_APPWINDOW باشه یه Button از برنامه تو Taskbar نشان داده میشه. اگر هم در حالت WS_EX_TOOLWINDOW باشه Button نمایش داده نمیشه.
علاوه بر این WS_EX_TOOLWINDOW برای پنهان کردن پنجره از تو لیست Alt-Tab هم به کار میره.
دریک زمان نمیتونیم هر دو حالت WS_EX_TOOLWINDOW و WS_EX_APPWINDOW را با هم داشته باشیم.

BorderStyle فرم ما باید درحالت bsToolWindow باشه.
اما کد بالا این کار رو درمورد Application انجام میده.چرا که Application هم خودش فرم داره و همواره Transparent هست و ما اونو نمی بینیم.
موفق باشید.

hojjatcroos
چهارشنبه 25 دی 1387, 13:56 عصر
من توضیحات شما رو خوندم کامل و جامع بود با تشکر در این مثال من فقط یک خط زیر رو نوشتم و باز هم جواب داد پس توابع دیگه که معرفی کردین اضافه اند یا نه؟
SetWindowLong(Application.Handle,GWL_EXSTYLE,WS_EX _TOOLWINDOW);

Naruto
پنج شنبه 26 دی 1387, 09:47 صبح
مخفی کردن برنامه از Taskbar تو نسخه های مختلفی دلفی متفاوته.
روشی رو که من براتون گذاشتم یه روش استاندارد بود.
اگر بخواهیم به همون یک خطی که شما نوشتید اکتفا کنیم درظاهر مشکلی پیدا نمیشه.
اما من یک ایراد توش پیدا کردم که میتونید تستش کنید.
بعد از اینکه از SetWindowLong استفاده کردید سعی کنید آیکن فرم را از Taskbar حذف کنید.

hojjatcroos
پنج شنبه 26 دی 1387, 10:34 صبح
با تشکر از شما دوست عزیز-حرف شما درست است اما می تونیم این کار رو قبل از SetWindowLong انجام بدهیم.
ShowWindow(Application.Handle,SW_HIDE);
SetWindowLong(Application.Handle,GWL_EXSTYLE,WS_EX _TOOLWINDOW);

Naruto
پنج شنبه 26 دی 1387, 11:14 صبح
با تشکر.
درسته ولی بازم یه تابع اضافی داریم.