[ Pobierz całość w formacie PDF ]

AltDown:=false;
end;
end;
{$IFDEF DEMO}
{$I WMSTRREV.INC}
{$ENDIF}
begin
AllocationSize:=MaxInt;
{$IFDEF DEMO}
{$I WMALCSIZ.INC}
{$ENDIF}
Result:=false;
UsingParens:=false;
ShiftDown:=false;
ControlDown:=false;
AltDown:=false;
910
I:=0;
L:=StrLen(SendKeysString);
If (L>AllocationSize) then L:=AllocationSize;
If (L=0) then Exit;
While (I
case SendKeysString[I] of
 ( : begin
UsingParens:=True;
Inc(I);
end;
 ) : begin
UsingParens:=False;
PopUpShiftKeys;
Inc(I);
end;
 % : begin
AltDown:=True;
SendKeyDown(VK_MENU,1,False);
Inc(I);
end;
 + : begin
ShiftDown:=True;
SendKeyDown(VK_SHIFT,1,False);
Inc(I);
end;
 ^ : begin
ControlDown:=True;
SendKeyDown(VK_CONTROL,1,False);
Inc(I);
end;
 { : begin
NumTimes:=1;
If (SendKeysString[Succ(I)]= { ) then begin
MKey:=VK_LEFTBRACKET;
SetBit(Wbytes(MKey)[1],
¥' VKKEYSCANSHIFTON);
SendKey(MKey,1,True);
PopUpShiftKeys;
Inc(I,3);
Continue;
end;
KeyString:=  ;
FoundClose:=False;
While (I
Inc(I);
911
If (SendKeysString[I]= } ) then begin
FoundClose:=True;
Inc(I);
Break;
end;
KeyString:=KeyString+Upcase
¥' (SendKeysString[I]);
end;
If (Not FoundClose) then begin
DisplayMessage( No Close );
Exit;
end;
If (SendKeysString[I]= } ) then begin
MKey:=VK_RIGHTBRACKET;
SetBit(Wbytes(MKey)[1],
¥' VKKEYSCANSHIFTON);
SendKey(MKey,1,True);
PopUpShiftKeys;
Inc(I);
Continue;
end;
PosSpace:=Pos(  ,KeyString);
If (PosSpace0) then begin
NumTimes:=StrToInt(Copy(KeyString,
¥' Succ(PosSpace),Length(KeyString)-
¥' PosSpace));
KeyString:=Copy(KeyString,1,
¥' Pred(PosSpace));
end;
If (Length(KeyString)=1) then
¥' MKey:=vkKeyScan(KeyString[1])
else MKey:=StringToVKey(KeyString);
If (MKeyINVALIDKEY) then begin
SendKey(MKey,NumTimes,True);
PopUpShiftKeys;
Continue;
end;
end;
 ~ : begin
SendKeyDown(VK_RETURN,1,True);
PopUpShiftKeys;
Inc(I);
end;
else begin
MKey:=vkKeyScan(SendKeysString[I]);
912
If (MKeyINVALIDKEY) then begin
SendKey(MKey,1,True);
PopUpShiftKeys;
end else DisplayMessage( Invalid KeyName );
Inc(I);
end;
end;
end;
Result:=true;
PopUpShiftKeys;
end;
{
Converts a string of characters and key names to
a Winmacro-compatible macro, then plays them back as
a macro.Supports the Visual Basic SendKeys syntax, as
documented in the description of the StringToMacro
function (above).
}
{AppActivate
This is used to set the current input focus to a given window
using its name.This could be used for a variety of tasks, but
is especially useful for ensuring a window is active before
sending it input messages via the SendKeys function.
}
function AppActivate(WindowName : PChar) : boolean;
var
WindowHandle : HWND;
begin
Result:=true;
WindowHandle:=FindWindow(nil,WindowName);
If (WindowHandle0) then begin
SendMessage(WindowHandle, WM_SYSCOMMAND,
¥' SC_HOTKEY, WindowHandle);
SendMessage(WindowHandle, WM_SYSCOMMAND,
¥' SC_RESTORE, WindowHandle);
end else Result:=false;
end;
end.
913
Wysyłanie klawiszy
Oto przykładowe wywołanie funkcji SendKeys:
SendKeys('ave{left 3}+d{end} h{left}ot{left 2}+r{end}
¥' !{left}cks{left 3}+Ro{end}-');
SendKeys tłumaczy podany łańcuch znaków na ciąg komunikatów
o naciśnięciach klawiszy i wysyła je do aktywnego okna. Aańcuch znaków,
podawany jako argument, zadeklarowany został jako PChar, a zatem jego długość
może teoretycznie sięgnąć 2 GB.
Składnia SendKeys
Funkcja SendKeys rozpoznaje podane niżej kody modyfikujące, klawisze
i nazwy klawiszy specjalnych. W tabeli A.11 wymieniono kody modyfikujÄ…ce.
Tabela A.11. Dozwolone kody modyfikujÄ…ce dla funkcji SendKeys.
Kod Klawisz modyfikujÄ…cy
+ SHIFT
^ CONTROL
% ALT
Aby zmodyfikować całą grupę kolejnych klawiszy należy ich nazwy lub litery ująć
w nawiasy. Na przykład, +abc oznacza, że SHIFT naciśnięty jest tylko z literą a.
Natomiast +(abc) oznacza, że wszystkie trzy znaki mają być wprowadzane przy
wciśniętym klawiszu SHIFT.
Poza kodami modyfikującymi, SendKeys rozpoznaje także szereg znaków
specjalnych, które wymieniono w tabeli A.12.
Tabela A.12. Znaki specjalne, rozpoznawane przez funkcjÄ™ SendKeys.
Symbol Znaczenie
~ Enter
( PoczÄ…tek grupy modyfikowanych klawiszy
) Koniec grupy modyfikowanych klawiszy
{ PoczÄ…tek nazwy klawisza
} Koniec nazwy klawisza
914
Zwykłe znaki w wywołaniach SendKeys
SendKeys obsługuje wszystkie znaki, które da się wprowadzić z klawiatury. Aby
wysłać wymienione wyżej kody modyfikujące jako zwykłe znaki, należy ująć je
w nawiasy sześcienne.
Poza kodami modyfikujÄ…cymi i klawiszami specjalnymi, SendKeys rozpoznaje
wiele nazw klawiszy (zob. tabela A.13). Nazwę klawisza należy ująć w nawiasy
sześcienne.
Tabela A.13. Nazwy klawiszy, rozpoznawane przez funkcjÄ™ SendKeys.
Nazwa klawisza Nazwa klawisza w Windows API
VK_BACK
BKSP, BS, BACKSPACE
VK_CANCEL
BREAK
VK_CAPITAL
CAPSLOCK
VK_CLEAR
CLEAR
VK_DELETE
DEL
VK_DELETE
DELETE
VK_DOWN
DOWN
VK_END
END
VK_RETURN
ENTER
VK_ESCAPE
ESC
VK_ESCAPE
ESCAPE
VK_F1
F1
VK_F2
F2
VK_F3
F3
VK_F4
F4
VK_F5
F5
VK_F6
F6
VK_F7
F7
VK_F8
F8
VK_F9
F9
VK_F10
F10
915
Nazwa klawisza Nazwa klawisza w Windows API
VK_F11
F11
VK_F12
F12
VK_F13
F13
VK_F14
F14
VK_F15
F15
VK_F16
F16
VK_HELP
HELP
VK_HOME
HOME
VK_INSERT
INS
VK_LEFT
LEFT
VK_NUMLOCK
NUMLOCK
VK_NEXT
PGDN
VK_PRIOR
PGUP
VK_PRINT
PRTSC
VK_RIGHT
RIGHT
VK_SCROLL
SCROLLOCK
VK_TAB
TAB
VK_UP
UP
Po nazwie klawisza, ale jeszcze przed zamykającym nawiasem, można
umieścić liczbę, mówiącą, ile razy dany klawisz ma być wysłany, (np. {left 6}).
Oto jeszcze jeden przykład użycia SendKeys:
If AppActivate('Test.txt - Notatnik') then
SendKeys('abc123{left}{left}{left}def{end}456{left
¥' 6}ghi{end}789');
Przedstawione funkcje oferują te same możliwości, co odpowiednie standardowe
podprogramy Visual Basica, a ponadto mogą być dostosowane do specyficznych
potrzeb użytkownika. Można, na przykład, dodać własne nazwy klawiszy do listy
nazw, rozpoznawanych przez SendKeys. Chcąc dodać do listy klawisz, którego
oryginalna funkcja nie obsługuje, albo zmienić nazwy klawiszy na łatwiejsze do
zapamiętania, wystarczy zmodyfikować tekst zródłowy podprogramu.
W środowisku Visual Basica nie ma takiej możliwości.
916
UWAGA:
Kompletny tekst zródłowy i opis SendKeys znajduje się na CD-ROMie
dołączonym do książki.
Dystrybucja komponentów
Jedna z najważniejszych różnic w architekturze Delphi i Visual Basica polega na
metodzie dystrybucji komponentów, używanych przez aplikację. Oryginalne
komponenty Delphi mogą być wbudowane w główny moduł wykonywalny
aplikacji, a nie tylko do niego dołączone. Natomiast komponenty OCX Visual
Basica są w rzeczywistości jedynie specyficznymi, ukrytymi bibliotekami DLL.
Każdy komponent OCX, używany przez aplikację, wnosi do niej balast, typowy
dla biblioteki DLL. Z tego powodu programiści, korzystający z Visual Basica, na
ogół starannie dobierają komponenty i ostatecznie decydują się na użycie
w projekcie tylko tych rzeczywiście niezbędnych. Niezastosowanie się do tej
zasady wiąże się zwykle z bardzo dużym zużyciem zasobów, często
nieproporcjonalnym do wielkości aplikacji. [ Pobierz całość w formacie PDF ]

  • zanotowane.pl
  • doc.pisz.pl
  • pdf.pisz.pl
  • mew.pev.pl