PDA

View Full Version : کلید ویندوز



فرزاد دلفی باز
سه شنبه 24 آذر 1383, 01:37 صبح
با سلام :
چطوری میشه کلید ویندوز موجود در صفحه کلید رو از کار انداخت یا بهتره سوالم رو اینطور مطرح کنم که چطور میشه یک عمل خاص (غیر از باز کردن دکمه stsrt )رو به این کلید انتصاب داد.
متشکرم.....

Delphi KDE
سه شنبه 24 آذر 1383, 03:23 صبح
برای از کار انداختنش فکر کنم قبلا در رجیستری کلیدی برای این کار دیدم
ولی برای تغییر کاربری شرمنده :oops:

arshia_
سه شنبه 24 آذر 1383, 08:17 صبح
کسی می دونه کد کلید ویندوز چند است...یا حداقل کد اون در ترکیب با کلیدهای دیگه چه عددی رو ایجاد می کنه
برای مثال کلید enter=13, esc=27 ,....
حالا WINKEY+F=?
اگر کد اونو پیدا کنیم شاید بتونیم کمی مانور بدیم

فرزاد دلفی باز
چهارشنبه 25 آذر 1383, 00:35 صبح
خوب بیشتر مسله اصلی پیدا کردن کد کلید ویندوزه ؟؟؟؟؟؟

Delphi KDE
چهارشنبه 25 آذر 1383, 02:37 صبح
فکر کنم بشه از بافر صفحه کلید کدش را بدست اورد

robochoo
شنبه 28 آذر 1383, 14:42 عصر
فکر کنمEnter دو بایت است : 13و10

فرزاد دلفی باز
دوشنبه 07 دی 1383, 17:46 عصر
متشکر میشم اگر کسی راهنمایی کنه

Delphi KDE
سه شنبه 08 دی 1383, 02:03 صبح
هر کلید که از روی صفحه کلید فشرده میشود در بافر صفحه کلید دو کد تولید میکند مقدار بافر صفحه کلید 32 بایت است که در بافر هر کارکتر یک کد اسکی و یک کد اسکن دارد که جمعا 16 کارکتر درون بافر صفحه کلید قرار میگیرند البته با دو اشاره گر به ابتدا و انتهای بافر که ادرس های اونا را در زیر میبینید و توسط وقفه شماره 9 هگز این مقدار پردازش میشود
من در زمان فشردن کلید ویندوز محتوای بافر صفحه کلید رابرسی کردم و متوجه شدم هیج کدی برای کلید ویندوز در بافر صفحه کلید تولید نمیشود واقعا عجیب است این Windows چطوری با کلید برخورد میکنه
برای من هم قضیه جالب شده

first=0x40,0x1a
end=0x40,0x1c

سار
سه شنبه 08 دی 1383, 22:44 عصر
چ جالب این گفته من رو بفکر برد.
حتی بعضی از بازیها مثل IGI هم نتونستن این کار رو بکنن و از کار بندازنش. این رو من دیشب تست کردم :گیج:
یعنی نمیشه؟

Delphi KDE
سه شنبه 15 دی 1383, 02:40 صبح
بحث جالبی است حیف است بدون نتیجه باقی بمونه
از دوستان کسی نمیدونه چطور یک کلید بدون تولید کد در بافر صفحه کلید میتونی منجر به عملیاتی بشته

arshia_
سه شنبه 15 دی 1383, 08:07 صبح
آیا تنها کلیدی که هیچ کدی تولید نمی کنه همین کلید ویندوز است؟ اگر اینطور باشه که این خاصیت منحصر بفرداست و شاید بتونیم از این طریق کدی بدست بیاریم
راستی آیا ترکیب این کلید با سایر کلید ها هم بدون تولید کد است؟

فرزاد دلفی باز
سه شنبه 15 دی 1383, 14:39 عصر
فکر کنم مسئله داره جدی میشه !!!!!

سار
سه شنبه 15 دی 1383, 15:33 عصر
تا اونجایی که یادمه تو داس دونوع کد کلید داشتیم:
1)اسکی
2)اسکن کد
مثلا کلید Alt کد اسکی نداشت و نمیشد با دستوراتی مثل ReadKey خوندش و باید از دستور Port[$60] استفاده میشد. ولی انکار کد جدیدی هم هست که برای کلید ویندوزه.
جالب اینکه همون Port هم برای این کلید کدی بر نمیگردونه!!!!!!!!!
جریان چیه؟ :گیج:

Developer Programmer
سه شنبه 15 دی 1383, 19:15 عصر
MSDN نوشته بود که hook کردن کلید ویندوز مقدور نمی باشد

