2017-09-27 3 views
1

저는 프로그래밍의 초보자입니다. 현재 키 누름과 관련된 문제가 있습니다..NET 키 다운 이벤트 [키 조합이 작동하지 않음]

[LWin +의 L]

Private Sub unit_KeyDown(sender As Object, e As KeyEventArgs) Handles Me.KeyDown 
    If (e.KeyCode = Keys.L AndAlso e.KeyCode = Keys.LWin) Then 
     MsgBox("Pressed!") 
    End If 
End Sub 

메시지 상자가 표시되지 않는다. 시도한 KeyUp, PreviewKeyDown하지만 아무 소용이 없습니다.

하지만, 다른 조합과 같은 [CTRL +의 L] 여기

If (e.KeyCode = Keys.L AndAlso e.Modifiers = Keys.Control) Then 

스턱 반나절 작동. 일부 전문가가 해결책을 제공 할 수 있기를 바랍니다.

감사합니다.

+0

키 코드는 모두 L * 및 * Win + L이 될 수 없습니다. Win + L은 워크 스테이션을 먼저 잠급니다. –

+0

@HansPassant 사용자가 화면을 잠그는 동안 응용 프로그램이 작업을 수행하기를 원합니다. PC에서 작동하도록 설정할 수 있습니까? (잠금 화면의 지연 시간은 1 초와 비슷합니까?) 고마워요! – Tim

+0

@HansPassant 업데이트 : LWin + L에 대한 대안을 찾았습니다. 고마워요. https://stackoverflow.com/questions/17847744/how-to-detect-a-workstation-lock 감사합니다. – Tim

답변

0

Keys.LWin은 기술적으로 수정 자 키가 아니므로 해결 방법을 사용해야합니다.

여기에 하나 오히려 간단합니다

  • 키를 누를 때마다 테이블에 추가합니다.

  • 원하는 키 조합이 테이블에 있는지 확인한 다음 키 조합을 눌러도 원하는 경우 수행하십시오.

  • 키를 놓으면 테이블에서 키를 제거하십시오. 이 같은

뭔가 작동합니다 :

'This is our table containing all currently pressed keys. 
Private KeysPressed As New HashSet(Of Keys) 

Private Sub Form1_KeyDown(sender As Object, e As KeyEventArgs) Handles Me.KeyDown 
    'Add the currently pressed key to the table. 
    KeysPressed.Add(e.KeyCode) 

    'Determine if the combination LWin + L exists in our table (thus, if it is currently pressed) 
    If KeysPressed.Contains(Keys.LWin) AndAlso KeysPressed.Contains(Keys.L) Then 
     'Clear all pressed keys to avoid possible issues. 
     KeysPressed.Clear() 

     'Do your stuff here... 
    End If 
End Sub 

Private Sub Form1_KeyUp(sender As Object, e As KeyEventArgs) Handles Me.KeyUp 
    'Remove the released key from the table. 
    KeysPressed.Remove(e.KeyCode) 
End Sub 

당신은 아마 LWin + L보다 다른 키 조합을 사용한다, 윈도우 인해 응용 프로그램에 전송하지 않습니다 보인다 컴퓨터 잠금을위한 지름길이기도합니다.

+0

안녕 빈센트, 빠른 응답을 보내 주셔서 감사합니다. 나는 당신의 방법을 시도했다, 그것은 직접 화면을 잠급니다. KeysPressed.Contains 경우 (Keys.LWin) '할 일 ... 끝 부분 – Tim

+0

@Tim : 음, 그렇습니다. Windows에 내장 된 바로 가기 키 중 하나는 컴퓨터를 잠그는'Win + L '입니다. 이런 식으로 코드를 극복 할 수는 없습니다. 가능하다면'LWin + L'보다는 다른 조합을 사용해야합니다. –

+0

@ 팀 : 방금 코드 수정을 통해 내 대답을 업데이트했습니다. - 'LWin + L'이외의 다른 조합 (예 :'LWin + K')이 나타나기 때문에 예약 된 바로 가기이므로 응용 프로그램에 LWin + L 조합을 보내지 않는 것 같습니다. 그렇지 않으면 그것은 나를 위해 일합니다! –

관련 문제