golang1.8使用cgo获取进程是否假死

来源:互联网 发布:软件研发团队介绍 编辑:程序博客网 时间:2024/04/29 20:28
package mainimport (    "flag")/*#include <stdio.h>#include <windows.h>#include <Winuser.h>typedef struct EnumFunArg{    HWND      hWND;    DWORD    dwProcessId;}EnumFunArg,*LPEnumFunArg;BOOL CALLBACK lpEnumFunc(HWND hwnd, LPARAM lParam){    EnumFunArg  *pArg = (LPEnumFunArg)lParam;    DWORD  processId;    GetWindowThreadProcessId(hwnd, &processId);    if( processId == pArg->dwProcessId)    {        pArg->hWND = hwnd;        return FALSE;    }    return TRUE;}int ReturnWnd(DWORD processID){   BOOL re = FALSE;   EnumFunArg wi;   wi.dwProcessId = processID;   wi.hWND   =  NULL;   EnumWindows(lpEnumFunc,(LPARAM)&wi);   if(wi.hWND)   {        if (IsHungAppWindow(wi.hWND))        {            return 1;        }   }   else   {        return -1;   }    return 0;}*/import "C"func main() {    pid := flag.Int("p", 0, "-p 1001")    flag.Parse()    h := C.ReturnWnd(C.DWORD(*pid))    switch h {    case 0:        println("程序有响应")    case 1:        println("程序无响应")    case -1:        println("无法获取窗口")    }}
1 0
原创粉丝点击