호환 만들기

Make Compatible
호환 만들기
Make Compatible icon.png
MkCompat (Make Compatible).png
고급 플래그를 표시하는 호환 설정
개발자마이크로소프트
운영 체제윈도 9x

Make Compatible마이크로소프트가 개발한 프로그램으로 윈도 9x 운영 체제에 포함되어 있다.그것은 그 플랫폼에 특별히 맞춘 윈도우 3.1 프로그램이 새로운 버전에서 실행되도록 하기 위해 윈도우의 프로그램별 시스템 설정을 변경한다.호환성을 만들기 위한 프로그램 이미지 파일의 이름은mkcompat.exe\Windows\에 저장됨시스템 디렉터리.[1][2]

옵션들

호출되면 '파일' 메뉴의 '프로그램 선택' 옵션을 이용해 윈도 3.1 애플리케이션 프로그램 이미지 파일의 이름을 선택할 수 있다.프로그램 이미지 파일을 선택한 후 기본적으로 호환성 설정에는 해당 프로그램이 실행될 때 해당 프로그램에 대해 Windows의 동작을 변경하도록 설정할 수 있는 다섯 가지 옵션 목록이 표시된다.[1]

  • 향상된 메타 파일[1] 스풀하지 않음
  • 응용 프로그램에 더 많은 스택 공간[1] 제공
  • 프린터 장치 모드 크기[1] 변경
  • Windows 버전 번호에[1] 대한 거짓말
  • Windows 3.1 스타일 컨트롤[1]

"파일" 메뉴의 "고급 옵션" 선택을 통해 선택할 수 있는 고급 옵션 모드는 더 긴 옵션 목록을 제공하므로 특정 응용 프로그램이 필요한 경우 Windows 3.1 에뮬레이션을 보다 세부적으로 제어할 수 있다.[1]

호환성 비트

각각의 옵션은 소위 "호환성 비트"의 시스템 데이터베이스에 기록된다.이 플래그는 호환성 설정에서 표시되는 각 옵션마다 하나씩 있는 1비트 플래그로 구성된 데이터베이스 입니다.[3][4]

이 데이터베이스는 이전 버전의 Windows에 이미 존재했다.윈도우즈 3.1에서 데이터베이스는 win.ini [호환성] 섹션에 저장되며 다음과 같은 항목이 있다.[3][4]

[호환성] ACAD=0x8000 아미프로=0x04000010 

각 줄은 응용 프로그램의 이름을 지정하고, 해당 프로그램과 연결할 16진수 숫자 상수를 제공한다.16진수 숫자 상수는 해당 응용 프로그램이 실행될 때 Windows가 적용하는 특정 응용 프로그램에 대한 호환성 비트플래그를 인코딩한다.Make Compatible은 텍스트 편집기를 사용하여 win.ini를 수동으로 편집하는 대신 이러한 플래그를 쉽게 편집할 수 있는 그래픽 사용자 인터페이스를 제공할 뿐이다.숫자 값을 알 필요 없이 개별 플래그를 설정하고 해제할 수 있다.[3][4]

win.ini로 설정 가능한 호환성 비트플래그는 WINININI에 기록되어 있지 않다.Windows 3.1 또는 Microsoft에서 발행한 Microsoft Windows 3.1 Resource Kit에 함께 제공되는 WRI 파일.이들은 설명 없이 윈도우에 정의된 상수의 단순한 집합("GetAppCompatFlags"의 "GACF_"를 시작하는 이름 포함)으로 나열된다.Microsoft Windows 3.1 Device Driver Development Kit와 함께 제공되는 hheader 파일.윈도우즈 3.1에서 커널의 태스크 데이터베이스에 있는 지정된 태스크에 대해 적용되는 호환성 플래그는 문서화되지 않은 태스크를 통해 읽을 수 있다.GetAppCompatFlags()커널 모듈에서 내보내는 기능.[5]

고급 모드 플래그

깃발은 마이크로소프트 기술 자료 문서 #82860에 기록되어 있다.이러한 플래그는 호환성의 "고급 옵션" 메뉴에서 설정할 수 있는 "고급 모드" 플래그에 해당한다.[5]

