Q&A

  • postmessage 에서 WM_KEYDOWN 사용할때 키조합
POSTMESSAGE 또는 SENDMESSAGE 를 사용해서 다른 어플리케이션의 핸들에

WM_KEYDOWN 메세지를 보낼때 단일키는 적용이 잘됩니다 하지만 CTRL,ALT,SHIFT

와의 조합키 메세지를 보낼때는 어떻게 해야할지 난감하네요 게시판을 뒤져봐도 비슷한 질문은 있는데 답변이 없는것 같아요..



여러 방법으로 시도를 해봤으나 조합키 대신 CTRL,ALT,SHIFT를 뺀 키만 눌려지네요



ㅠㅠ 고수님들의 내공을 불어 넣어주십시요









2  COMMENTS
  • Profile
    톰과 제리 2000.07.12 08:00
    menus.파스에 있는 코듭니다.



    function ShortCut(Key: Word; Shift: TShiftState): TShortCut;

    begin

    Result := 0;

    if WordRec(Key).Hi <> 0 then Exit;

    Result := Key;

    if ssShift in Shift then Inc(Result, scShift);

    if ssCtrl in Shift then Inc(Result, scCtrl);

    if ssAlt in Shift then Inc(Result, scAlt);

    end;





    조윤식 wrote:

    > POSTMESSAGE 또는 SENDMESSAGE 를 사용해서 다른 어플리케이션의 핸들에

    > WM_KEYDOWN 메세지를 보낼때 단일키는 적용이 잘됩니다 하지만 CTRL,ALT,SHIFT

    > 와의 조합키 메세지를 보낼때는 어떻게 해야할지 난감하네요 게시판을 뒤져봐도 비슷한 질문은 있는데 답변이 없는것 같아요..

    >

    > 여러 방법으로 시도를 해봤으나 조합키 대신 CTRL,ALT,SHIFT를 뺀 키만 눌려지네요

    >

    > ㅠㅠ 고수님들의 내공을 불어 넣어주십시요

    >

    >

    >

    >

  • Profile
    조윤식 2000.07.13 01:48
    톰과 제리님 답변에 감사드립니다.



    WM_KEYDOWN 에서 키값을 넣어줄때 WORD 형이라서 톰과제리님께서 주신 답변을 참고해서



    WORD(key).hi:= Ctrl 또는 Alt 또는 Shift 키값을 넣고

    WROD(key).lo:= 다른 키값



    으로 해봤으나 역시 안되는군요..ㅠㅠ 될것같으면서 안되네요

    아래 소스가 있으니 참고해보시고 해결방안이 있으면 알려주세요 부탁드립니다.





    procedure sendkey(key_code1,key_code2:byte);

    var

    h: hwnd;

    key: word ;

    begin

    WordRec(Key).Hi:=key_code2;

    WordRec(Key).Lo:=key_code1;

    h := FindWindow('보내려고 하는 어플리케이션 클래스',nil);



    if h <> 0 then

    begin

    // postMessage(h, WM_SYSKEYDOWN,scCtrl,scCtrl);

    postMessage(h, WM_KEYDOWN,key,0); { 여기서 key_code1 만 눌린것으로 처리됩니다.}

    // postMessage(h, WM_SYSKEYUP,scCtrl,scCtrl);

    end

    else

    beep();



    end;



    procedure TForm1.Button1Click(Sender: TObject);

    begin

    sendkey(VK_F1,VK_CONTROL);

    end;