[ 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.pldoc.pisz.plpdf.pisz.plmew.pev.pl
|