2010-07-07 2 views
3

VBscript의 SendKeys은 유니 코드를 지원하지 않습니다. A-65와 같은 일부 문자는 지원하지만 히브리어 알파벳 인 Aleph (א)와 같은 외국 문자는 지원하지 않습니다. 지원 범위 밖에서 프로빙하십시오. 10 진수 값이 128+ 일 수 있으며 "?"를 제공하며 ASCII 범위 만 지원합니다.또는 VBscript의 SendKeys가 유니 코드를 지원합니까?

Windows XP를 사용하여 컴퓨터에서 히브리어를 입력하고 볼 수 있습니다. 그래서 문자에 대한 OS 지원이 설정되어 있습니다. 내 소스 코드는 그 이후로 라인

msgbox Chrw(1488) 

을 표시하고 메모장과 MS Word에 표시했습니다.

인식 할 수없는 문자에 대해 물음표가 전송되는 것처럼 보입니다. 필자는 MS Word 나 메모장에서 문자를 표시하는 데 문제가 있다면 (예 : 글꼴이 숯을 지원하지 않을 때) 물음표가 아닌 상자를 표시한다고 생각합니다. 어쨌든 메모장의 경우 확실히. 따라서 SendKeys 문제입니다. 어떤 아이디어? 어떤 종류의 해결 방법이 있나?

Dim objShell 

Set objShell = CreateObject("WScript.Shell") 

objShell.Run "notepad" ''#can change to winword 

Wscript.Sleep 2000 

msgbox Chrw(1488) ''#aleph 

objShell.SendKeys ("abc" & ChrW(1488) & "abc") ''#bang, it displays a ? instead of an aleph 

WScript.Quit 
+0

지역 및 언어 옵션에서 설치 한 키보드 레이아웃은 무엇이며 ** 비 유니 코드 프로그램 ** 설정은 무엇입니까? – Helen

+1

언어와 레이아웃까지. 언어 영어 영국 레이아웃 영어 영국. 언어 영어 (미국) 레이아웃 영어 (미국). 레이아웃 히브리어가있는 언어 히브리어. "non-unicode 프로그램을위한 언어"까지, 영문 US. 나는 히브리어를 시도했다. 어느 쪽이든, msgbox는 msgbox chrw (1488)에 대한 문자 - 알레프를 표시합니다. (그것은 항상 가지고 있습니다)하지만 "유니 코드가 아닌 프로그램을위한 언어"(다시 시작해야 함)가 US로 설정되면 메모장이 표시됩니까? sendkeys chrw (1488). 히브리어로 설정하면 메모장은 sendkeys chrw (1488)에 대해 아무 것도 표시하지 않습니다. 그럼에도 sendkeys chrw (1488) 문자를 표시하지 않습니다. – barlop

+0

서식을 개선하기 위해 게시물을 편집했습니다. 괜찮 으면 좋겠어요. 마음에 들면 다시 편집하십시오. – Helen

답변

3

당신이 맞을 것 같아요 VBscript의 SendKeys은 유니 코드을 지원하지 않습니다. (영어 러시아어 미국, 히브리어 키보드 러시아어 Windows XP에서 API MonitorBlade API Monitor 사용) SendKeys에 의해 수행 Windows API 함수 호출


모니터링 SendKeys 인식 유니 코드되지 않는다는 것을 보여줍니다. 특히, SendKeys는 다음을 수행합니다

  1. 은 ANSI (유니 코드)를 VkKeyScan 기능의 버전 호출 - VkKeyScanA - 문자의 가상 키 코드를 얻을 수 보냄을합니다. 이 함수는 문자를 VK_SHIFT + VK_OEM_2으로 변환하므로 처리 전이나 처리 중 어레 이프 문자가 다른 ANSI 문자로 변환 된 것 같습니다.

  2. SendInput 함수를 호출하여 Aleph 문자 대신 VK_SHIFT + VK_OEM_2 키 스트로크를 전송합니다.

