2012-05-31 4 views
4

키보드의 수정 자 키를 문자에 적용하여 수정 된 값 (현재 문화권)을 얻는 가장 좋은 방법은 무엇입니까? 나는 수식 키를 누르면인지 알 수있는 방법이, 내가 가지고 있지 않은 것은 다음에 매핑하는 방법입니다변경자 키를 문자에 적용

Assert.AreEqual('!', Modify('1')); 
Assert.AreEqual('"', Modify('2')); 
Assert.AreEqual('A', Modify('a')); 
Assert.AreEqual('B', Modify('b')); 
Assert.AreEqual(':', Modify(';')); 
Assert.AreEqual('?', Modify('/')); 

: 변화와 예를 들어

는 (영국 키보드)를 누르면 이 일련의 수식 키가 지정된 올바른 문자

+0

사전은 말할 수 있지만 확장 성이 좋지 않습니다. 특히 여러 자판 배열을 지원해야하는 경우 특히 그렇습니다. –

+0

@JeffMercado 사용자가 수정 된 사용자 정의 자판 배열을 사용하는 경우 더 나빠질 것입니다! – Guillaume

+0

@JeffMercado 필자는 이것을 고려했다. 그러나 이것은 많은 지역에서 사용될 가능성이있는 응용 프로그램 용이므로 문제를 직접 해결할 수는 없다. – Martin

답변

0

당신이 달성하려고하는지에 따라 다음을 할 수 있습니다

[DllImport("user32.dll", CharSet = CharSet.Unicode)] 
    static extern short VkKeyScan(char ch); 

    [Test] 
    public void Test_VkKeyScan() 
    { 
     Assert.AreEqual(VkKey('!'), VkKey('1')); 
     Assert.AreEqual(VkKey('@'), VkKey('2')); 
    } 

    private short VkKey(char p) 
    { 
     return (short)(0xff & VkKeyScan(p)); 
    } 

이 중 문제가 너무 많이해서는 안됩니다 제공 VkKey 방법을 사용하여 사전을 구축.

업데이트 : 여러 레이아웃을 올바르게 처리하려면 VkKeyScan 대신 VkKeyScanEx을 사용하고 현재 또는 필요한 레이아웃을 매개 변수로 명시 적으로 제공해야합니다.

관련 문제