MM_Mofidi
سه شنبه 15 دی 1383, 19:44 عصر
در vb با استفاده از این روش 91 را بر میگرداند.
قطعا Asciiنیست چون 91=[ ولی فشردن[-->219

Private Sub Form_KeyDown(KeyCode As Integer, Shift As Integer)
MsgBox KeyCode
End Sub

سار
سه شنبه 15 دی 1383, 20:39 عصر
MSDN نوشته بود که hook کردن کلید ویندوز مقدور نمی باشد
اگر اون میگه لابد درسته ولی بازی درست و حسابی کم نیست که با این کلید از بازی خارج نشه یعنی اونها به ویندوز رودست زدن!!!

سار
سه شنبه 15 دی 1383, 20:42 عصر
در vb با استفاده از این روش 91 را بر میگرداند.
قطعا Asciiنیست چون 91=[ ولی فشردن[-->219

Private Sub Form_KeyDown(KeyCode As Integer, Shift As Integer)
MsgBox KeyCode
End Sub

آیا میتوانستید کنترلش هم کنید؟!

MM_Mofidi
چهارشنبه 16 دی 1383, 10:55 صبح
بله تا وقتی فرم دارای فوکوس باشد

Private Sub Form_KeyDown(KeyCode As Integer, Shift As Integer)
If KeyCode = 91 Then SendKeys "{ESC}"
End Sub
:موفق:

Inprise
چهارشنبه 16 دی 1383, 11:23 صبح
الف- لطفا" اینقدر مطالب بی ربط ننویسید .
ب- اینجا بخش ویژوال بیسیک نیست .
ج-


MSDN نوشته بود که hook کردن کلید ویندوز مقدور نمی باشد

خیر .

د-


چطوری میشه کلید ویندوز موجود در صفحه کلید رو از کار انداخت یا بهتره سوالم رو اینطور مطرح کنم که چطور میشه یک عمل خاص (غیر از باز کردن دکمه stsrt )رو به این کلید انتصاب داد.

باید یک Low Level Hook (http://msdn.microsoft.com/library/default.asp?url=/library/en-us/winui/winui/windowsuserinterface/windowing/hooks/hookreference/hookfunctions/lowlevelkeyboardproc.asp) بنویسی که ورودی کیبورد رو قبل از ارسال به ریسمان یا پروسهء مالک ، بررسی/تغییر کنه/بده .



unit Hooks;

interface

type
TLockableKey = (lkAltTab, lkAltEsc, lkCtrlEsc, lkAltF4, lkWin, lkApps);

procedure SetHook;
procedure ReleaseHook;

procedure LockKey(Key: TLockableKey; Lock: Boolean);

implementation

uses
Windows;

const
WH_KEYBOARD_LL = 13;
LLKHF_ALTDOWN = $20;
LLKHF_CTRLDOWN = $8000;

type
PKbdHookInfo = ^TKbdHookInfo;
TKbdHookInfo = record
VkCode: DWORD;
ScanCode: DWORD;
Flags: DWORD;
Time: DWORD;
ExtraInfo: DWORD;
end;

var
Hook: HHook;
Keys: set of TLockableKey;

function KbdHook(Code: Integer; WParam, LParam: DWORD): HHook; stdcall;
var
VkCode: DWORD;
AltDown: Boolean;
CtrlDown: Boolean;

begin
if Code = HC_ACTION then
begin
VkCode := PKbdHookInfo(LParam).VkCode;
AltDown := PKbdHookInfo(LParam).Flags and LLKHF_ALTDOWN <> 0;
CtrlDown := GetAsyncKeyState(VK_CONTROL) and LLKHF_CTRLDOWN <> 0;

if (VkCode = VK_TAB) and AltDown and (lkAltTab in Keys) then
begin
Result := 1;
exit;
end;

if (VkCode = VK_ESCAPE) then
begin
if AltDown and (lkAltEsc in Keys) then
begin
Result := 1;
exit;
end;

if CtrlDown and (lkCtrlEsc in Keys) then
begin
Result := 1;
exit;
end;
end;

if (VkCode = VK_F4) and AltDown and (lkAltF4 in Keys) then
begin
Result := 1;
exit;
end;

if ((VkCode = VK_LWIN) or (VkCode = VK_RWIN)) and (lkWin in Keys) then
begin
Result := 1;
exit;
end;

if (VkCode = VK_APPS) and (lkApps in Keys) then
begin
Result := 1;
exit;
end;
end;

Result := CallNextHookEx(Hook, Code, WParam, LParam);
end;

procedure SetHook;
begin
Hook := SetWindowsHookEx(WH_KEYBOARD_LL, @KbdHook, HInstance, 0);
end;

procedure ReleaseHook;
begin
if Hook <> 0 then UnhookWindowsHookEx(Hook);
end;

procedure LockKey(Key: TLockableKey; Lock: Boolean);
begin
if Lock then Include(Keys, Key) else Exclude(Keys, Key);
end;

initialization
Hook := 0;
Keys := [];

finalization
ReleaseHook;
end.


- مثال :


LockKey(lkAltEsc, true);

LockKey(lkAltEsc, false);


- برای کسانی که میخوان بیشتر بدونن : برای User Level ، این وظیفه با سه روش قابل انجامه .

SetWindowsHookEx
GetKeyBoardState
GetKeyState

شاید باشند کسانی که دوست داشته باشن با مانیتورینگ سه API فوق ، تروجانهای UserLand رو ببینن .

:)

B-Vedadian
چهارشنبه 16 دی 1383, 12:37 عصر
- برای کسانی که میخوان بیشتر بدونن : برای User Level ، این وظیفه با سه روش قابل انجامه .


SetWindowsHookEx
GetKeyBoardState
GetKeyState


شاید باشند کسانی که دوست داشته باشن با مانیتورینگ سه API فوق ، تروجانهای UserLand رو ببینن .

آقا میشه این بخش رو یکم بیشتر توضیح بدین. چطوری میشه فعالیتهای یک تابع API رو مانیتور کرد؟

Inprise
چهارشنبه 16 دی 1383, 14:32 عصر
چطوری میشه فعالیتهای یک تابع API رو مانیتور کرد؟

- احتمالا" <همین> (http://www.codeproject.com/system/api_monitoring_unleashed.asp) برات کافیه .

MM_Mofidi
چهارشنبه 16 دی 1383, 17:13 عصر
Inprise جان چرا میزنی دیدم جوابی ندادن دوستان در حد سوادم نوشتم که بگم نشدنی نیست.همین

فرزاد دلفی باز
سه شنبه 06 بهمن 1383, 14:17 عصر
از همه دوستان متشکرم بخصوص از شما Inprise !!!!!!