3.2. ΠΠ»Π°Π²ΠΈΠ°ΡΡΡΠ°
ΠΠ»Π°Π²ΠΈΠ°ΡΡΡΠ° ΡΠ²Π»ΡΠ΅ΡΡΡ ΠΎΡΠ½ΠΎΠ²Π½ΡΠΌ ΡΡΠ΅Π΄ΡΡΠ²ΠΎΠΌ Π΄Π»Ρ Π²Π²ΠΎΠ΄Π° ΠΈΠ½ΡΠΎΡΠΌΠ°ΡΠΈΠΈ Π² ΠΊΠΎΠΌΠΏΡΡΡΠ΅Ρ, ΠΏΠΎΡΡΠΎΠΌΡ Π½Π΅ Π±ΡΠ΄Π΅ΠΌ ΠΎΠ±Ρ ΠΎΠ΄ΠΈΡΡ ΡΡΠΎΡΠΎΠ½ΠΎΠΉ ΠΈ ΡΠ°ΡΡΠΌΠΎΡΡΠΈΠΌ Π½Π΅ΠΊΠΎΡΠΎΡΡΠ΅ Π½Π΅ ΡΠ°ΠΊ ΡΠ°ΡΡΠΎ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΠΌΡΠ΅ ΠΈΠ»ΠΈ Π½Π΅ ΡΠ°ΠΊΠΈΠ΅ ΠΎΡΠ΅Π²ΠΈΠ΄Π½ΡΠ΅ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡΠΈ ΡΠ°Π±ΠΎΡΡ Ρ Π½Π΅ΠΉ.
ΠΠΏΡΠ΅Π΄Π΅Π»Π΅Π½ΠΈΠ΅ ΠΈΠ½ΡΠΎΡΠΌΠ°ΡΠΈΠΈ ΠΎ ΠΊΠ»Π°Π²ΠΈΠ°ΡΡΡΠ΅
ΠΠ°ΡΠ½Π΅ΠΌ Ρ Π½Π΅Π±ΠΎΠ»ΡΡΠΎΠ³ΠΎ ΠΏΡΠΈΠΌΠ΅ΡΠ°, ΠΏΠΎΠ·Π²ΠΎΠ»ΡΡΡΠ΅Π³ΠΎ ΠΎΠΏΡΠ΅Π΄Π΅Π»ΠΈΡΡ Π½Π΅ΠΊΠΎΡΠΎΡΡΡ ΠΈΠ½ΡΠΎΡΠΌΠ°ΡΠΈΡ ΠΎ ΠΊΠ»Π°Π²ΠΈΠ°ΡΡΡΠ΅ (Π»ΠΈΡΡΠΈΠ½Π³ 3.16). ΠΡΠΈΠΌΠ΅Ρ ΠΎΡΠ½ΠΎΠ²Π°Π½ Π½Π° ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΠΈ API-ΡΡΠ½ΠΊΡΠΈΠΈ GetKeyboardType.
...ΠΠΈΡΡΠΈΠ½Π³ 3.16.
ΠΠΏΡΠ΅Π΄Π΅Π»Π΅Π½ΠΈΠ΅ ΠΈΠ½ΡΠΎΡΠΌΠ°ΡΠΈΠΈ ΠΎ ΠΊΠ»Π°Π²ΠΈΠ°ΡΡΡΠ΅
procedure TForm1.FormCreate(Sender: TObject);
begin
//ΠΠΏΡΠ΅Π΄Π΅Π»ΡΠ΅ΠΌ ΡΠΈΠΏ ΠΊΠ»Π°Π²ΠΈΠ°ΡΡΡΡ
case GetKeyboardType(0) of
1: txtType.Text := \'PC/XT ΠΈΠ»ΠΈ ΡΠΎΠ²ΠΌΠ΅ΡΡΠΈΠΌΠ°Ρ (83 ΠΊΠ»Π°Π²ΠΈΡΠΈ)\
2: txtType.Text := \'Olivetti Β«ICOΒ» (102 ΠΊΠ»Π°Π²ΠΈΡΠΈ)\
3: txtType.Text := \'PC/AT (84 ΠΊΠ»Π°Π²ΠΈΡΠΈ) ΠΈΠ»ΠΈ ΠΏΠΎΡ ΠΎΠΆΠ°Ρ\
4: txtType.Text := \'Π Π°ΡΡΠΈΡΠ΅Π½Π½Π°Ρ (101 ΠΈΠ»ΠΈ 102 ΠΊΠ»Π°Π²ΠΈΡΠΈ)\
5: txtType.Text := \'Nokia 1050 ΠΈΠ»ΠΈ ΠΏΠΎΡ ΠΎΠΆΠ°Ρ\
6: txtType.Text := \'Nokia 9140 ΠΈΠ»ΠΈ ΠΏΠΎΡ ΠΎΠΆΠ°Ρ\
7: txtType.Text := \'ΡΠΏΠΎΠ½ΡΠΊΠ°Ρ\
end;
//ΠΠΏΡΠ΅Π΄Π΅Π»ΡΠ΅ΠΌ ΠΊΠΎΠ΄ ΡΠΈΠΏΠ° ΠΏΡΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡΠ΅Π»Ρ
txtSubtype.Text := IntToStr(GetKeyboardType(1));
//ΠΠΏΡΠ΅Π΄Π΅Π»ΡΠ΅ΠΌ ΠΊΠΎΠ»ΠΈΡΠ΅ΡΡΠ²ΠΎ ΡΡΠ½ΠΊΡΠΈΠΎΠ½Π°Π»ΡΠ½ΡΡ ΠΊΠ»Π°Π²ΠΈΡ
txtKeys.Text := IntToStr(GetKeyboardType(2));
end;
ΠΡΠΈ ΡΠΎΠ·Π΄Π°Π½ΠΈΠΈ ΡΠΎΡΠΌΡ ΠΏΡΠΎΠΈΡΡ ΠΎΠ΄ΠΈΡ Π·Π°ΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ ΡΠ΅ΠΊΡΡΠΎΠ²ΡΡ ΠΏΠΎΠ»Π΅ΠΉ ΠΈΠ½ΡΠΎΡΠΌΠ°ΡΠΈΠ΅ΠΉ ΠΎ ΡΠΈΠΏΠ΅ ΠΊΠ»Π°Π²ΠΈΠ°ΡΡΡΡ, ΠΊΠΎΠ΄Π΅ ΡΠΈΠΏΠ°, ΠΏΡΠΈΡΠ²ΠΎΠ΅Π½Π½ΠΎΠΌ ΠΏΡΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡΠ΅Π»Π΅ΠΌ, ΠΈ ΠΊΠΎΠ»ΠΈΡΠ΅ΡΡΠ²Π΅ ΡΡΠ½ΠΊΡΠΈΠΎΠ½Π°Π»ΡΠ½ΡΡ ΠΊΠ»Π°Π²ΠΈΡ.
ΠΡΠΈΠΌΠ΅Ρ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΠ³ΠΎ ΡΠ΅Π·ΡΠ»ΡΡΠ°ΡΠ° ΠΎΠΏΡΠ΅Π΄Π΅Π»Π΅Π½ΠΈΡ ΠΈΠ½ΡΠΎΡΠΌΠ°ΡΠΈΠΈ ΠΎ ΠΊΠ»Π°Π²ΠΈΠ°ΡΡΡΠ΅ ΠΏΡΠΈΠ²ΠΎΠ΄ΠΈΡΡΡ Π½Π° ΡΠΈΡ. 3.2.
Π ΠΈΡ. 3.2. ΠΠ½ΡΠΎΡΠΌΠ°ΡΠΈΡ ΠΎ ΠΊΠ»Π°Π²ΠΈΠ°ΡΡΡΠ΅
ΠΠΏΡΠΎΡ ΠΊΠ»Π°Π²ΠΈΠ°ΡΡΡΡ
Π‘ΡΡΠ΅ΡΡΠ²ΡΠ΅Ρ Π΄ΠΎΡΡΠ°ΡΠΎΡΠ½ΠΎ ΡΠ΄ΠΎΠ±Π½Π°Ρ Π°Π»ΡΡΠ΅ΡΠ½Π°ΡΠΈΠ²Π° ΠΎΠ±ΡΠ°Π±ΠΎΡΠΊΠ΅ ΡΠΎΠ±ΡΡΠΈΠΉ ΠΊΠ»Π°Π²ΠΈΠ°ΡΡΡΠ½ΠΎΠ³ΠΎ Π²Π²ΠΎΠ΄Π°, ΠΊΠΎΡΠΎΡΠ°Ρ ΠΌΠΎΠΆΠ΅Ρ ΠΎΠΊΠ°Π·Π°ΡΡΡΡ ΠΎΡΠΎΠ±Π΅Π½Π½ΠΎ ΠΏΠΎΠ»Π΅Π·Π½ΠΎΠΉ, ΠΊΠΎΠ³Π΄Π° Π½ΡΠΆΠ½ΠΎ Π·Π½Π°ΡΡ ΡΠΎΡΡΠΎΡΠ½ΠΈΠ΅ ΡΡΠ°Π·Ρ Π½Π΅ΡΠΊΠΎΠ»ΡΠΊΠΈΡ ΠΊΠ»Π°Π²ΠΈΡ.
Π Π»ΠΈΡΡΠΈΠ½Π³Π΅ 3.17 ΠΏΡΠΈΠ²ΠΎΠ΄ΠΈΡΡΡ ΠΏΡΠΈΠΌΠ΅Ρ ΠΎΠ±ΡΠ°Π±ΠΎΡΡΠΈΠΊΠ° ΡΠΎΠ±ΡΡΠΈΡ TimerlTimer, ΠΎΠΏΡΠ΅Π΄Π΅Π»ΡΡΡΠ΅Π³ΠΎ, Π½Π°ΠΆΠ°ΡΡ Π»ΠΈ ΠΊΠ»Π°Π²ΠΈΡΠΈ β, β, β, β, Π° ΡΠ°ΠΊΠΆΠ΅ ΠΏΡΠΎΠ±Π΅Π», Enter, Ctrl (ΠΏΡΠ°Π²ΡΠΉ) ΠΈ Alt (ΠΏΡΠ°Π²ΡΠΉ).
...ΠΠΈΡΡΠΈΠ½Π³ 3.17.
ΠΠΏΡΠ΅Π΄Π΅Π»Π΅Π½ΠΈΠ΅ ΡΠΎΡΡΠΎΡΠ½ΠΈΡ Π½Π΅ΠΊΠΎΡΠΎΡΡΡ ΠΊΠ»Π°Π²ΠΈΡ
procedure TForm1.Timer1Timer(Sender: TObject);
var
buttons: TKeyBoardstate;
begin
//ΠΠΎΠ»ΡΡΠ°Π΅ΠΌ ΡΠΎΡΡΠΎΡΠ½ΠΈΡ ΠΊΠ»Π°Π²ΠΈΡ
GetKeyboardState(buttons);
//ΠΡΠΎΠ±ΡΠ°Π·ΠΈΠΌ ΡΠΎΡΡΠΎΡΠ½ΠΈΡ ΠΊΠ»Π°Π²ΠΈΡ
//..ΠΏΡΠΎΠ±Π΅Π»
if buttons[VK_SPACE] and 128 <> 0 then
SendMessage(cmbSpace.Handle, BM_SETSTATE, BST_CHECKED, 0)
else
SendMessage(cmbSpace.Handle, BM_SETSTATE, BST_UNCHECKED, 0);
//..enter
if buttons[VK_RETURN] and 128 <> 0 then
SendMessage(cmbEnter.Handle, BM_SETSTATE, BST_CHECKED, 0)
else
SendMessage(cmbEnter.Handle, BM_SETSTATE, BST_UNCHECKED, 0);
//..ΠΏΡΠ°Π²ΡΠΉ Ctrl
if buttons[VK_RCONTROL] and 128 <> 0 then
SendMessage(cmbRCtrl.Handle, BM_SETSTATE, BST_CHECKED, 0)
else
SendMessage(cmbRCtrl.Handle, BM_SETSTATE, BST_UNCHECKED, 0);
//..ΠΏΡΠ°Π²ΡΠΉ Alt
if buttons[VK_RMENU] and 128 <> 0 then
SendMessage(cmbRAlt.Handle, BM_SETSTATE, BST_CHECKED, 0)
else
SendMessage(cmbRAlt.Handle, BM_SETSTATE, BST_UNCHECKED, 0);
//..ΠΏΡΠ°Π²ΡΠΉ Shift
if buttons[VK_RSHIFT] and 128 <> 0 then
SendMessage(cmbRShift.Handle, BM_SETSTATE, BST_CHECKED, 0)
else
SendMessage(cmbRShift.Handle, BM_SETSTATE, BST_UNCHECKED, 0);
//..Π²Π²Π΅ΡΡ
if buttons[VK_UP] and 128 <> 0 then
SendMessage(cmbUp.Handle, BM_SETSTATE, BST_CHECKED, 0)
else
SendMessage(cmbUp.Handle, BM_SETSTATE, BST_UNCHECKED, 0);
//..Π²Π½ΠΈΠ·
if buttons[VK_Down] and 128 <> 0 then
SendMessage(cmbDown.Handle, BM_SETSTATE, BST_CHECKED, 0)
else
SendMessage(cmbDown.Handle, BM_SETSTATE, BST_UNCHECKED, 0);
//..Π²Π»Π΅Π²ΠΎ
if buttons[VK_LEFT] and 128 <> 0 then
SendMessage(cmbLeft.Handle, BM_SETSTATE, BST_CHECKED, 0)
else
SendMessage(cmbLeft.Handle, BM_SETSTATE, BST_UNCHECKED, 0);
//..Π²ΠΏΡΠ°Π²ΠΎ
if buttons[VK_RIGHT] and 128 <> 0 then
SendMessage(cmbRight.Handle, BM_SETSTATE, BST_CHECKED, 0)
else
SendMessage(cmbRight.Handle, BM_SETSTATE, BST_UNCHECKED, 0);
end;
ΠΠ»Ρ ΡΠΎΠ³ΠΎ ΡΡΠΎΠ±Ρ ΠΎΠΏΡΠ΅Π΄Π΅Π»ΠΈΡΡ ΡΠΎΡΡΠΎΡΠ½ΠΈΠ΅ ΠΊΠ»Π°Π²ΠΈΡ, ΠΌΠΎΠΆΠ½ΠΎ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ API-ΡΡΠ½ΠΊΡΠΈΡ GetKeyboardState, ΠΊΠΎΡΠΎΡΠ°Ρ Π·Π°ΠΏΠΎΠ»Π½ΡΠ΅Ρ ΠΌΠ°ΡΡΠΈΠ² buttons (Π½Π° ΡΠ°ΠΌΠΎΠΌ Π΄Π΅Π»Π΅ ΡΠΈΠΏ TKeyBoardstate ΠΎΠΏΡΠ΅Π΄Π΅Π»Π΅Π½ ΠΊΠ°ΠΊ array [0. 255] of Byte) Π·Π½Π°ΡΠ΅Π½ΠΈΡΠΌΠΈ, Ρ Π°ΡΠ°ΠΊΡΠ΅ΡΠΈΠ·ΡΡΡΠΈΠΌΠΈ, Π½Π°ΠΆΠ°ΡΠ° Π»ΠΈ ΠΊΠ»Π°Π²ΠΈΡΠ°. ΠΡΠΈΡΠ΅ΠΌ Π·Π½Π°ΡΠ΅Π½ΠΈΡ Π² ΠΌΠ°ΡΡΠΈΠ²Π΅ buttons ΡΡΠ°ΠΊΡΡΡΡΡΡ ΡΠ»Π΅Π΄ΡΡΡΠΈΠΌ ΠΎΠ±ΡΠ°Π·ΠΎΠΌ:
β’ Π΅ΡΠ»ΠΈ ΡΡΡΠ°Π½ΠΎΠ²Π»Π΅Π½ ΡΡΠ°ΡΡΠΈΠΉ Π±ΠΈΡ (ΠΏΡΠΎΠ²Π΅ΡΠΊΠ° ΡΠ΅Π³ΠΎ ΠΈ Π΄Π΅Π»Π°Π΅ΡΡΡ Π² Π»ΠΈΡΡΠΈΠ½Π³Π΅ 3.17), ΡΠΎ ΠΊΠ»Π°Π²ΠΈΡΠ° Π² Π΄Π°Π½Π½ΡΠΉ ΠΌΠΎΠΌΠ΅Π½Ρ Π½Π°ΠΆΠ°ΡΠ°;
β’ Π΅ΡΠ»ΠΈ ΡΡΡΠ°Π½ΠΎΠ²Π»Π΅Π½ ΠΌΠ»Π°Π΄ΡΠΈΠΉ Π±ΠΈΡ, ΡΠΎ ΡΡΠ½ΠΊΡΠΈΡ, Π·Π°ΠΊΡΠ΅ΠΏΠ»Π΅Π½Π½Π°Ρ Π·Π° ΡΡΠΎΠΉ ΠΊΠ»Π°Π²ΠΈΡΠ΅ΠΉ (Π½Π°ΠΏΡΠΈΠΌΠ΅Ρ, Caps Lock), Π²ΠΊΠ»ΡΡΠ΅Π½Π°.
ΠΠ»Ρ ΠΈΠ½Π΄Π΅ΠΊΡΠ°ΡΠΈΠΈ ΠΌΠ°ΡΡΠΈΠ²Π° ΠΌΠΎΠΆΠ½ΠΎ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ ASCII-ΠΊΠΎΠ΄Ρ ΡΠΈΠΌΠ²ΠΎΠ»ΠΎΠ², Π° ΡΠ°ΠΊΠΆΠ΅ ΠΊΠΎΠ½ΡΡΠ°Π½ΡΡ, ΡΠΎΠΎΡΠ²Π΅ΡΡΡΠ²ΡΡΡΠΈΠ΅ Π½Π΅ΡΠΈΠΌΠ²ΠΎΠ»ΡΠ½ΡΠΌ ΠΊΠ»Π°Π²ΠΈΡΠ°ΠΌ (ΠΎΠ±ΠΎΠ·Π½Π°ΡΠ΅Π½ΠΈΡ ΠΈ ΠΊΠΎΠ΄Ρ Π΄Π»Ρ ΡΠ°ΠΊΠΈΡ ΠΊΠ»Π°Π²ΠΈΡ ΠΏΡΠΈΠ²ΠΎΠ΄ΡΡΡΡ Π² ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΈ 1).
ΠΠ°ΠΆΠ΄ΠΎΠΉ ΠΊΠΎΠ½ΡΡΠΎΠ»ΠΈΡΡΠ΅ΠΌΠΎΠΉ ΠΊΠ»Π°Π²ΠΈΡΠ΅ (Π»ΠΈΡΡΠΈΠ½Π³ 3.17) ΡΠΎΠΎΡΠ²Π΅ΡΡΡΠ²ΡΠ΅Ρ ΠΊΠ½ΠΎΠΏΠΊΠ° Π½Π° ΡΠΎΡΠΌΠ΅. ΠΠ»Ρ ΠΏΡΠΈΠ½ΡΠ΄ΠΈΡΠ΅Π»ΡΠ½ΠΎΠΉ ΡΡΡΠ°Π½ΠΎΠ²ΠΊΠΈ ΠΊΠ½ΠΎΠΏΠΊΠΈ Π² Π½Π°ΠΆΠ°ΡΠΎΠ΅ ΠΈΠ»ΠΈ Π½Π΅Π½Π°ΠΆΠ°ΡΠΎΠ΅ ΡΠΎΡΡΠΎΡΠ½ΠΈΠ΅ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΡΡΡ ΠΏΠΎΡΡΠ»ΠΊΠ° ΡΠΎΠΎΠ±ΡΠ΅Π½ΠΈΡ BMSETSTATE. ΠΡΠΈΠΌΠ΅Ρ ΠΎΠΏΡΠ΅Π΄Π΅Π»Π΅Π½ΠΈΡ ΡΠΎΡΡΠΎΡΠ½ΠΈΡ ΠΊΠ»Π°Π²ΠΈΡ Π² Π½Π΅ΠΊΠΎΡΠΎΡΡΠΉ ΠΌΠΎΠΌΠ΅Π½Ρ Π²ΡΠ΅ΠΌΠ΅Π½ΠΈ ΠΏΠΎΠΊΠ°Π·Π°Π½ Π½Π° ΡΠΈΡ. 3.3.
Π ΠΈΡ. 3.3. Π‘ΠΎΡΡΠΎΡΠ½ΠΈΠ΅ Π½Π΅ΠΊΠΎΡΠΎΡΡΡ ΠΊΠ»Π°Π²ΠΈΡ ΠΊΠ»Π°Π²ΠΈΠ°ΡΡΡΡ
ΠΠ½ΡΠ΅ΡΠ΅ΡΠ½ΠΎ, ΡΡΠΎ ΡΠ°ΡΡΠΌΠΎΡΡΠ΅Π½Π½ΡΠΉ ΡΠΏΠΎΡΠΎΠ± ΡΠ°Π±ΠΎΡΡ Ρ ΠΊΠ»Π°Π²ΠΈΠ°ΡΡΡΠΎΠΉ ΠΌΠΎΠΆΠ½ΠΎ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ Π΄Π°ΠΆΠ΅ Π΄Π»Ρ ΠΎΠΏΡΠ΅Π΄Π΅Π»Π΅Π½ΠΈΡ Π½Π΅ΠΈΡΠΏΡΠ°Π²Π½ΡΡ ΠΊΠ»Π°Π²ΠΈΡ Π½Π° ΠΊΠ»Π°Π²ΠΈΠ°ΡΡΡΠ΅, Π½Π°ΠΏΡΠΈΠΌΠ΅Ρ, ΠΊΠ°ΠΊ ΡΡΠΎ ΡΠ΄Π΅Π»Π°Π½ΠΎ Π² ΠΎΠ΄Π½ΠΎΠΉ ΠΈΠ· ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌ ΠΏΠ°ΠΊΠ΅ΡΠ° Norton Utilities.
ΠΠΌΠΈΡΠ°ΡΠΈΡ Π½Π°ΠΆΠ°ΡΠΈΡ ΠΊΠ»Π°Π²ΠΈΡ
Π‘ΠΎΡΡΠΎΡΠ½ΠΈΠ΅ ΠΊΠ»Π°Π²ΠΈΡ Π½Π° ΠΊΠ»Π°Π²ΠΈΠ°ΡΡΡΠ΅ ΠΌΠΎΠΆΠ½ΠΎ Π½Π΅ ΡΠΎΠ»ΡΠΊΠΎ ΠΎΠΏΡΠ΅Π΄Π΅Π»ΡΡΡ, Π΅Π³ΠΎ ΡΠ°ΠΊΠΆΠ΅ ΠΌΠΎΠΆΠ½ΠΎ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠ½ΠΎ ΠΈΠ·ΠΌΠ΅Π½ΡΡΡ. Π Π°ΡΡΠΌΠΎΡΡΠΈΠΌ ΠΎΠ΄ΠΈΠ½ ΠΈΠ· ΡΠΏΠΎΡΠΎΠ±ΠΎΠ² ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠ½ΠΎΠ³ΠΎ Π½Π°ΠΆΠ°ΡΠΈΡ ΠΊΠ»Π°Π²ΠΈΡ, ΠΊΠΎΡΠΎΡΡΠΉ ΠΊΡΠ°ΠΉΠ½Π΅ ΠΏΡΠΎΡΡ Π±Π»Π°Π³ΠΎΠ΄Π°ΡΡ Π½Π°Π»ΠΈΡΠΈΡ API-ΡΡΠ½ΠΊΡΠΈΠΈ keybdevent, ΠΊΠ°ΠΊ ΡΠ°Π· ΠΈ ΠΏΡΠ΅Π΄Π½Π°Π·Π½Π°ΡΠ΅Π½Π½ΠΎΠΉ Π΄Π»Ρ ΠΈΠΌΠΈΡΠ°ΡΠΈΠΈ ΠΊΠ»Π°Π²ΠΈΠ°ΡΡΡΠ½ΠΎΠ³ΠΎ Π²Π²ΠΎΠ΄Π°.
ΠΠ°Π·Π½Π°ΡΠ΅Π½ΠΈΡ ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡΠΎΠ² ΡΡΠΎΠΉ ΡΡΠ½ΠΊΡΠΈΠΈ ΠΏΠΎΡΡΠ½ΠΈΠΌ Π½Π° ΠΏΡΠΈΠΌΠ΅ΡΠ΅ (Π»ΠΈΡΡΠΈΠ½Π³ 3.18)....ΠΠΈΡΡΠΈΠ½Π³ 3.18.
ΠΠΎΠΊΠ°Π·ΡΠ²Π°Π΅ΠΌ ΠΌΠ΅Π½Ρ ΠΡΡΠΊ
procedure TForm1.cmbStartClick(Sender: TObject);
begin
//ΠΠΌΠΈΡΠΈΡΡΠ΅ΠΌ Π½Π°ΠΆΠ°ΡΠΈΠ΅ ΠΊΠ»Π°Π²ΠΈΡΠΈ Windows
keybd_event(VK_LWIN, 0, 0, 0);
//ΠΠΌΠΈΡΠΈΡΡΠ΅ΠΌ ΠΎΡΠΏΡΡΠΊΠ°Π½ΠΈΠ΅ ΠΊΠ»Π°Π²ΠΈΡΠΈ Windows
keybd_event(VK_LWIN, 0, KEYEVENTF_KEYUP, 0);
end;
ΠΠ°Ρ ΠΈΠ½ΡΠ΅ΡΠ΅ΡΡΡΡ, ΠΏΡΠ΅ΠΆΠ΄Π΅ Π²ΡΠ΅Π³ΠΎ, ΠΏΠ΅ΡΠ²ΡΠΉ ΠΈ ΡΡΠ΅ΡΠΈΠΉ ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡΡ ΡΡΠ½ΠΊΡΠΈΠΈ keybdevent (Π²ΡΠΎΡΠΎΠΉ Π½Π΅ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΡΡΡ, Π° ΡΡΠ΅ΡΠΈΠΉ ΠΏΡΠ΅Π΄Π½Π°Π·Π½Π°ΡΠ΅Π½ Π΄Π»Ρ ΡΡΡΠ°Π½ΠΎΠ²ΠΊΠΈ Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡΠ΅Π»ΡΠ½ΠΎΠΉ ΠΈΠ½ΡΠΎΡΠΌΠ°ΡΠΈΠΈ, ΠΎΡΠ½ΠΎΡΡΡΠ΅ΠΉΡΡ ΠΊ Π½Π°ΠΆΠ°ΡΠΈΡ ΠΊΠ»Π°Π²ΠΈΡΠΈ). ΠΠ΅ΡΠ²ΡΠΌ ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡΠΎΠΌ ΡΡΠ½ΠΊΡΠΈΠΈ ΠΏΠ΅ΡΠ΅Π΄Π°Π΅ΡΡΡ ΠΊΠΎΠ΄ Β«Π½Π°ΠΆΠΈΠΌΠ°Π΅ΠΌΠΎΠΉΒ» ΠΈΠ»ΠΈ Β«ΠΎΡΠΏΡΡΠΊΠ°Π΅ΠΌΠΎΠΉΒ» ΠΊΠ»Π°Π²ΠΈΡΠΈ. Π’ΡΠ΅ΡΠΈΠΉ ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡ ΡΠ°Π²Π΅Π½ Π½ΡΠ»Ρ ΠΏΡΠΈ Β«Π½Π°ΠΆΠ°ΡΠΈΠΈΒ» ΠΈ ΠΊΠΎΠ½ΡΡΠ°Π½ΡΠ΅ KEYEVENTF_KEYUP ΠΏΡΠΈ Β«ΠΎΡΠΏΡΡΠΊΠ°Π½ΠΈΠΈΒ» ΠΊΠ»Π°Π²ΠΈΡΠΈ.
...ΠΠ½ΠΈΠΌΠ°Π½ΠΈΠ΅!
ΠΡΠΈ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΠΈ keybd_event Π³Π»Π°Π²Π½ΠΎΠ΅ β Π½Π΅ Π·Π°Π±ΡΠ²Π°ΡΡ Β«ΠΎΡΠΏΡΡΠΊΠ°ΡΡΒ» ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠ½ΠΎ Π½Π°ΠΆΠ°ΡΡΠ΅ ΠΊΠ»Π°Π²ΠΈΡΠΈ (ΠΊΠ°ΠΊ ΡΡΠΎ Π΄Π΅Π»Π°Π΅ΡΡΡ Π² ΠΏΡΠΈΠ²Π΅Π΄Π΅Π½Π½ΡΡ Π·Π΄Π΅ΡΡ ΠΏΡΠΈΠΌΠ΅ΡΠ°Ρ ). ΠΠ½Π°ΡΠ΅ Π΅ΡΡΡ ΡΠΈΡΠΊ ΠΈΠ·ΡΡΠ΄Π½ΡΡ Β«Π³ Π»ΡΠΊΠΎΠ²Β» ΠΊΠ»Π°Π²ΠΈΠ°ΡΡΡΠ½ΠΎΠ³ΠΎ Π²Π²ΠΎΠ΄Π°.
ΠΠ½Π°Π»ΠΎΠ³ΠΈΡΠ½ΡΠΉ ΠΏΡΠΈΠ²Π΅Π΄Π΅Π½Π½ΠΎΠΌΡ Π² Π»ΠΈΡΡΠΈΠ½Π³Π΅ 3.18 ΠΏΡΠΈΠΌΠ΅Ρ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠ½ΠΎΠ³ΠΎ Π½Π°ΠΆΠ°ΡΠΈΡ ΠΊΠ»Π°Π²ΠΈΡΠΈ Print Screen (ΡΠ½ΡΡΠΈΡ ΠΊΠΎΠΏΠΈΠΈ ΡΠΊΡΠ°Π½Π°) ΠΏΡΠΈΠ²ΠΎΠ΄ΠΈΡΡΡ Π² Π»ΠΈΡΡΠΈΠ½Π³Π΅ 3.19.
...ΠΠΈΡΡΠΈΠ½Π³ 3.19.
Π‘Π½ΡΡΠΈΠ΅ ΠΊΠΎΠΏΠΈΠΈ ΡΠΊΡΠ°Π½Π°
procedure TForm1.cmbPrintScreenClick(Sender: TObject);
begin
//ΠΠ°ΠΆΠΈΠΌΠ°Π΅ΠΌ Print Screen
keybd_event(VK_SNAPSHOT, 0, 0, 0);
keybd_event(VK_SNAPSHOT, 0, KEYEVENTF_KEYUP, 0);
end;
Π Π»ΠΈΡΡΠΈΠ½Π³Π΅ 3.20 ΠΏΡΠΈΠ²ΠΎΠ΄ΠΈΡΡΡ ΠΏΡΠΈΠΌΠ΅Ρ Π½Π°ΠΆΠ°ΡΠΈΡ ΠΊΠΎΠΌΠ±ΠΈΠ½Π°ΡΠΈΠΈ ΠΈΠ· Π½Π΅ΡΠΊΠΎΠ»ΡΠΊΠΈΡ ΠΊΠ»Π°Π²ΠΈΡ (Windows+M Π΄Π»Ρ ΡΠ²ΠΎΡΠ°ΡΠΈΠ²Π°Π½ΠΈΡ Π²ΡΠ΅Ρ ΠΎΠΊΠΎΠ½).
...ΠΠΈΡΡΠΈΠ½Π³ 3.20.
Π‘Π²ΠΎΡΠ°ΡΠΈΠ²Π°Π½ΠΈΠ΅ Π²ΡΠ΅Ρ ΠΎΠΊΠΎΠ½
procedure TForm1.cmbMinimizeAllClick(Sender: TObject);
begin
//ΠΠ°ΠΆΠΈΠΌΠ°Π΅ΠΌ Windows+M
keybd_event(VK_LWIN, 0, 0, 0);
keybd_event(Byte(\'M\'), 0, 0, 0);
keybd_event(Byte(\'M\'), 0, KEYEVENTF_KEYUP, 0);
keybd_event(VK_LWIN, 0, KEYEVENTF_KEYUP, 0);
end;
ΠΠΎΠ±Π°Π²Π»Π΅Π½ΠΈΠ΅ ΠΊ ΡΡΠΎΠΉ ΠΊΠΎΠΌΠ±ΠΈΠ½Π°ΡΠΈΠΈ ΠΊΠ»Π°Π²ΠΈΡΠΈ Shift ΠΏΡΠΈΠ²Π΅Π΄Π΅Ρ ΠΊ Π²ΠΎΡΡΡΠ°Π½ΠΎΠ²Π»Π΅Π½ΠΈΡ ΠΏΠ΅ΡΠ²ΠΎΠ½Π°ΡΠ°Π»ΡΠ½ΠΎΠ³ΠΎ ΡΠΎΡΡΠΎΡΠ½ΠΈΡ ΠΎΠΊΠΎΠ½.
ΠΠΎΡΠ»Π΅Π΄Π½ΠΈΠΉ ΠΏΡΠΈΠΌΠ΅Ρ ΠΈΠ»Π»ΡΡΡΡΠΈΡΡΠ΅Ρ, ΠΊΠ°ΠΊ ΠΌΠΎΠΆΠ½ΠΎ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠ½ΠΎΠ΅ Π½Π°ΠΆΠ°ΡΠΈΠ΅ ΠΊΠ»Π°Π²ΠΈΡ Π΄Π»Ρ ΡΡΠΊΠΎΡΠ΅Π½ΠΈΡ Π±ΡΡΡΡΠΎΠ³ΠΎ Π΄ΠΎΡΡΡΠΏΠ° ΠΊ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠ°ΠΌ. ΠΠΌΠ΅Π΅ΡΡΡ Π² Π²ΠΈΠ΄Ρ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠ½ΠΎΠ΅ Π½Π°ΠΆΠ°ΡΠΈΠ΅ ΡΠΎΡΠ΅ΡΠ°Π½ΠΈΠΉ ΠΊΠ»Π°Π²ΠΈΡ, Π°ΡΡΠΎΡΠΈΠΈΡΠΎΠ²Π°Π½Π½ΡΡ Ρ ΡΡΠ»ΡΠΊΠ°ΠΌΠΈ, ΡΠ°ΡΠΏΠΎΠ»ΠΎΠΆΠ΅Π½Π½ΡΠΌΠΈ Π½Π° Π Π°Π±ΠΎΡΠ΅ΠΌ ΡΡΠΎΠ»Π΅ ΠΈΠ»ΠΈ Π½Π°Ρ ΠΎΠ΄ΡΡΠΈΠΌΠΈΡΡ Π² ΠΌΠ΅Π½Ρ ΠΡΡΠΊ. ΠΠΎΠΏΡΡΡΠΈΠΌ, Π½Π° ΠΊΠΎΠΌΠΏΡΡΡΠ΅ΡΠ΅ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΡΡΡ ΡΠΎΡΠ΅ΡΠ°Π½ΠΈΠ΅ ΠΊΠ»Π°Π²ΠΈΡ Ctrl+Alt+E Π΄Π»Ρ Π·Π°ΠΏΡΡΠΊΠ° Internet Explorer. ΠΡΠΈΠΌΠ΅Ρ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠ½ΠΎΠ³ΠΎ Π½Π°ΠΆΠ°ΡΠΈΡ ΡΡΠΎΠΉ ΠΊΠΎΠΌΠ±ΠΈΠ½Π°ΡΠΈΠΈ ΠΊΠ»Π°Π²ΠΈΡ ΠΏΡΠΈΠ²Π΅Π΄Π΅Π½ Π² Π»ΠΈΡΡΠΈΠ½Π³Π΅ 3.21.
...ΠΠΈΡΡΠΈΠ½Π³ 3.21.
ΠΡΡΡΡΡΠΉ Π·Π°ΠΏΡΡΠΊ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΡ
procedure TForm1.cmbEIxplorerClick(Sender: TObject);
begin
//ΠΠ°ΠΆΠΈΠΌΠ°Π΅ΠΌ ΠΊΠΎΠΌΠ±ΠΈΠ½Π°ΡΠΈΡ Ctrl+Alt+E
keybd_event(VK_CONTROL, 0, 0, 0);
keybd_event(VK_MENU, 0, 0, 0);
keybd_event(Byte(\'E\'), 0, 0, 0);
keybd_event(Byte(\'E\'), 0, KEYEVENTF_KEYUP, 0);
keybd_event(VK_MENU, 0, KEYEVENTF_KEYUP, 0);
keybd_event(VK_CONTROL, 0, KEYEVENTF_KEYUP, 0);
end;
ΠΠΎΡΠ»Π΅Π΄Π½ΠΈΠΉ ΠΏΡΠΈΠΌΠ΅Ρ ΠΎΡΠΎΠ±Π΅Π½Π½ΠΎ ΠΏΠΎΠ»Π΅Π·Π΅Π½ Π΄Π»Ρ Π·Π°ΠΏΡΡΠΊΠ° ΡΡΠ°Π·Ρ Π½Π΅ΡΠΊΠΎΠ»ΡΠΊΠΈΡ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌ (Π΄Π»Ρ ΡΡΠΎΠ³ΠΎ ΡΡΠ»ΡΠΊΠ°ΠΌ ΡΡΠΈΡ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌ Π΄ΠΎΠ»ΠΆΠ½Ρ Π±ΡΡΡ Π½Π°Π·Π½Π°ΡΠ΅Π½Ρ ΡΠΎΡΠ΅ΡΠ°Π½ΠΈΡ ΠΊΠ»Π°Π²ΠΈΡ).
Β«ΠΠ΅Π³ΡΡΠΈΠ΅ ΠΎΠ³Π½ΠΈΒ» Π½Π° ΠΊΠ»Π°Π²ΠΈΠ°ΡΡΡΠ΅
Π Π·Π°Π²Π΅ΡΡΠ΅Π½ΠΈΠ΅ ΡΠ°ΡΡΠΌΠΎΡΡΠΈΠΌ Π΄ΠΎΠ²ΠΎΠ»ΡΠ½ΠΎ Π·Π°Π±Π°Π²Π½ΡΠΉ ΠΏΡΠΈΠΌΠ΅Ρ, ΡΠ°ΠΊ ΠΆΠ΅, ΠΊΠ°ΠΊ ΠΈ ΠΏΡΠ΅Π΄ΡΠ΄ΡΡΠΈΠΉ, ΠΎΡΠ½ΠΎΠ²Π°Π½Π½ΡΠΉ Π½Π° ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠ½ΠΎΠΌ Π½Π°ΠΆΠ°ΡΠΈΠΈ ΠΊΠ»Π°Π²ΠΈΡ Caps Lock, Num Lock ΠΈ ScroLL Lock. ΠΠ°ΠΊ ΠΈΠ·Π²Π΅ΡΡΠ½ΠΎ, ΡΡΠΈΠΌ ΠΊΠ»Π°Π²ΠΈΡΠ°ΠΌ ΡΠΎΠΎΡΠ²Π΅ΡΡΡΠ²ΡΡΡ ΡΡΠΈ Π»Π°ΠΌΠΏΠΎΡΠΊΠΈ (ΠΏΠΎ ΠΊΡΠ°ΠΉΠ½Π΅ΠΉ ΠΌΠ΅ΡΠ΅, Π½Π° Π±ΠΎΠ»ΡΡΠΈΠ½ΡΡΠ²Π΅ ΠΊΠ»Π°Π²ΠΈΠ°ΡΡΡ). Π‘ΡΡΡ ΠΏΡΠΈΠΌΠ΅ΡΠ° ΡΠΎΡΡΠΎΠΈΡ Π² ΠΏΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°ΡΠ΅Π»ΡΠ½ΠΎΠΌ Π²ΠΊΠ»ΡΡΠ΅Π½ΠΈΠΈ/Π²ΡΠΊΠ»ΡΡΠ΅Π½ΠΈΠΈ ΡΠΏΠΎΠΌΡΠ½ΡΡΡΡ ΠΊΠ»Π°Π²ΠΈΡ, ΠΊΠΎΡΠΎΡΠΎΠ΅ Π°Π²ΡΠΎΠΌΠ°ΡΠΈΡΠ΅ΡΠΊΠΈ ΡΠΎΠΏΡΠΎΠ²ΠΎΠΆΠ΄Π°Π΅ΡΡΡ Π²ΠΊΠ»ΡΡΠ΅Π½ΠΈΠ΅ΠΌ/Π²ΡΠΊΠ»ΡΡΠ΅Π½ΠΈΠ΅ΠΌ ΡΠΎΠΎΡΠ²Π΅ΡΡΡΠ²ΡΡΡΠΈΡ Π»Π°ΠΌΠΏΠΎΡΠ΅ΠΊ.
ΠΠ΅ΡΠ΅Π΄ ΡΠ°ΡΡΠΌΠΎΡΡΠ΅Π½ΠΈΠ΅ΠΌ ΠΎΡΠ½ΠΎΠ²Π½ΡΡ ΠΏΡΠΎΡΠ΅Π΄ΡΡ ΠΏΡΠΈΠΌΠ΅ΡΠ° ΠΏΡΠΈΠ²Π΅Π΄Π΅ΠΌ ΡΠ΅ΠΊΡΡ ΠΏΡΠΎΡΠ΅Π΄ΡΡΡ PressKey, ΠΊΠΎΡΠΎΡΠ°Ρ Π΄Π°Π»Π΅Π΅ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΡΡΡ ΠΏΡΠ°ΠΊΡΠΈΡΠ΅ΡΠΊΠΈ Π½Π° ΠΊΠ°ΠΆΠ΄ΠΎΠΌ ΡΠ°Π³Ρ (Π»ΠΈΡΡΠΈΠ½Π³ 3.22). ΠΠ½Π° ΠΈΠΌΠΈΡΠΈΡΡΠ΅Ρ Π½Π°ΠΆΠ°ΡΠΈΠ΅ ΠΎΠ΄Π½ΠΎΠΉ ΠΊΠ»Π°Π²ΠΈΡΠΈ Ρ ΠΏΠ΅ΡΠ΅Π΄Π°Π½Π½ΡΠΌ ΠΊΠΎΠ΄ΠΎΠΌ.
...ΠΠΈΡΡΠΈΠ½Π³ 3.22.
ΠΠ°ΠΆΠ°ΡΠΈΠ΅ ΠΎΠ΄Π½ΠΎΠΉ ΠΊΠ»Π°Π²ΠΈΡΠΈ
procedure PressKey(keyCode: Byte);
begin
keybd_event(keyCode, 0, 0, 0 );
keybd_event(keyCode, 0, KEYEVENTF_KEYUP, 0 );
end;
ΠΠ°ΠΏΡΡΠΊ ΠΈ ΠΎΡΡΠ°Π½ΠΎΠ²ΠΊΠ° ΠΎΠ³Π½Π΅ΠΉ ΠΎΡΡΡΠ΅ΡΡΠ²Π»ΡΠ΅ΡΡΡ ΠΏΡΠΈ Π½Π°ΠΆΠ°ΡΠΈΠΈ ΠΊΠ½ΠΎΠΏΠΊΠΈ (ΠΏΠΎΠΌΠΈΠΌΠΎ ΠΊΠ½ΠΎΠΏΠΊΠΈ, Π½Π° ΡΠΎΡΠΌΠ΅ Π΄ΠΎΠ»ΠΆΠ½ΠΎ Π±ΡΡΡ ΡΠ΅ΠΊΡΡΠΎΠ²ΠΎΠ΅ ΠΏΠΎΠ»Π΅, Π² ΠΊΠΎΡΠΎΡΠΎΠΌ Π²Π²ΠΎΠ΄ΠΈΡΡΡ ΠΈΠ½ΡΠ΅ΡΠ²Π°Π» ΠΌΠ΅ΠΆΠ΄Ρ ΡΠΌΠ΅Π½ΠΎΠΉ ΡΠΎΡΡΠΎΡΠ½ΠΈΡ ΠΎΠ³Π½Π΅ΠΉ, Π° ΡΠ°ΠΊΠΆΠ΅ ΡΠ°ΠΉΠΌΠ΅Ρ ΡΠΎ ΡΠ²ΠΎΠΉΡΡΠ²ΠΎΠΌ Enabled, ΡΠ°Π²Π½ΡΠΌ False) (Π»ΠΈΡΡΠΈΠ½Π³ 3.23).
...ΠΠΈΡΡΠΈΠ½Π³ 3.23.
ΠΠ°ΠΏΡΡΠΊ ΠΈ ΠΎΡΡΠ°Π½ΠΎΠ²ΠΊΠ° ΠΎΠ³Π½Π΅ΠΉ
var
initCaps, initNum, initScroll: Boolean; //ΠΠ΅ΡΠ²ΠΎΠ½Π°ΡΠ°Π»ΡΠ½ΡΠ΅
//ΡΠΎΡΡΠΎΡΠ½ΠΈΡ ΠΊΠ»Π°Π²ΠΈΡ
curCaps, curNum, curScroll: Boolean; //Π’Π΅ΠΊΡΡΠΈΠ΅ ΡΠΎΡΡΠΎΡΠ½ΠΈΡ
//ΠΊΠ»Π°Π²ΠΈΡ
procedure TForm1.cmbStartClick(Sender: TObject);
begin
if cmbStart.Caption = \'Π‘ΡΠ°ΡΡ\' then
begin
//Π‘ΠΎΡ ΡΠ°Π½ΡΠ΅ΠΌ ΠΏΠ΅ΡΠ²ΠΎΠ½Π°ΡΠ°Π»ΡΠ½ΡΠ΅ ΡΠΎΡΡΠΎΡΠ½ΠΈΡ ΠΊΠ»Π°Π²ΠΈΡ
initCaps := (GetKeyState(VK_CAPITAL) and 1) <> 0;
initNum := (GetKeyState(VK_NUMLOCK) and 1) <> 0;
initScroll := (GetKeyState(VK_SCROLL) and 1) <> 0;
//ΠΠΊΠ»ΡΡΠ°Π΅ΠΌ ΡΠΎΠ»ΡΠΊΠΎ Caps Lock
if not initCaps then PressKey(VK_CAPITAL);