Archive for the ‘Win32 API’ Category

  1. Hello, Win32 API(JScript.NET) World!

    Posted on 3月 7th, 2013 by cx20

    Win32 API(JScript.NET)

    Win32 API は、Windows の機能にアクセスする為の API(Application Programming Interface)である。
    以下は JScript.NET による Win32 API 呼出しの例となっている。

    ソースコード

    import System;
    import System.Reflection;
    import System.Reflection.Emit;
    import System.Runtime;
    import System.Text;
     
    // Invoke a Win32 P/Invoke call.
    // http://www.leeholmes.com/blog/2006/07/21/get-the-owner-of-a-process-in-powershell-%e2%80%93-pinvoke-and-refout-parameters
    function InvokeWin32(dllName:String, returnType:Type,
      methodName:String, parameterTypes:Type[], parameters:Object[])
    {
      // Begin to build the dynamic assembly
      var domain = AppDomain.CurrentDomain;
      var name = new System.Reflection.AssemblyName('PInvokeAssembly');
      var assembly = domain.DefineDynamicAssembly(name, AssemblyBuilderAccess.Run);
      var module = assembly.DefineDynamicModule('PInvokeModule');
      var type = module.DefineType('PInvokeType',TypeAttributes.Public + TypeAttributes.BeforeFieldInit);
     
      // Define the actual P/Invoke method
      var method = type.DefineMethod(methodName, MethodAttributes.Public + MethodAttributes.HideBySig + MethodAttributes.Static + MethodAttributes.PinvokeImpl, returnType, parameterTypes);
     
      // Apply the P/Invoke constructor
      var ctor = System.Runtime.InteropServices.DllImportAttribute.GetConstructor([Type.GetType("System.String")]);
      var attr = new System.Reflection.Emit.CustomAttributeBuilder(ctor, [dllName]);
      method.SetCustomAttribute(attr);
     
      // Create the temporary type, and invoke the method.
      var realType = type.CreateType();
      return realType.InvokeMember(methodName, BindingFlags.Public + BindingFlags.Static + BindingFlags.InvokeMethod, null, null, parameters);
    }
     
    function MessageBox(hWnd:Int32, lpText:String, lpCaption:String, uType:Int32) 
    { 
       var parameterTypes:Type[] = [Type.GetType("System.Int32"),Type.GetType("System.String"),Type.GetType("System.String"),Type.GetType("System.Int32")];
       var parameters:Object[] = [hWnd, lpText, lpCaption, uType];
     
       return InvokeWin32("user32.dll", Type.GetType("System.Int32"), "MessageBoxA", parameterTypes,  parameters );
    } 
     
    MessageBox( 0, "Hello, Win32 API World!", "Hello, World!", 0 );

    コンパイル方法

    C:¥> jsc Hello.js

    実行結果

    ---------------------------
    Hello, World!
    ---------------------------
    Hello, Win32 API World!
    ---------------------------
    OK   
    ---------------------------
  2. Hello, Win32 API(Jasmin) World!

    Posted on 1月 16th, 2013 by cx20

    Win32 API(Jasmin)

    Win32 API は、Windows の機能にアクセスする為の API(Application Programming Interface)である。
    以下は Jasmin にて SWT の非公開 API を使用した Win32 API 呼出しの例となっている。

    ソースコード

    ; Produced by NeoJasminVisitor (tinapoc)
    ; http://tinapoc.sourceforge.net
    ; The original JasminVisitor is part of the BCEL
    ; http://jakarta.apache.org/bcel/
    ; Sat Dec 08 23:04:58 JST 2012
     
    .bytecode 51.0
    .source Hello.java
    .class public Hello
    .super java/lang/Object
     
     
    .method public ()V
        .limit stack 1
        .limit locals 1
        .var 0 is this LHello; from Label0 to Label1
     
        Label0:
    .line 4
           0: aload_0
           1: invokespecial java/lang/Object/()V
     
        Label1:
           4: return
     
    .end method
     
     
    .method public static main([Ljava/lang/String;)V
        .limit stack 5
        .limit locals 3
        .var 0 is arg0 [Ljava/lang/String; from Label0 to Label1
     
     
        Label0:
    .line 6
           0: new org/eclipse/swt/internal/win32/TCHAR
           3: dup
           4: iconst_0
           5: ldc "Hello, Win32 API World!"
           7: iconst_1
           8: invokespecial org/eclipse/swt/internal/win32/TCHAR/(ILjava/lang/String;Z)V
          11: astore_1
     
        .line 7
          12: new org/eclipse/swt/internal/win32/TCHAR
          15: dup
          16: iconst_0
          17: ldc "Hello, World"
          19: iconst_1
          20: invokespecial org/eclipse/swt/internal/win32/TCHAR/(ILjava/lang/String;Z)V
          23: astore_2
     
        .line 8
          24: iconst_0
          25: aload_1
          26: aload_2
          27: iconst_0
          28: invokestatic org/eclipse/swt/internal/win32/OS/MessageBox(ILorg/eclipse/swt/internal/win32/TCHAR;Lorg/eclipse/swt/internal/win32/TCHAR;I)I
          31: pop
     
        Label1:
    .line 9
          32: return
     
    .end method

    コンパイル&実行方法

    C:¥> jasmin Hello.j
    C:¥> java -cp org.eclipse.swt.win32.win32.x86_3.6.1.v3655c.jar;. Hello

    実行結果

    ---------------------------
    Hello, World!
    ---------------------------
    Hello, Win32 API World!
    ---------------------------
    OK   
    ---------------------------
  3. Hello, Win32 API(Rhino) World!

    Posted on 1月 14th, 2013 by cx20

    Win32 API(Rhino)

    Win32 API は、Windows の機能にアクセスする為の API(Application Programming Interface)である。
    以下は Rhino にて SWT の非公開 API を使用した Win32 API 呼出しの例となっている。

    ソースコード

    importPackage(org.eclipse.swt.internal.win32);
     
    var lpText = new TCHAR(0, "Hello, Win32 API World!", true);
    var lpCaption = new TCHAR(0, "Hello, World", true);
    OS.MessageBox(0, lpText, lpCaption, OS.MB_OK );

    実行方法

    C:¥> jrunscript -cp org.eclipse.swt.win32.win32.x86_3.6.1.v3655c.jar;. Hello.js

    実行結果

    ---------------------------
    Hello, World!
    ---------------------------
    Hello, Win32 API World!
    ---------------------------
    OK   
    ---------------------------
  4. Hello, Win32 API(Tcl/Java) World!

    Posted on 1月 13th, 2013 by cx20

    Win32 API(Tcl/Java)

    Win32 API は、Windows の機能にアクセスする為の API(Application Programming Interface)である。
    以下は Tcl/Java にて SWT の非公開 API を使用した Win32 API 呼出しの例となっている。

    ソースコード

    package require java
     
    java::import org.eclipse.swt.internal.win32.OS
    java::import org.eclipse.swt.internal.win32.TCHAR
     
    set lpText [java::new {TCHAR int java.lang.String boolean} 0 "Hello, Win32 API World!" true]
    set lpCaption [java::new {TCHAR int java.lang.String boolean} 0 "Hello, World" true]
    java::call OS MessageBox 0 $lpText $lpCaption [java::field OS MB_OK]

    実行方法

    C:¥> SET CLASSPATH=org.eclipse.swt.win32.win32.x86_3.6.1.v3655c.jar;%CLASSPATH%
    C:¥> jaclsh Hello.tcl

    実行結果

    ---------------------------
    Hello, World!
    ---------------------------
    Hello, Win32 API World!
    ---------------------------
    OK   
    ---------------------------
  5. Hello, Win32 API(BeanShell) World!

    Posted on 1月 12th, 2013 by cx20

    Win32 API(BeanShell)

    Win32 API は、Windows の機能にアクセスする為の API(Application Programming Interface)である。
    以下は BeanShell にて SWT の非公開 API を使用した Win32 API 呼出しの例となっている。

    ソースコード

    import org.eclipse.swt.internal.win32.OS;
    import org.eclipse.swt.internal.win32.TCHAR;
     
    TCHAR lpText = new TCHAR(0, "Hello, Win32 API World!", true);
    TCHAR lpCaption = new TCHAR(0, "Hello, World", true);
    OS.MessageBox(0, lpText, lpCaption, OS.MB_OK );

    実行方法

    C:¥> SET CLASSPATH=bsh-2.0b4.jar;org.eclipse.swt.win32.win32.x86_3.6.1.v3655c.jar;%CLASSPATH%
    C:¥> java bsh.Interpreter Hello.bsh

    実行結果

    ---------------------------
    Hello, World!
    ---------------------------
    Hello, Win32 API World!
    ---------------------------
    OK   
    ---------------------------
  6. Hello, Win32 API(Clojure) World!

    Posted on 1月 11th, 2013 by cx20

    Win32 API(Clojure)

    Win32 API は、Windows の機能にアクセスする為の API(Application Programming Interface)である。
    以下は Clojure にて SWT の非公開 API を使用した Win32 API 呼出しの例となっている。

    ソースコード

    (import 
      (org.eclipse.swt.internal.win32 OS)
      (org.eclipse.swt.internal.win32 TCHAR))
     
    (def lpText
      (TCHAR. 0 "Hello, Win32 API World!" true))
     
    (def lpCaption 
      (TCHAR. 0 "Hello, World" true))
     
    (. OS (MessageBox 0 lpText lpCaption OS/MB_OK))

    実行方法

    C:¥> SET CLASSPATH=org.eclipse.swt.win32.win32.x86_3.6.1.v3655c.jar;%CLASSPATH%
    C:¥> clj Hello.clj

    実行結果

    ---------------------------
    Hello, World!
    ---------------------------
    Hello, Win32 API World!
    ---------------------------
    OK   
    ---------------------------
  7. Hello, Win32 API(Jython) World!

    Posted on 1月 10th, 2013 by cx20

    Win32 API(Jython)

    Win32 API は、Windows の機能にアクセスする為の API(Application Programming Interface)である。
    以下は Jython にて SWT の非公開 API を使用した Win32 API 呼出しの例となっている。

    ソースコード

    from org.eclipse.swt.internal.win32 import OS
    from org.eclipse.swt.internal.win32 import TCHAR
     
    lpText = TCHAR(0, "Hello, Win32 API World!", True)
    lpCaption = TCHAR(0, "Hello, World", True)
    OS.MessageBox(0, lpText, lpCaption, OS.MB_OK )

    実行方法

    C:¥> SET CLASSPATH=org.eclipse.swt.win32.win32.x86_3.6.1.v3655c.jar;%CLASSPATH%
    C:¥> jython Hello.py

    実行結果

    ---------------------------
    Hello, World!
    ---------------------------
    Hello, Win32 API World!
    ---------------------------
    OK   
    ---------------------------
  8. Hello, Win32 API(JRuby) World!

    Posted on 1月 9th, 2013 by cx20

    Win32 API(JRuby)

    Win32 API は、Windows の機能にアクセスする為の API(Application Programming Interface)である。
    以下は JRuby にて SWT の非公開 API を使用した Win32 API 呼出しの例となっている。

    ソースコード

    require 'java'
    require 'org.eclipse.swt.win32.win32.x86_3.6.1.v3655c.jar'
     
    import 'org.eclipse.swt.internal.win32.OS'
    import 'org.eclipse.swt.internal.win32.TCHAR'
     
    @lpText = TCHAR.new(0, "Hello, Win32 API World!", true)
    @lpCaption = TCHAR.new(0, "Hello, World", true)
    OS::MessageBox(0, @lpText, @lpCaption, OS::MB_OK )

    実行方法

    C:¥> jruby Hello.rb

    実行結果

    ---------------------------
    Hello, World!
    ---------------------------
    Hello, Win32 API World!
    ---------------------------
    OK   
    ---------------------------
  9. Hello, Win32 API(Scala) World!

    Posted on 1月 8th, 2013 by cx20

    Win32 API(Scala)

    Win32 API は、Windows の機能にアクセスする為の API(Application Programming Interface)である。
    以下は Scala にて SWT の非公開 API を使用した Win32 API 呼出しの例となっている。

    ソースコード

    import org.eclipse.swt.internal.win32.OS
    import org.eclipse.swt.internal.win32.TCHAR
     
    object Hello {
        def main (args: Array[String]) {
            var lpText = new TCHAR(0, "Hello, Win32 API World!", true)
            var lpCaption = new TCHAR(0, "Hello, World", true)
            OS.MessageBox(0, lpText, lpCaption, OS.MB_OK )
        }
    }

    実行方法

    C:¥> scala -cp org.eclipse.swt.win32.win32.x86_3.6.1.v3655c.jar;. Hello.scala

    実行結果

    ---------------------------
    Hello, World!
    ---------------------------
    Hello, Win32 API World!
    ---------------------------
    OK   
    ---------------------------
  10. Hello, Win32 API(Groovy) World!

    Posted on 1月 7th, 2013 by cx20

    Win32 API(Groovy)

    Win32 API は、Windows の機能にアクセスする為の API(Application Programming Interface)である。
    以下は Groovy にて SWT の非公開 API を使用した Win32 API 呼出しの例となっている。

    ソースコード

    import org.eclipse.swt.internal.win32.OS
    import org.eclipse.swt.internal.win32.TCHAR
     
    class Hello {
        static void main (args) {
            def lpText = new TCHAR(0, "Hello, Win32 API World!", true)
            def lpCaption = new TCHAR(0, "Hello, World", true)
            OS.MessageBox(0, lpText, lpCaption, OS.MB_OK )
        }
    }

    コンパイル&実行方法

    C:¥> groovy -cp org.eclipse.swt.win32.win32.x86_3.6.1.v3655c.jar;. Hello.groovy

    実行結果

    ---------------------------
    Hello, World!
    ---------------------------
    Hello, Win32 API World!
    ---------------------------
    OK   
    ---------------------------