평균 너비 측정 기준 30개
이것은 16진수 값을 갖는 호환성 비트 워드의 비트 #19이다.0x80000, 상징적인 이름으로 알려져 있다.GACF_30AVGWIDTH창문으로이 플래그로 인해 Windows는 평균 문자 너비를 계산할 때 모든 을 7/8 배수로 다시 스케일링할 수 있다.그 이유는 특정 Windows 3.0 애플리케이션인 TurboTax가 이러한 크기 계산에 사용하고 있던 값을 하드 코딩하여 Windows 3.1에서 채택한 새로운 TrueType 호환 글꼴 평균 너비 계산법에서 제대로 작동하지 못했기 때문이다.이는 사람들이 TurboTax를 사용하여 포스트스크립트 프린터에서 소득세 신고서를 인쇄하는 것을 막았다.[5]
항상 NC_Paint 전송
이것은 16진수 값을 갖는 호환성 비트 워드의 비트 #6이다.0x40, 상징적인 이름으로 알려져 있다.GACF_ALWAYSSENDNCPAINT창문으로이 깃발은 어떤 호출도 강요한다.SetWindowPos()의 발송을 야기하다WM_NCPAINT모든 하위 창에 메시지 표시이것은 윈도우 3.0 동작이다.Windows 3.1에서는 창 메시지가 비클라이언트 영역을 다시 도색해야 하는 창에만 전송되도록 동작을 변경했다.그러나 일부 Windows 3.0 애플리케이션은 항상 이 메시지를 수신하여 하위 창을 재배치해야 하는지 여부를 결정하였다.[5]
장치 글꼴 열거 안 함
16진수 값을 갖는 호환성 비트 워드의 비트 #14 입니다.0x2000, 상징적인 이름으로 알려져 있다.GACF_ENUMTTNOTDEVICE창문으로이 플래그로 인해 Windows 3.1에서DEVICE_FONTTYPE인쇄하려는 응용 프로그램이 열거된 글꼴을 인쇄하려는 경우 특정 상황에서 종료됨.특정한 상황은 대상 프린터가 도트 매트릭스 프린터나 PostScript 프린터가 아닌 경우로, 글꼴은 프린터 자체에 상주하지 않는 TrueType 글꼴이다.이러한 상황에서 일부 응용 프로그램(PageMakerMGXDraw 포함)은 플래그를 잘못 해석하여 글꼴이 장치 거주자로 간주된다. (TrueType 글꼴은 Windows에서 프린터에 업로드할 수 있으며 장치 자체에 상주할 필요가 없으므로 사용할 수 없다.)그런 다음 프린터에서 지원하는 글꼴 크기를 확인하고, 해당 글꼴이 실패하면(업로드될 때까지 프린터가 글꼴에 대해 모르기 때문에), 글꼴 크기를 조정할 수 없다고 잘못 가정한다.설정DEVICE_FONTTYPE이러한 상황에서 false로 플래그를 지정하면 애플리케이션이 잘못되는 것을 방지할 수 있으며, 이것이 이 호환성 비트플래그가 하는 일이다.[5]
calcsize를 보내지 마십시오.WM_MOVE
이것은 16진수 값을 갖는 호환성 비트 워드의 비트 #17이다.0x20000, 상징적인 이름으로 알려져 있다.GACF_NCCALCSIZEONMOVE창문으로이 깃발은 억지로라도WM_NCCALCSIZE이동 또는 크기 조정 중인 창으로 보낼 메시지.이것은 윈도우 3.0 동작이다.윈도우 3.1에서는 윈도우 메시지가 크기를 조정하고 있는 윈도우에만 전송되도록 동작이 변경되었다.창문을 그냥 움직인다면 보내지 않았다.그러나 Lotus Notes와 같은 일부 Windows 3.0 응용프로그램은 항상 이 메시지를 수신해야 했다.[5]
Enum Helv 및 Times 로마 글꼴
이것은 16진수 값을 갖는 호환성 비트 워드의 비트 #12이다.0x1000, 상징적인 이름으로 알려져 있다.GACF_ENUMHELVNTMSRMN창문으로이 플래그는 Windows 글꼴 열거 API에 의해 시스템에 "Helv"와 "Tms Rmn"이라는 정확한 이름의 글꼴이 나열되지 않는 한 제대로 작동하지 않는 응용 프로그램의 문제를 둘러싸고 작동한다.이름은 특정 글꼴인 헬베티카타임즈로마리노타이프 회사의 상표로, 마이크로소프트는 이 리노타이프 글꼴을 윈도 3.1과 함께 배송하지 않았기 때문에 현재 존재하는 것으로 열거할 수 없었다.이 플래그는 Windows가 "MS Sans Serif"와 "MS Serif" 글꼴을 "Helv"와 "Tms Rmn" 이름으로 열거하여 정확한 이름을 사용하지 않으면 작동하지 않는 응용 프로그램과 호환되도록 한다.[5]
추가 창 단어 강제 적용
이것은 16진수 값을 갖는 호환성 비트 워드의 비트 #8이다.0x100, 상징적인 이름으로 알려져 있다.GACF_MOREEXTRAWNDWORDS창문으로이 플래그는 윈도우 워드가 추가 윈도우 워드가 필요하다는 사실을 윈도우에 알리지 않았을 때 윈도우 워드(Windows가 GUI 윈도우와 연결한 데이터의 추가 항목)가 존재한다고 가정하는 애플리케이션의 문제를 둘러싸고 작동한다.윈도 3.1은 윈도 3.0과 달리 추가 윈도 워드의 모든 사용을 한계로 체크하고, 그들이 요청한 것보다 더 많은 공간을 사용할 수 있다고 가정하는 애플리케이션은 따라서 실패할 것이다.이 플래그가 설정된 상태에서 실행되는 응용 프로그램의 경우, Windows 3.1은 응용 프로그램에서 요청한 총 단어 수를 자동으로 4바이트 더 늘렸다.[5]
프린터 텍스트를 새 대역으로 강제 적용
이것은 16진수 값을 갖는 호환성 비트 워드의 비트 #1이다.0x2, 상징적인 이름으로 알려져 있다.GACF_FORCETEXTBAND창문으로이 플래그는 인쇄할 때 항상 Windows 3.1이 두 개의 밴드를 사용하게 하는데, 첫 번째 밴드는 그래픽용이고 두 번째 밴드는 텍스트용이다.보통 윈도 3.1은 둘 다 하나의 밴드로 인쇄하려고 한다.그러나 워드퍼펙트와 같은 애플리케이션은 윈도우 3.0에서 그랬던 것처럼 항상 두 번째 밴드가 존재하며 텍스트가 있는 곳에 항상 있을 것이라고 가정했다.프리랜서 그래픽스에도 비슷한 문제가 있었다.[5]
그래픽 밴드에 TT 글꼴 강제 적용
이것은 16진수 값을 갖는 호환성 비트 워드의 비트 #15이다.0x8000, 상징적인 이름으로 알려져 있다.GACF_FORCETTGRAPHICS창문으로이 플래그는 프리랜서 그래픽스(Freelance Graphics)[5]의 문제를 해결하기 위한 것이었다. 프리랜서 그래픽은 그래픽으로 인쇄되지 않는 한 TrueType 글꼴을 사용하여 인쇄하지 않는다.
글로벌 후크에서 Win16 앱만 요청
삭제 가능한 세그먼트 속성 무시
이 값은 16진수 값을 갖는 호환성 비트 워드의 비트 #0입니다.0x1, 상징적인 이름으로 알려져 있다.GACF_IGNORENODISCARD창문으로이 깃발은 억지로라도GEM_NODISCARD에 전달된 국기.GlobalAlloc()무시해야 할 프로그램에 의해.마이크로소프트 자체 C 컴파일러인 마이크로소프트 C 버전 6과 함께 제공되는 런타임 라이브러리의 버그 주변에서 작동했다.런타임 라이브러리가 호출에서 플래그를 잘못 설정함GlobalAlloc()그리고 컴파일러와 함께 컴파일러로 컴파일된 모든 애플리케이션은 따라서 행동을 나타낼 것이다.[5]
래스터 글꼴 무시
이것은 16진수 값을 갖는 호환성 비트 워드의 비트 #9이다.0x200, 상징적인 이름으로 알려져 있다.GACF_TTIGNORERASTERDUPE창문으로이 플래그는 크기가 같은 글꼴이 비트맵과 TrueType 글꼴로 모두 열거되지 않도록 한다.워드퍼펙트(WordPerfect)와 비주얼 베이직(Visual Basic)을 포함한 여러 응용 프로그램이 그 특정 상황을 올바르게 처리할 수 없었기 때문이었다.[5]
맨 위 창 무시
이 값은 16진수 값을 갖는 호환성 비트 워드의 비트 #3입니다.0x8, 상징적인 이름으로 알려져 있다.GACF_IGNORETOPMOST창문으로이 플래그는 Windows 3.1에서 오류를 발생시킨 cc:Mail의 특정 문제를 수정한다.첫 번째 창문에 접근하는 것은GetWindow(HWND,GW_HWND_FIRST)그것을 방금 시작했던 어플리케이션의 창문으로 돌려줄 것이다.WinExec(). 그러나 "가장 위"의 창구 개념을 도입한 윈도 3.1에서는, 이것은 더 이상 사실이 아니었다.이 플래그는 특정 API 요청이 있을 때 Windows 3.1이 대부분의 창을 건너뛰게 만들었다.[5]
모듈별 해킹
HRGN 1 없음
이것은 16진수 값을 갖는 호환성 비트 워드의 비트 #16이다.0x10000, 상징적인 이름으로 알려져 있다.GACF_NOHRGN1창문으로이 플래그는 윈도 3.1에 고정되어 있던 윈도 3.0에 있던 버그를 다시 설치한다.마이크로소프트 드로우와 같은 여러 응용 프로그램이 버그 자체에서 작동하고 버그가 제거되면 제대로 작동하지 않기 때문에 그렇게 했다.버그는 의 반환값의 오류였다.GetUpdateRect()기능, 즉 특정 상황(전체 창이 유효하지 않은 경우)에서 업데이트 사각형의 좌표를 원래대로 논리 좌표가 아닌 창 좌표로 되돌릴 수 있다.Windows 3.1에서는 항상 업데이트 사각형을 논리 좌표로 반환했다.버그 주변에서 작동한 애플리케이션은 스스로 좌표 변환을 수행하여 버그 주변에서 작동하며, 결국 윈도 3.1에서 창의 잘못된 부분을 업데이트하게 된다.[5]
하나의 그래픽 밴드 및 인쇄 탈출 사용
이 값은 16진수 값을 갖는 호환성 비트 워드의 비트 #2입니다.0x4, 상징적인 이름으로 알려져 있다.GACF_ONELANDGRXBAND창문으로이 플래그는 가로 모드에서 인쇄할 때 Windows 3.1이 단일 그래픽 밴드를 사용하도록 하고, 해당 밴드에 필요한 만큼의 메모리를 소비하며, 밴드에 맞지 않는 모든 콘텐츠를 폐기한다.[5]
클립 형제 제외
16진수 값을 갖는 호환성 비트 워드의 비트 #14 입니다.0x4000, 상징적인 이름으로 알려져 있다.GACF_SUBTRACTCLIPSIBS창문으로이 플래그로 인해 윈도우즈 3.1은 윈도우즈 무효화를 다음이 없는 최상위 수준 창에 대해 다르게 처리하게 된다.WS_CLIPSIBLINGS창 스타일 세트 및 하위 창.(다시 말해:대화 상자 및 대화 상자 제어에 영향을 미친다.)플래그가 설정된 경우 Windows(윈도우)는 다른 하위 창 아래(z-order)를 무효화하지 않는다.WS_CLIPSIBLINGS아동용 창문플래그의 주요 원인은 최상위 수준의 창(시스템 기본 콤보 상자 구현)이 아닌 자체 콤보 박스를 하위 창으로 구현한 Lotus Notes 2.1과 같은 애플리케이션이었다.이 플래그를 설정하면 이러한 창과 관련된 이상한 표시 문제가 사라진다.[5]
다중 인쇄 밴드 지원
이것은 16진수 값을 갖는 호환성 비트 워드의 비트 #5이다.0x20, 상징적인 이름으로 알려져 있다.GACF_MULTIPLEBANDS창문으로이 플래그는 하나의 밴드로 충분할 때에도 윈도우 3.1이 인쇄를 위해 항상 여러 개의 밴드를 사용하도록 한다.이것은 프리랜서 그래픽스(Freelance Graphics)에서 한 밴드만 존재한다면 전체 페이지라고 가정할 수 있는 문제를 해결하기 위해서였고, 그래픽을 인쇄하려고도 하지 않았다.Windows 3.1에서 범용 프린터 드라이버는 때때로 단일 대역으로 텍스트와 그래픽을 모두 처리할 수 있다.복수의 대역의 사용을 강요함으로써, 이것이 프리랜서 그래픽스에 야기할 문제를 피했다.[5]
TT 글꼴은 장치 글꼴이다.
이것은 16진수 값을 갖는 호환성 비트 워드의 비트 #4이다.0x10, 상징적인 이름으로 알려져 있다.GACF_CALLTTDEVICE창문으로이 플래그는 Windows 3.1이 항상DEVICE_FONTTYPEWindows를 사용하여 열거된 TrueType 글꼴에 플래그 지정EnumFont()API. 이는 AmiPro와 WordPerfect를 포함한 응용 프로그램의 문제를 해결하기 위한 것으로, 두 가지 모두 프린터에서 사용할 수 있는 TrueType 글꼴이 모두 장치 거주일 것이라고 가정했다.[5]
Windows 3.1 팔레트 동작

