我可以写程序向其它应用程序发送键.就好象用键盘对其它应用程序一样.但有些键不作用.
如:ctrl-有效
   ctrl+s,无效
   ctrl+p,无效.(但不知道为什么,ctrl+s对计算嚣却能够返回其计算结果.)
  我期望用alt+F激活菜单,想通过光标键下移来选择要应的功能键,但无效.(该子菜单无快键,只能用光标下移键操作).  请相关有丰富经验的人指点.以下是软件原代码.

解决方案 »

  1.   

    //////////////////////////////////////////////
    unit sndkey32;interfaceUses SysUtils, Windows, Messages;Function SendKeys(SendKeysString : PChar; Wait : Boolean) : Boolean;
    function AppActivate(WindowName : PChar;var newhnd:integer) : boolean;{Buffer for working with PChar's}const
      WorkBufLen = 40;
    var
      WorkBuf : array[0..WorkBufLen] of Char;implementation
    type
      THKeys = array[0..pred(MaxLongInt)] of byte;
    var
      AllocationSize : integer;(*
    Converts a string of characters and key names to keyboard events and
    passes them to Windows.Example syntax:SendKeys('abc123{left}{left}{left}def{end}456{left 6}ghi{end}789', True);*)
      

  2.   


    Function SendKeys(SendKeysString : PChar; Wait : Boolean) : Boolean;
    type
      WBytes = array[0..pred(SizeOf(Word))] of Byte;
      TSendKey = record
        Name : ShortString;
        VKey : Byte;
      end;
    const
      {Array of keys that SendKeys recognizes.  If you add to this list, you must be sure to keep it sorted alphabetically
      by Name because a binary search routine is used to scan it.}  MaxSendKeyRecs = 41;
      SendKeyRecs : array[1..MaxSendKeyRecs] of TSendKey =
      (
       (Name:'BKSP';            VKey:VK_BACK),
       (Name:'BS';              VKey:VK_BACK),
       (Name:'BACKSPACE';       VKey:VK_BACK),
       (Name:'BREAK';           VKey:VK_CANCEL),
       (Name:'CAPSLOCK';        VKey:VK_CAPITAL),
       (Name:'CLEAR';           VKey:VK_CLEAR),
       (Name:'DEL';             VKey:VK_DELETE),
       (Name:'DELETE';          VKey:VK_DELETE),
       (Name:'DOWN';            VKey:VK_DOWN),
       (Name:'END';             VKey:VK_END),
       (Name:'ENTER';           VKey:VK_RETURN),
       (Name:'ESC';             VKey:VK_ESCAPE),
       (Name:'ESCAPE';          VKey:VK_ESCAPE),
       (Name:'F1';              VKey:VK_F1),
       (Name:'F10';             VKey:VK_F10),
       (Name:'F11';             VKey:VK_F11),
       (Name:'F12';             VKey:VK_F12),
       (Name:'F13';             VKey:VK_F13),
       (Name:'F14';             VKey:VK_F14),
       (Name:'F15';             VKey:VK_F15),
       (Name:'F16';             VKey:VK_F16),
       (Name:'F2';              VKey:VK_F2),
       (Name:'F3';              VKey:VK_F3),
       (Name:'F4';              VKey:VK_F4),
       (Name:'F5';              VKey:VK_F5),
       (Name:'F6';              VKey:VK_F6),
       (Name:'F7';              VKey:VK_F7),
       (Name:'F8';              VKey:VK_F8),
       (Name:'F9';              VKey:VK_F9),
       (Name:'HELP';            VKey:VK_HELP),
       (Name:'HOME';            VKey:VK_HOME),
       (Name:'INS';             VKey:VK_INSERT),
       (Name:'LEFT';            VKey:VK_LEFT),
       (Name:'NUMLOCK';         VKey:VK_NUMLOCK),
       (Name:'PGDN';            VKey:VK_NEXT),
       (Name:'PGUP';            VKey:VK_PRIOR),
       (Name:'PRTSC';           VKey:VK_PRINT),
       (Name:'RIGHT';           VKey:VK_RIGHT),
       (Name:'SCROLLLOCK';      VKey:VK_SCROLL),
       (Name:'TAB';             VKey:VK_TAB),
       (Name:'UP';              VKey:VK_UP)
      );  {Extra VK constants missing from Delphi's Windows API interface}
      VK_NULL=0;
      VK_SemiColon=186;
      VK_Equal=187;
      VK_Comma=188;
      VK_Minus=189;
      VK_Period=190;
      VK_Slash=191;
      VK_BackQuote=192;
      VK_LeftBracket=219;
      VK_BackSlash=220;
      VK_RightBracket=221;
      VK_Quote=222;
      VK_Last=VK_Quote;  ExtendedVKeys : set of byte =
      [VK_Up,
       VK_Down,
       VK_Left,
       VK_Right,
       VK_Home,
       VK_End,
       VK_Prior,  {PgUp}
       VK_Next,   {PgDn}
       VK_Insert,
       VK_Delete];const
      INVALIDKEY = $FFFF {Unsigned -1};
      VKKEYSCANSHIFTON = $01;
      VKKEYSCANCTRLON = $02;
      VKKEYSCANALTON = $04;
      UNITNAME = 'SendKeys';
    var
      UsingParens, ShiftDown, ControlDown, AltDown, FoundClose : Boolean;
      PosSpace : Byte;
      I, L : Integer;
      NumTimes, MKey : Word;
      KeyString : String[20];
      

  3.   

    procedure DisplayMessage(Message : PChar);
    begin
      MessageBox(0,Message,UNITNAME,0);
    end;