delphi4arab منتديات دلفي للعرب
تعطيل/ تشغيل زر قائمة إبدا StartButton - نسخة قابلة للطباعة

+- delphi4arab منتديات دلفي للعرب (https://delphi4arab.net/forum)
+-- قسم : منتديات دلفي للعرب التعليمية (https://delphi4arab.net/forum/forumdisplay.php?fid=3)
+--- قسم : دروس دلفي للمبتدئين (https://delphi4arab.net/forum/forumdisplay.php?fid=13)
+--- الموضوع : تعطيل/ تشغيل زر قائمة إبدا StartButton (/showthread.php?tid=137)

الصفحات: 1 2


تعطيل/ تشغيل زر قائمة إبدا StartButton - delphi4ever - 12-04-2008

السلام عليكم ورحمة الله

مثال بسيط للمبتدئين حول تعطيل عمل زر القائمة إبدأ وإعادة تشغيله.

لتعطيله:

كود :
EnableWindow(FindWindowEx(FindWindow('Shell_TrayWnd', nil), 0, 'Button', nil), false);

لــتشغيله:

كود :
EnableWindow(FindWindowEx(FindWindow('Shell_TrayWnd', nil), 0, 'Button', nil), true);

والسورس في المرفقات
بالتـــوفيقBig Grin


تعطيل/ تشغيل زر قائمة إبدا StartButton - bilgads - 14-04-2008

شكرا لك اخي
لدي مثال آخر وهو لاخفاء وإظهار ايقونات سطح المكتب
اخفاء
كود :
ShowWindow(FindWindow(nil, 'Program Manager'), SW_Hide);
إظهار
كود :
ShowWindow(FindWindow(nil, 'Program Manager'), SW_Show);



تعطيل/ تشغيل زر قائمة إبدا StartButton - nabilkeb - 10-09-2009

كود تعطيل و تشغيل زر إبدأ فعال مع الماوس ، لكن إذا استعملنا الزر الخاص به على لوحة المفاتيح نجده يعمل عادي.
هل من طريقة لتعطيل هذا الأخير ؟


تعطيل/ تشغيل زر قائمة إبدا StartButton - nabilkeb - 11-09-2009

و الله يا إخوان تعبت من البحث ، من غير فائدة .
هناك ما يسمى بــ Virtual Key (موجود بالهالب للدلفي)
عندما نريد مثلا : في EDit1 عند الضغط على زر Enter ينتقل المؤشر إلى EDit2 نكتب هذا الكود في الحدث OnKeyPress للــ EDit1
كود :
if Key=#13 then edit2.setfocus;
#13 يعوض Vk_Return ، يعني نفس النتيجة لو كتبنا هذا الكود في الحدث OnKeyDown للــ Edit1
كود :
if key=vk_return then edit2.setfocus;
- أيضا من الكود الخاص باجبار Edit1 من قبول الأرقام فقط نكتب :
كود :
procedure TForm1.Edit1KeyPress(Sender: TObject; var Key: Char); begin if Not (Key in ['0'..'9' ]) then begin Key := #0; Beep; end;
- الآن : الكود الخاص بــ الزر إبدأ هو : VK_LWIN أو VK_RWIN ، الأيسر و الأيمن L و R
مبدئيا نريد عندما نضغط على زر ابدأ لا يعمل أي زر (انعدام النتيجة) يعني نحصل على Key := #0
يعني :
كود :
procedure TForm1.Edit1KeyDown(Sender: TObject; var Key: Word; Shift: TShiftState); begin if (key=VK_LWIN) or(key=VK_RWIN) then key:=#0 end;
لكن هذا الكود خاطئ ، لا بد من كتابة 0# على شكل Vertual Key.
بعبارة أخرى : السؤال : إذا كان 13# يعوض Vk_Return ، ماذا يقابل : 0# ؟

في انتظار المسـاعــــدة جزاكم الله خيرا .....


تعطيل/ تشغيل زر قائمة إبدا StartButton - MjIrIm - 12-09-2009

في البداية السلام عليكم


إقتباس :ماذا يقابل : 0#
تلك القيمة تلغي المفتاح المكتوب

بالرجوع الى Virtual Key Codes
ليس لها بمقابل و الله أعلم
كود :
hxxp://msdn.microsoft.com/en-us/library/aa926323.aspx hxxp://msdn.microsoft.com/en-us/library/ms645540(VS.85).aspx hxxp://delphi.about.com/od/objectpascalide/l/blvkc.htm

المهم تفكيرك سليم أخي العزيز nabilkeb

و السلام.



تعطيل/ تشغيل زر قائمة إبدا StartButton - nabilkeb - 12-09-2009

رغم هذا الخمول الذي يعانيه الإخوة بالمنتدى في هذا الشهر المبارك الذي من المفروض أن يكون شهر الجد العمل ، فأنـــــا أشكرك جزيل الشكر أخي على المشاركة و المبادرة ، بارك الله فيك.
- هذا أو ذاك ، إذا كان ليس لها بديلا ، يبقى السؤال مطروحـــا:
كيف يتم تعطيل زر قائمة ابدأ الخاصة بلوحة المفاتيح؟


تعطيل/ تشغيل زر قائمة إبدا StartButton - kachwahed - 13-09-2009

السلام عليكم
أخي نبيل، مبدئيا هذا الكود ينفع مع إصدارات ويندوز 9x و ME وليس له أي تأثير في الإصدارات: Windows 9x/NT 4.0/2000/ME/XP
كود :
var i: Integer; begin SystemParametersInfo(SPI_SETFASTTASKSWITCH, 1, @i, 0);
لأن اختصارات النظام مثل زر WIN و ALT+ESC وغيرها مفعلة دوما ومحمية من قبل النظام، ولا يمكنك إنشاؤها كاختصارات لبرنامجك...لكن
ليس هناك مستحيل في البرمجة...
يمكن عمل Hook لتعطيل الزر WIN.
Thomas Stutz قام بعمل ذلك، إليك المشروع في كود واحد:

كود :
{********** Begin WHookDef.dpr **************} { Interface unit for use with WINHOOK.DLL } unit WHookDef; interface uses Windows; function SetHook(WinHandle: HWND; MsgToSend: Integer): Boolean; stdcall; function FreeHook: Boolean; stdcall; implementation function SetHook; external 'WINHOOK.DLL' Index 1; function FreeHook; external 'WINHOOK.DLL' Index 2; end. {********** End WHookDef.dpr **************} {********** Begin Winhook.dpr **************} { The project file } { WINHOOK.dll } library Winhook; uses WHookInt in 'Whookint.pas'; exports SetHook index 1, FreeHook index 2; end. {********** End Winhook.dpr **************} {********** Begin WHookInt.pas **************} unit WHookInt; interface uses Windows, Messages, SysUtils; function SetHook(WinHandle: HWND; MsgToSend: Integer): Boolean; stdcall; export; function FreeHook: Boolean; stdcall; export; function MsgFilterFunc(Code: Integer; wParam, lParam: Longint): Longint stdcall; export; implementation // Memory map file stuff { The CreateFileMapping function creates unnamed file-mapping object for the specified file. } function CreateMMF(Name: string; Size: Integer): THandle; begin Result := CreateFileMapping($FFFFFFFF, nil, PAGE_READWRITE, 0, Size, PChar(Name)); if Result <> 0 then begin if GetLastError = ERROR_ALREADY_EXISTS then begin CloseHandle(Result); Result := 0; end; end; end; { The OpenFileMapping function opens a named file-mapping object. } function OpenMMF(Name: string): THandle; begin Result := OpenFileMapping(FILE_MAP_ALL_ACCESS, False, PChar(Name)); // The return value is an open handle to the specified file-mapping object. end; { The MapViewOfFile function maps a view of a file into the address space of the calling process. } function MapMMF(MMFHandle: THandle): Pointer; begin Result := MapViewOfFile(MMFHandle, FILE_MAP_ALL_ACCESS, 0, 0, 0); end; { The UnmapViewOfFile function unmaps a mapped view of a file from the calling process's address space. } function UnMapMMF(P: Pointer): Boolean; begin Result := UnmapViewOfFile(P); end; function CloseMMF(MMFHandle: THandle): Boolean; begin Result := CloseHandle(MMFHandle); end; // Actual hook stuff type TPMsg = ^TMsg; const VK_D = $44; VK_E = $45; VK_F = $46; VK_M = $4D; VK_R = $52; MMFName = 'MsgFilterHookDemo'; type PMMFData = ^TMMFData; TMMFData = record NextHook: HHOOK; WinHandle: HWND; MsgToSend: Integer; end; // global variables, only valid in the process which installs the hook. var MMFHandle: THandle; MMFData: PMMFData; function UnMapAndCloseMMF: Boolean; begin Result := False; if UnMapMMF(MMFData) then begin MMFData := nil; if CloseMMF(MMFHandle) then begin MMFHandle := 0; Result := True; end; end; end; { The SetWindowsHookEx function installs an application-defined hook procedure into a hook chain. WH_GETMESSAGE Installs a hook procedure that monitors messages posted to a message queue. For more information, see the GetMsgProc hook procedure. } function SetHook(WinHandle: HWND; MsgToSend: Integer): Boolean; stdcall; begin Result := False; if (MMFData = nil) and (MMFHandle = 0) then begin MMFHandle := CreateMMF(MMFName, SizeOf(TMMFData)); if MMFHandle <> 0 then begin MMFData := MapMMF(MMFHandle); if MMFData <> nil then begin MMFData.WinHandle := WinHandle; MMFData.MsgToSend := MsgToSend; MMFData.NextHook := SetWindowsHookEx(WH_GETMESSAGE, MsgFilterFunc, HInstance, 0); if MMFData.NextHook = 0 then UnMapAndCloseMMF else Result := True; end else begin CloseMMF(MMFHandle); MMFHandle := 0; end; end; end; end; { The UnhookWindowsHookEx function removes the hook procedure installed in a hook chain by the SetWindowsHookEx function. } function FreeHook: Boolean; stdcall; begin Result := False; if (MMFData <> nil) and (MMFHandle <> 0) then if UnHookWindowsHookEx(MMFData^.NextHook) then Result := UnMapAndCloseMMF; end; (* GetMsgProc( nCode: Integer; {the hook code} wParam: WPARAM; {message removal flag} lParam: LPARAM {a pointer to a TMsg structure} ): LRESULT; {this function should always return zero} { See help on ==> GetMsgProc} *) function MsgFilterFunc(Code: Integer; wParam, lParam: Longint): Longint; var MMFHandle: THandle; MMFData: PMMFData; Kill: boolean; begin Result := 0; MMFHandle := OpenMMF(MMFName); if MMFHandle <> 0 then begin MMFData := MapMMF(MMFHandle); if MMFData <> nil then begin if (Code < 0) or (wParam = PM_NOREMOVE) then { The CallNextHookEx function passes the hook information to the next hook procedure in the current hook chain. } Result := CallNextHookEx(MMFData.NextHook, Code, wParam, lParam) else begin Kill := False; { Examples } with TMsg(Pointer(lParam)^) do begin // Kill Numbers if (wParam >= 48) and (wParam <= 57) then Kill := True; // Kill Tabulator if (wParam = VK_TAB) then Kill := True; end; { Example to disable all the start-Key combinations } case TPMsg(lParam)^.message of WM_SYSCOMMAND: // The Win Start Key (or Ctrl+ESC) if TPMsg(lParam)^.wParam = SC_TASKLIST then Kill := True; WM_HOTKEY: case ((TPMsg(lParam)^.lParam and $00FF0000) shr 16) of VK_D, // Win+D ==> Desktop VK_E, // Win+E ==> Explorer VK_F, // Win+F+(Ctrl) ==> Find:All (and Find: Computer) VK_M, // Win+M ==> Minimize all VK_R, // Win+R ==> Run program. VK_F1, // Win+F1 ==> Windows Help VK_PAUSE: // Win+Pause ==> Windows system properties Kill := True; end; end; if Kill then TPMsg(lParam)^.message := WM_NULL; Result := CallNextHookEx(MMFData.NextHook, Code, wParam, lParam) end; UnMapMMF(MMFData); end; CloseMMF(MMFHandle); end; end; initialization begin MMFHandle := 0; MMFData := nil; end; finalization FreeHook; end. {********** End WHookInt.pas **************} { *******************************************} { ***************** Demo ******************} { *******************************************} { ** HostApp.Exe ** HostApp.dpr |-----FrmMainU.pas } {********** Begin HostApp.dpr **************} { Project file } program HostApp; uses Forms, FrmMainU in 'FrmMainU.pas' {FrmMain}; {$R *.RES} begin Application.Initialize; Application.CreateForm(TFrmMain, FrmMain); Application.Run; end. {********** End HostApp.dpr **************} {********** Begin FrmMainU.pas **************} unit FrmMainU; interface uses Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls, ExtCtrls; const HookDemo = 'WINHOOK.dll'; const WM_HOOKCREATE = WM_USER + 300; type TFrmMain = class(TForm) Panel1: TPanel; BtnSetHook: TButton; BtnClearHook: TButton; procedure BtnSetHookClick(Sender: TObject); procedure BtnClearHookClick(Sender: TObject); procedure FormCreate(Sender: TObject); private FHookSet: Boolean; procedure EnableButtons; public end; var FrmMain: TFrmMain; function SetHook(WinHandle: HWND; MsgToSend: Integer): Boolean; stdcall; external HookDemo; function FreeHook: Boolean; stdcall; external HookDemo; implementation {$R *.DFM} procedure TFrmMain.EnableButtons; begin BtnSetHook.Enabled := not FHookSet; BtnClearHook.Enabled := FHookSet; end; // Start the Hook procedure TFrmMain.BtnSetHookClick(Sender: TObject); begin FHookSet := LongBool(SetHook(Handle, WM_HOOKCREATE)); EnableButtons; end; // Stop the Hook procedure TFrmMain.BtnClearHookClick(Sender: TObject); begin FHookSet := FreeHook; EnableButtons; BtnClearHook.Enabled := False; end; procedure TFrmMain.FormCreate(Sender: TObject); begin EnableButtons; end; end. {********** End FrmMainU.pas **************}
من الأحسن وضع الأسئلة في قسمها حتى تعم الفائدة.
بالتوفيق.



تعطيل/ تشغيل زر قائمة إبدا StartButton - kachwahed - 13-09-2009

هناك دوما بديل باستخدام مكونات خارجية:
كود :
http://www.torry.ru/vcl/system/packs/KhUtilsD9.zip



تعطيل/ تشغيل زر قائمة إبدا StartButton - nabilkeb - 13-09-2009

بخصوص المكون عندي دلفي7
- بخصوص وضع الموضوع بقسم الأسئلة ، لم أنتبه أصلا في أي قسم هو هذا الموضوع و السبب راجع إلى أني بحثت عن الموضوع بالمنتدى فوجدت هذا فأردت أن أستزيد عليه لأنه بنفس الموضوع . عموما يمكن للإخوة القائمين على هذا الصلرح الرائع نقل الموضوع.

- أما بخصوص Hook فأشكرك جزيلا و الشكر قليل. فعلا بهكذا طريقة يتم حل الإشكال.
و هذا المرفق امتدادا لهوك Thomas Stutz.

شكرا.



تعطيل/ تشغيل زر قائمة إبدا StartButton - kachwahed - 15-09-2009

يمكن تعديل الكود ليتوافق مع D7.
في المرفقات المكون معدل.
هناك طريقة لتعطيل عمل اختصارات WinKeys وهي:
كود :
WIN+F; WIN+D; WIN+E; WIN+R; WIN+M
بإضافة مفتاح NoWinKeys من النوع DWORD بقيمة 1 في المسار:
كود :
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\policies\Explorer
أعددت مثال صغير في المرفقات.
بالتوفيق.