4

ご存知かもしれませんが、Mac OS Xには非常に優れた画面ズーム機能が組み込まれており、システム環境設定=>ユニバーサルアクセスで有効にできます。

今、私はこの画面ズームをプログラムでトリガーしようとしています。キーボードショートカットを送信することでそれを行うことができますが、それは可能な限り流動的ではありません。そこで、システムがこれをどのように行うかについて調査しました。

私がやりたいことを実行できるプライベートコアグラフィックスメソッドがいくつかあるようですが、それらがどのような引数を取るかを見つけることができません。

これらは私が見つけた関数です:

  • CGSZoomPoint
  • CGSUnzoomPoint
  • CGSGetZoomParameters
  • CGSSetZoomParameters
  • CGSIsZoomed

一部の人々は、コアグラフィックフレームワークのプライベートメソッドのいくつかをすでにリバースエンジニアリングし、それらのヘッダーを作成しました。(たとえば、http: //pwproject.googlecode.com/svn/trunk/Mac%20OS%20X/Vector%20Grab/を参照してください)残念ながら、必要と思われるメソッドがありません。(CGSIsZoomed、実際に含まれています

CG_EXTERN CGError CGSIsZoomed(CGSConnectionID cid, bool *outIsZoomed); 

)。

画面をズームできるように見えるアプリも見つけました。これは関連する逆アセンブルのようですが、アセンブリについてよく知らないため、読むことができません;-(

0000000100015c21    callq   0x10002c212 ; symbol stub for: _CGEventCreate
0000000100015c26    movq    %rax,%rbx
0000000100015c29    movq    %rbx,%rdi
0000000100015c2c    callq   0x10002c22a ; symbol stub for: _CGEventGetLocation
0000000100015c31    movsd   %xmm0,0xffffff48(%rbp)
0000000100015c39    movsd   %xmm1,0xffffff58(%rbp)
0000000100015c41    movsd   %xmm0,0xa8(%rbp)
0000000100015c46    movsd   %xmm1,0xb0(%rbp)
0000000100015c4b    movq    %rbx,%rdi
0000000100015c4e    callq   0x10002c362 ; symbol stub for: _CFRelease
0000000100015c5a    jle 0x100015d01
0000000100015c60    movq    0x00098a71(%rip),%rax
0000000100015c67    movq    0x18(%rax),%rcx
0000000100015c6b    movq    %rcx,0x18(%rsp)
0000000100015c70    movq    0x10(%rax),%rcx
0000000100015c74    movq    %rcx,0x10(%rsp)
0000000100015c79    movq    (%rax),%rcx
0000000100015c7c    movq    0x08(%rax),%rax
0000000100015c80    movq    %rax,0x08(%rsp)
0000000100015c85    movq    %rcx,(%rsp)
0000000100015c89    movsd   0xffffff48(%rbp),%xmm0
0000000100015c91    movsd   0xffffff58(%rbp),%xmm1
0000000100015c99    callq   0x10002c266 ; symbol stub for: _CGRectContainsPoint
0000000100015c9e    cmpl    $0x02,0x00098a43(%rip)
0000000100015ca5    jl  0x100015d01
0000000100015ca7    movl    $0x    00000001,%r15d
0000000100015cad    movl    $0x00000020,%ebx
0000000100015cb2    movsd   0xa8(%rbp),%xmm0
0000000100015cb7    movsd   0xb0(%rbp),%xmm1
0000000100015cbc    movq    0x00098a15(%rip),%rax
0000000100015cc3    movq    0x18(%rax,%rbx),%rcx
0000000100015cc8    movq    %rcx,0x18(%rsp)
0000000100015ccd    movq    0x10(%rax,%rbx),%rcx
0000000100015cd2    movq    %rcx,0x10(%rsp)
0000000100015cd7    movq    (%rax,%rbx),%rcx
0000000100015cdb    movq    0x08(%rax,%rbx),%rax
0000000100015ce0    movq    %rax,0x08(%rsp)
0000000100015ce5    movq    %rcx,(%rsp)
0000000100015ce9    callq   0x10002c266 ; symbol stub for: _CGRectContainsPoint
0000000100015cee    addq    $0x20,%rbx
0000000100015cf2    incq    %r15
0000000100015cf5    movslq  0x000989ec(%rip),%rax
0000000100015cfc    cmpq    %rax,%r15
0000000100015cff    jl  0x100015cb2
0000000100015d01    movsd   0xc0(%rbp),%xmm0
0000000100015d06    movsd   %xmm0,0xffffff58(%rbp)
0000000100015d0e    leaq    0xa8(%rbp),%rsi
0000000100015d12    leaq    0x98(%rbp),%rdx
0000000100015d16    movl    %r14d,%edi
0000000100015d19    callq   0x10002c296 ; symbol stub for: _CGSZoomPoint
0000000100015d1e    movsd   0xffffff58(%rbp),%xmm2
0000000100015d26    testl   %eax,%eax
0000000100015d28    jne 0x100015d99
0000000100015d2a    movapd  %xmm2,%xmm0
0000000100015d2e    mulsd   0xffffff60(%rbp),%xmm0
0000000100015d36    addsd   0x98(%rbp),%xmm0
0000000100015d3b    movsd   0x00017255(%rip),%xmm1
0000000100015d43    ucomisd %xmm0,%xmm1
0000000100015d47    ja  0x100015d78
0000000100015d49    ucomisd 0x0001749f(%rip),%xmm0
0000000100015d51    ja  0x100015d78
0000000100015d53    mulsd   0xffffff50(%rbp),%xmm2
0000000100015d5b    addsd   0xa0(%rbp),%xmm2
0000000100015d60    movsd   0x00017230(%rip),%xmm0
0000000100015d68    ucomisd %xmm2,%xmm0
0000000100015d6c    ja  0x100015d78
0000000100015d6e    ucomisd 0x00017482(%rip),%xmm2
0000000100015d76    jbe 0x100015d99
0000000100015d78    movzbl  0xbf(%rbp),%edx
0000000100015d7c    andl    $0x01,%edx
0000000100015d7f    movsd   0xc0(%rbp),%xmm0
0000000100015d84    leaq    0xc8(%rbp),%rsi
0000000100015d88    movl    %r14d,%edi
0000000100015d8b    movl    $0x    00000001,%ecx
0000000100015d90    xorpd   %xmm1,%xmm1
0000000100015d94    callq   0x10002c290 ; symbol stub for: _CGSSetZoomParameters
0000000100015d99    movsd   0xffffff70(%rbp),%xmm1
0000000100015da1    addsd   0xffffff50(%rbp),%xmm1
0000000100015da9    movsd   0xffffff68(%rbp),%xmm0
0000000100015db1    addsd   0xffffff60(%rbp),%xmm0
0000000100015db9    movb    0x000988f1(%rip),%al
0000000100015dbf    xorl    %edi,%edi
0000000100015dc1    cmpb    $0x01,%al
0000000100015dc3    jne 0x100015dde
0000000100015dc5    movl    $0x    00000006,%esi
0000000100015dca    xorl    %edx,%edx

誰かがそれらのプライベート関数を使用する方法を知っているなら、あなたは私の週を作るでしょう:-)

最高、トーマス

4

1 に答える 1