去系统调用窗口

时间:2015-12-19 15:58:26

标签: go system-calls

我目前正试图在Go上使用user32.dll EnumWindows,但似乎无法正常工作

params

    {"variable"=>
      [{"id"=>68,
        "ed"=>5213,
        "lo_id"=>2192,
        "lo_name"=>"Arkan",
        "state"=>"created",
        "closed_at"=>nil,
        "unstarted"=>false,
        "crtal"=>0,
        "cas_eived"=>0,
        "or_payments"=>0,
        "cips"=>0,
        "g_sles"=>0,
        "ters"=>0,
        "itews"=>
         [{"id"=>615,
           "unit_re"=>{"id"=>708, "name"=>"each", "abbreviation"=>"ea", "quantity"=>"1.0", "stock_item_id"=>985, "default_for"=>["base"]},
           "pce"=>0,
           "nme"=>"1 Yer nant",
           "sol]unt"=>0,
           "cgory_id"=>nil,
           "caty_name"=>"Uncategorized",
           "sub_rows"=>nil,
           "prev_count"=>0,
           "preransfunt"=>0,
           "pre_nt"=>0,
           "staount"=>0,
           "actrt_count"=>0,
           "id_evecount"=>0,
           "minsfers_out_ount"=>0,
           "wasunt"=>0,
           "grunt"=>0,
           "ennt"=>0,
           "ovunt"=>0,
           "gont"=>0,
           "quane"=>1,
           "expunt"=>0,
           "goes"=>0,
           "staiance"=>0,
           "vance"=>0,
           "paramsToConvert"=>
            ["scount",
             "pent_transfer_in_count",
             "pent_transfer_out_count",
             "s_end_count",
             "o_count",
             "e_count",
             "g_count",
             "a_start_count",
             "m_transfers_in_count",
             "m_transfers_out_count",
             "g_count",
             "w_count",
             "s_count"]},
    "action"=>"batch_print",
     "controller"=>"s",
     "event_id"=>"53",
     "format"=>"pdf"
    }

调用EnumWindows会出现以下错误:

var(
    user32 = syscall.NewLazyDLL("user32.dll")
    procEnumWindows = user32.NewProc("EnumWindows")
)

func EnumWindows() int {
    ret, _, _ := procEnumWindows.Call(
        syscall.NewCallback(enumWindowsProc),
        uintptr(0),
    )
    return int(ret)
}

func enumWindowsProc(hwnd syscall.Handle, lparam uintptr) bool {
    return true
}

我不知道应该如何使用系统调用包......我似乎无法找到足够的文档

在MSDN文档页面上,它说回调应该返回一个BOOL,那就是我在做什么?

1 个答案:

答案 0 :(得分:3)

WinAPI中的

BOOL声明为typedef int BOOL。所以它与Go的bool不匹配。规格甚至没有提到它的大小。它可能只有1个字节,但它并没有说出来。您应该使用int32代替。