추가 플래그

윈도 3.1은 20개의 응용 프로그램 호환성 플래그를 정의했다.[5]Windows 95 및 98은 추가로 11개의 플래그를 정의했으며, 기술 자료 문서에는 문서화되지 않았으며 Windows.h에는 기호 상수 이름이 할당되지 않았다. 이 플래그는 호환 가능 설정의 "고급 옵션" 메뉴를 통해 액세스할 수 있는 나머지 옵션이다.[6]

16가지 컬러 브러시 캐시 및 55ms 타이머 사용 안 함
이것은 16진수 값을 갖는 호환성 비트 워드의 비트 #29이다.0x20000000.
EMF 스풀링 사용 안 함
이것은 16진수 값을 갖는 호환성 비트 워드의 비트 #26이다.0x4000000.
글꼴 연결 사용 안 함
16진수 값을 갖는 호환성 비트 워드의 비트 #24 입니다.0x1000000.
저널링할 때 입력 스레드를 첨부하지 마십시오.SetActiveWindow==SetForeGroundWindow
이것은 16진수 값을 갖는 호환성 비트 워드의 비트 #28이다.0x10000000.
특정 장애를 종료/무시하거나 명령줄을 삭제하지 않음
16진수 값을 갖는 호환성 비트 워드의 비트 #25 입니다.0x2000000.
3.x UI 기능 사용
이것은 16진수 값을 갖는 호환성 비트 워드의 비트 #27이다.0x8000000.
강제 Win31 프린터 개발 모드 크기
이것은 16진수 값을 갖는 호환성 비트 워드의 비트 #23이다.0x800000.
스택 크기 증가
이것은 16진수 값을 갖는 호환성 비트 워드의 비트 #22이다.0x400000.
장치 캡/아니오에 대해 거짓말SetDIBits확인
이것은 16진수 값을 갖는 호환성 비트 워드의 #20 비트 입니다.0x100000.
Windows 버전에 대해 거짓말
이것은 16진수 값을 갖는 호환성 비트 워드의 비트 #21이다.0x200000.
win.ini의 글꼴 미러링
이 값은 16진수 값을 갖는 호환성 비트 워드의 비트 #30입니다.0x40000000.

참조

  1. ^ a b c d e f g h Tim O'Reilly; Troy Mott & Walter J. Glenn (1999). "Make Compatible". Windows 98 in a Nutshell. O'Reilly. pp. 227–228. ISBN 978-1-56592-486-4.
  2. ^ Charles J. Brooks (2002). A+ Certification: (Exams 220-221, 220-222) (4 ed.). Que. pp. 799. ISBN 978-0-7897-2844-9.
  3. ^ a b c Ron Petrusha (1 August 1999). "Where Am I Running?". windowsdevcenter.com. O'Reilly Media, Inc.
  4. ^ a b c Ed Bott and Woody Leonhard. "Running Older Apps". 95 Only Undocumented Secrets. Ziff-Davis Publishing Company.
  5. ^ a b c d e f g h i j k l m n o p q r s Andrew Schulman; David Maxey & Matt Pietrek (1992). "KERNEL: Windows system services". Undocumented Windows. Addison-Wesley. pp. 244–250. ISBN 0-201-60834-0.
  6. ^ Rick Coogle. "Windows' 16-bit Program Compatibility Hacks". Archived from the original on 2 September 2007. Retrieved 10 February 2009. {{cite journal}}:Cite 저널은 필요로 한다. journal=(도움말)

추가 읽기