![]() |
|
تعطيل/ تشغيل زر قائمة إبدا 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);والسورس في المرفقات بالتـــوفيق
تعطيل/ تشغيل زر قائمة إبدا 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;كود : if key=vk_return then edit2.setfocus;كود : procedure TForm1.Edit1KeyPress(Sender: TObject; var Key: Char);
begin
if Not (Key in ['0'..'9' ]) then begin
Key := #0; Beep;
end;مبدئيا نريد عندما نضغط على زر ابدأ لا يعمل أي زر (انعدام النتيجة) يعني نحصل على 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;بعبارة أخرى : السؤال : إذا كان 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);ليس هناك مستحيل في البرمجة... يمكن عمل 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كود : HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\policies\Explorerبالتوفيق. |