여기서 가장 큰 문제는 유니 코드 문자를 보내려면 즉, SendInputKEYEVENTF_UNICODE 플래그와 함수 매개 변수를 통해 전달해야 문제의 문자로 호출해야합니다 - 실험은이 중 어느 것도 경우가 없다는 것을 보여줍니다 . 또한 VkKeyScan은 유니 코드 문자의 경우 실제로 필요하지 않습니다. SendInput 자체가 유니 코드 입력을 처리합니다. 이 주어


는, VBScript를에서 응용 프로그램에 유니 코드 입력을 보낼 수있는 유일한 방법은 제대로 SendInput을 활용하고 스크립트에서이 유틸리티/구성 요소를 호출하는 사용자 정의 유틸리티 또는 COM 구성 요소를 작성하는 것입니다. (VBScript에는 Windows API에 액세스 할 수있는 고유 한 방법이 없습니다.)

참고

VBScript를의 obj.SendKeys (..)를 인식 유니 코드 아니지만 barlop 추가, VB의 SendKeys.Send (..)가 될 것이다.

+0

좋은 연구 .. 흥미 롭다. 나는 몇 년 전 Visual Basic에서 여러 가지 키의 상수 (VK_SHIFT)를 보았다. 그것과 Windows API에 대한 액세스는 vbscript의 프로그래머에게도 가능합니까? 나는 그것에 들어가는 책을 가지고있는 것처럼 보이지 않는다. 이 링크를 찾았습니다. 누군가 시각적 인 기본 문제로 보이는 것을 해결하기 위해 무언가를 작성했다고 주장합니다. http://vb.mvps.org/samples/SendInput/ 전송할 수 있는지 알 수 없습니다. vbscript. – barlop

+0

@barlop : 아니요, VBScript는 Windows API에 액세스 할 수 없습니다. 그러나 필요한 WinAPI 기능을 활용하고 VBScript 코드에서이 유틸리티를 호출하는 사용자 지정 유틸리티를 만들 수 있습니다. – Helen

-2

메모장에서 Microsoft Sans Serif으로 글꼴을 설정해보십시오.

+1

아니요, 원래 질문보기 : "MS Word 또는 메모장에 문자를 표시하는 데 문제가있는 경우 (예 : 글꼴이 숯을 지원하지 않을 때) 물음표가 아닌 상자가 표시됩니다. 메모장의 경우에는 분명히 " – Philipp

+1

right philipp. , times new roman, 또는 내가 사용하고있는 글꼴이 확실히 aleph 문자를 지원합니다 .. 그래서 자연스럽게 ms sans serif 글꼴 (이를 지원하는 다른 글꼴)로 변경해도 작동하지 않습니다. – barlop

+0

시도하십시오. Mhhh – Trefex

0

나는 드래곤을 자연스럽게 말하면서 히브리어로 말하지만 SendKeys는 실제로 매크로 편집기에 표시되지만 실제로 히브리어 문자를 보낼 수는 없지만 내가 한 것은 히브리어 텍스트로 클립 보드를 설정 한 다음 SendKeys 붙여 넣기를 위해 Ctrl-V를 사용하면 작동하지만, 인코딩을 망친 SendKeys 일뿐입니다. 사용자가 클립 보드와 히브리어 문자 명령 문자 (Ctrl 키, Alt 키, Shift 키를) 혼합 작동하지 않습니다,하지만 주위 작품의 오버라이드 (override) 할

Clipboard("טקסט בעברית") 
SendKeys("^V") 

.

+0

흥미 롭다. "다시 말해서 사용자 클립 보드를 덮어 씁니다."사용자의 클립 보드를 미리 저장하고 클립 보드 ("טקסט בעברית") 및 'SendKeys ("^ V")'두 줄을 작성하여 넣을 수 있습니다 클립 보드에 있던 것이 든 클립 보드에 있던지. 따라서 사용자의 클립 보드에있는 내용을 무시하거나 잃지 않도록합니다. – barlop

+0

네가 맞다. 나는 스스로하기 때문에 클립 보드에 관심이 없지만 클립 보드를 저장하고 복원하는 것이 실제로 더 좋다. (클립 보드 내용이 순수 텍스트가 아닐 때 문제가있다.) –

관련 문제