在DELPHI中,如何模拟键盘Alt+F4请高手帮我忙呀.

解决方案 »

  1.   

    ///////Begin Sourceprocedure SendKey(const mKey: Word; mShiftState: TShiftState;mCount: Integer = 1); { 模拟系统按键;mCount指定按键次数 }constcExtended: set of Byte = [VK_UP, VK_DOWN, VK_LEFT, VK_RIGHT, VK_HOME,VK_END, VK_PRIOR, VK_NEXT, VK_INSERT, VK_DELETE];procedure pKeyboardEvent(mKey, mScanCode: Byte; mFlags: Longint);varvKeyboardMsg: TMsg;beginkeybd_event(mKey, mScanCode, mFlags, 0);while PeekMessage(vKeyboardMsg, 0, WM_KEYFIRST, WM_KEYLAST, PM_REMOVE) dobeginTranslateMessage(vKeyboardMsg);DispatchMessage(vKeyboardMsg);end;end; { pKeyboardEvent }procedure pSendKeyDown(mKey: Word; mGenUpMsg: Boolean);varvScanCode: Byte;vNumState: Boolean;vKeyBoardState: TKeyboardState;beginif (mKey = VK_NUMLOCK) then beginvNumState := ByteBool(GetKeyState(VK_NUMLOCK) and 1);GetKeyBoardState(vKeyBoardState);if vNumState thenvKeyBoardState[VK_NUMLOCK] := (vKeyBoardState[VK_NUMLOCK] and not 1)else vKeyBoardState[VK_NUMLOCK] := (vKeyBoardState[VK_NUMLOCK] or 1);SetKeyBoardState(vKeyBoardState);Exit;end;vScanCode := Lo(MapVirtualKey(mKey, 0));if (mKey in cExtended) then beginpKeyboardEvent(mKey, vScanCode, KEYEVENTF_EXTENDEDKEY);if mGenUpMsg thenpKeyboardEvent(mKey, vScanCode,KEYEVENTF_EXTENDEDKEY or KEYEVENTF_KEYUP)end else beginpKeyboardEvent(mKey, vScanCode, 0);if mGenUpMsg then pKeyboardEvent(mKey, vScanCode, KEYEVENTF_KEYUP);end;end; { pSendKeyDown }procedure pSendKeyUp(mKey: Word);varvScanCode: Byte;beginvScanCode := Lo(MapVirtualKey(mKey, 0));if mKey in cExtended thenpKeyboardEvent(mKey, vScanCode, KEYEVENTF_EXTENDEDKEY and KEYEVENTF_KEYUP)else pKeyboardEvent(mKey, vScanCode, KEYEVENTF_KEYUP);end; { pSendKeyUp }varI: Integer;beginfor I := 1 to mCount do beginif ssShift in mShiftState then pSendKeyDown(VK_SHIFT, False);if ssCtrl in mShiftState then pSendKeyDown(VK_CONTROL, False);if ssAlt in mShiftState then pSendKeyDown(VK_MENU, False);pSendKeyDown(mKey, True);if ssShift in mShiftState then pSendKeyUp(VK_SHIFT);if ssCtrl in mShiftState then pSendKeyUp(VK_CONTROL);if ssAlt in mShiftState then pSendKeyUp(VK_MENU);end;end; { SendKey }///////End Source///////Begin Demoprocedure TForm1.Button1Click(Sender: TObject);beginSendKey(VK_F4, [ssAlt]);end;///////End Demo转自"超级猛料2003"
      

  2.   

    procedure TForm1.Button1Click(Sender: TObject);
    begin
    keybd_event(VK_MENU,0,KEYEVENTF_EXTENDEDKEY or 0,0);
    keybd_event(115,0,KEYEVENTF_EXTENDEDKEY or 0,0);
    keybd_event(115,0,KEYEVENTF_EXTENDEDKEY or KEYEVENTF_KEYUP,0);
    keybd_event(VK_MENU,0,KEYEVENTF_EXTENDEDKEY or KEYEVENTF_KEYUP,0);
    end
      

  3.   

    Alt+F4不是关闭窗口吗?
    只要postmessage(handle,wm_Close,...)说不定就OK.