热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

鉤子注入失敗用GetLastError返回錯誤代號14280x0594沒有模組控制代碼,無法設定非本機勾點。

問題如提在下用C++寫了一個hook.dll檔LRESULT(__stdcallSetHook(HWNDhwnd44,HHOOKhThisHook,DWORDDWord))
問題如提 在下用C++寫了一個hook.dll檔 



LRESULT (__stdcall SetHook(HWND hwnd44,HHOOK hThisHook,DWORD DWord))
{
    g_hWnd = hwnd4;
    
    hThisHook = ::SetWindowsHookExW( WH_MSGFILTER,MessageProc,NULL,GetWindowThreadProcessId(hwnd4,NULL) );   // GetWindowThreadProcessId(hwnd4,NULL) 

    if ( hThisHook == NULL )
{

DWORD DWord = GetLastError() ;

MessageBox(NULL, L " 掛勾失敗" , L " 標題視窗掛勾失敗" , MB_OK);
 return FALSE ;
    }
        
    if ( hThisHook > NULL )
{
MessageBox(NULL, L " 恭喜你掛勾成功" , L " 標題視窗掛勾成功" , MB_OK);
 return FALSE ;
    }
return TRUE;
};


LRESULT CALLBACK MessageProc( int code,WPARAM wParam,LPARAM lParam)
{
    switch (code)
    {    
   case WM_PSD_ENVSTAMPRECT:
            lparamvalue = lParam;
    };
    return TRUE;

};



SetWindowsHookExW 的時候掛勾失敗  用GetLastError 去查看掛勾失敗返回了以下的信息:

錯誤代號1428 0x0594沒有模組控制代碼,無法設定非本機勾點。

請問這個要怎麼解決。

41 个解决方案

#1


SetWindowsHookExW第三个参数设置为MessageProc所在dll的基地址

#2


MessageProc所在dll的基地址   <<<  這個要怎麼找呢?

哪邊可以查到這個

#3


DllMain里面可以知道

#4


不好意思  我不曉得DllMain 做什麼的  我程式碼裡 沒有寫這個進去...

可以指導我這個DllMain  要在哪裡用嗎?

#5


HMODULE base;
BOOL WINAPI DllMain(
  HMODULE hinstDLL,
  DWORD fdwReason,
  LPVOID lpvReserved
)
{
if(fdwReason==1)base=hinstDLL;
return 1;
}
SetWindowsHookEx里面用base

#6


行了 目前已經成功的注入鉤子了  不過我想得到我注入的那個窗口的

WM_PSD_ENVSTAMPRECT 的lParam

我是在VB.net中調用的 


 Declare Function GetlParam Lib "hookps.dll" (ByVal lParam As IntPtr) As Integer

Private Sub Button6_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button6.Click

        GetlParam(lpm) '獲得lParam 數值
        TextBox10.Text = lpm

    End Sub




//----------------------------


long ( __stdcall GetlParam (LPARAM lParam))
{
lParam=lparamvalue;
return TRUE;
};


LRESULT  (CALLBACK __stdcall MessageProc(int code,WPARAM wParam,LPARAM lParam))
{
switch (code)
{
   case WM_PSD_ENVSTAMPRECT:
lparamvalue=lParam;
};
return TRUE; 

};




C++的dll則是像上面這樣寫,請問我沒接到lParam 的數值是因為我的鉤子類型用錯了嗎??

還是有其他原因, 我監控的對象是這個[img=http://social.microsoft.com/Forums/getfile/24035/][/img]

這個滾動條照msdn的說法應該可以用 WH_MSGFILTER 來接收 麻煩指點一下小弟 哪邊出錯了呢?

#7


首先确定消息能够被截获
然后lparamvalue=((PMSG)lParam)->lParam;
否则使用WM_CALLWNDPROC和WM_GETMESSAGE

#8




Lactoferrin 大大  你說的應該是像下面這樣吧!



LRESULT  (CALLBACK __stdcall MessageProc(int code,WPARAM wParam,LPARAM lParam))
{
switch (code)
{
   case WM_PSD_ENVSTAMPRECT:
lparamvalue=((PMSG)lParam)->lParam;

};
return TRUE; 

};


不過出現了一個怪問題 我在VB.net中調用  MessageProc 得到getlparamvalue 如下

 

Declare Function MessageProc Lib "hookps.dll" (ByVal code As Long, ByVal wParam As IntPtr, ByVal lParam As IntPtr) As Integer

Private Sub Button4_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button4.Click  '注入鉤子

        Dim hwnd0 As IntPtr = GetDesktopWindow()
        Dim hwnd1 As IntPtr = FindWindowEx(hwnd0, 0, "ThunderRT6FormDC", vbNullString) '找到fw 這個窗口
        Dim hwnd2 As IntPtr = FindWindowEx(hwnd1, 0, "Slider20WndClass", vbNullString)
        Dim um As Long
        Dim wpa As IntPtr
        Dim hookk As Object = 0
        Dim geterror As Long = 0
        Dim getlparamvalue As IntPtr
        Dim code As Long

        SetHook(hwnd2, hookk, geterror)  '插入鉤子
        If hookk = 0 Then

            'hookk = Err.LastDllError
            TextBox10.Text = geterror


        End If

        PaintHookProc(hwnd2, um, wpa, lpm)   '獲得鉤子數據
        MessageProc(code, vbNull, getlparamvalue)
        TextBox10.Text = getlparamvalue


    End Sub


這邊有顯示掛勾成功了, 但VB運行程式的時候卻出現在 DLL 'hookps.dll' 中找不到名稱為 'MessageProc' 的進入點。

我有用depend工具檢查過MessageProc 有導出函數成功了,怎麼還會出現此問題呢? 求解

#9


MessageProc是给钩子自动调用的,你去调用它干什么

#10


恩  知道了,在下一時迷糊了以為可以直接從MessageProc 就把信息

節取出來 。 

目前在下的寫法是這樣


LRESULT  (CALLBACK __stdcall MessageProc(int code,WPARAM wParam,LPARAM lParam))
{
switch (code)
{
case WM_PSD_ENVSTAMPRECT:
lparamvalue=((PMSG)lParam)->lParam;
};
 return TRUE;
};

long ( __stdcall GetlParam (LPARAM lParam))
{
lParam=lparamvalue;

return TRUE;
};


然後在VB裡直接調用GetlParam 函數 ,有傳出數值出來了,不過怎麼都一直是數字1阿

我滑軌都已經跑離1的點了,它還是回傳1回來。 這是怎麼一回事阿...

#11


LPARAM __stdcall GetlParam(void)
{
    return lparamvalue;
};

#12


嗨 Lactoferrin大大

不好意思 我直接把你給的代碼加進去 結果回傳值就都變成0 還是怪怪的 

沒有解決問題 還有我發現我鉤子卸除的部分好像也寫得怪怪的  希望能針對這兩個部份給予指導一下

這邊是C++的部分


LRESULT  (CALLBACK __stdcall MessageProc(int code,WPARAM wParam,LPARAM lParam))
{
switch (code)
{
case WM_PSD_ENVSTAMPRECT:
lparamvalue=((PMSG)lParam)->lParam;
};
 return TRUE;
};


LPARAM ( __stdcall GetlParam (void))
{

return lparamvalue;
};

LPARAM (__stdcall ReleaseHook(HHOOK hThisHook))            //  <<<<<
 if(hThisHook)
  {
   UnhookWindowsHookEx(hThisHook);
   hThisHook = NULL;
  }
 return TRUE;
}; 



然後下面是我在VB的部分


  

 Declare Function GetlParam Lib "hookps.dll" () As Integer
   Declare Function ReleaseHook Lib "hookps.dll" () As Long


 Private Sub Button6_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button6.Click

        TextBox10.Text = GetlParam()


    End Sub


    Private Sub Button5_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button5.Click

        ReleaseHook()

    End Sub


鉤子注入的部分 已經確定沒有問題了 目前就是回傳值回傳0 的問題 ,還有卸除鉤子時

會出現以下這個錯誤信息:

對 PInvoke 函式 'WindowsApplication1!WindowsApplication1.Form1::ReleaseHook' 的呼叫已使堆疊失去平衡。這可能是因為 Managed PInvoke 簽章和 Unmanaged 目標簽章不相符。請確認 PInvoke 簽章的呼叫慣例及參數與目標 Unmanaged 簽章是否相符。

請問這兩地方要怎麼修改?


下面是我用SPY++ 監控對象時的數據,提供給您做參考一下:

<00059> 000C094A S WM_PSD_ENVSTAMPRECT hDC:00000001 lprcEnvStamp:00000004 [wParam:00000001 lParam:00000004]<00060> 000C094A S WM_PAINT hdc:00000000 [wParam:00000000 lParam:00000000]
<00061> 000C094A S WM_PRINTCLIENT hdc:FB013AA6 uFlags:PRF_CLIENT | PRF_CHILDREN [wParam:FB013AA6 lParam:00000014]
<00062> 000C094A S message:0x2138 [使用者定義:WM_USER+7480] wParam:23014941 lParam:000C094A
<00063> 000C094A R message:0x2138 [使用者定義:WM_USER+7480] lResult:00000010
<00064> 000C094A S message:0x204E [使用者定義:WM_USER+7246] wParam:00000000 lParam:0012E75C
<00065> 000C094A R message:0x204E [使用者定義:WM_USER+7246] lResult:00000000
<00066> 000C094A R WM_PRINTCLIENT lResult:00000000
<00067> 000C094A R WM_PAINT lResult:00000000
<00068> 000C094A R WM_PSD_ENVSTAMPRECT fPreventDraw:False [lResult:00000000]
<00069> 000C094A S WM_PSD_PAGESETUPDLG wPaper:0000 wFlags:0 lppsd:00000000 [wParam:00000000 lParam:00000000]
<00070> 000C094A R WM_PSD_PAGESETUPDLG fPreventDraw:True [lResult:00000004]
<00071> 000C094A S WM_PSD_ENVSTAMPRECT hDC:00000001 lprcEnvStamp:00000005 [wParam:00000001 lParam:00000005]  

#13


看来你的安装钩子的线程和触发钩子的线程不在同一进程
因此你应该吧lparamvalue放在一个共享的section中

你vb中ReleaseHook少个参数

#14


lparamvalue 我有放到共享區段裡了, 你應該是說下面這樣吧

可是還是返回值0 !

 # pragma data_seg (".shared")

 HWND g_hWnd=0;
 HHOOK hThisHook=0;
 LPARAM lparamvalue=0;
 HHOOK hook=0;
 //HINSTANCE hmod=::LoadLibraryA("hookps.dll");
 
 // save the hook handle
//static UINT_PTR CALLBACK PaintHookProc(HWND hwnd, UINT uMsg, WPARAM wParam, LPARAM lParam);
//int GetWindowTextRemote(HWND hwnd,LPSTR lpString);  
//int ReleaseHook();

# pragma data_seg ()
# pragma comment (linker, "/section:.shared,RWS")



ReleaseHook 少一個參數,不加參數不可以動作嗎? 那該加什麼參數進去呢?

#15


你dll里面是
LPARAM (__stdcall ReleaseHook(HHOOK hThisHook))  
但vb里面是 Declare Function ReleaseHook Lib "hookps.dll" () As Long
应该是 Declare Function ReleaseHook Lib "hookps.dll" (byval IntPtr hThisHook) As UIntPtr
只要共享lparamvalue,其他的不要共享

你在dll里面把lparam打印出来

#16


Lactoferrin大大 你說的應該是像下面這樣吧

 

# pragma data_seg (".shared")



 LPARAM lparamvalue=0;


# pragma data_seg ()
# pragma comment (linker, "/section:.shared,RWS")
  HWND g_hWnd=0;
   HHOOK hThisHook=0;
    HHOOK hook=0;

LPARAM (__stdcall ReleaseHook(HHOOK hThisHook))                                                          //  <<<<<
 if(hThisHook)
  {
   UnhookWindowsHookEx(hThisHook);
   hThisHook = NULL;
   if (hThisHook == NULL)
   {
   MessageBox(NULL, L"恭喜您 卸除成功", L"The success of the title search window", MB_OK);
return FALSE ;
}
    if( hThisHook > NULL )
{
MessageBox(NULL, L"鉤子沒有卸除喔", L"Linked the success of the title window", MB_OK);
return FALSE ;
}



  }
 return TRUE;
};



VB 部分

 

 Declare Function ReleaseHook Lib "hookps.dll" (ByVal hThisHook As IntPtr) As UIntPtr

    Private Sub Button5_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button5.Click

        Dim UNhook As IntPtr
        ReleaseHook(UNhook)

    End Sub



鉤子如果有卸除的話應該會跳出<鉤子沒有卸除喔>的窗口信息,可是我按下去之後什麼反應也沒有。

在dll里面把lparam打印出来 << 只能使用打印的嗎?  

因為這個lparam的數值我是想匯出給VB來做控制用的 有沒有什麼方法可以讓VB直接呼叫這個lparam的變數阿?



#17


用_ltow,MessageBox把lparam和hthishook的值显示出来看看

#18


_ltow,MessageBox 沒用過這個 

MessageBox 輸出變數不會用 , 可給個代碼嗎?

#19


wchar_t buf[32];
_ltow((long)hThisHook,buf,16);

MessageBoxW(0,buf,0,0);
_ltow((long)lParam,buf,16);

MessageBoxW(0,buf,0,0);
就像这样

#20


錯誤 1 error C3861: '_ltow': 找不到識別項 c:\users\administrator\desktop\資料夾\hookps\hookps\hookps.cpp 75

_ltow 找不到識別項 這個要怎麼解決阿?

#21


#include 

#22


恩 我把這行#include  加進去可以了

以下是我目前的寫法


LRESULT (__stdcall SetHook(HWND hwnd4,HHOOK hThisHook,DWORD DWord))
{
g_hWnd=hwnd4;
//hThisHook= ::SetWindowsHookExA( WH_CALLWNDPROC,(HOOKPROC) PaintHookProc,hDll,GetWindowThreadProcessId(hwnd4,NULL) );  //GetWindowThreadProcessId(hwnd4,NULL)
//hook = ::SetHook(hwnd4);

hThisHook= ::SetWindowsHookExW( WH_MSGFILTER,MessageProc,base,GetWindowThreadProcessId(hwnd4,NULL) );  //GetWindowThreadProcessId(hwnd4,NULL)
//DWORD __stdcall WINAPI GetLastError(void);



if( hThisHook == NULL )
{
//DWORD DWord = GetLastError() ; 
  LPVOID lpMsgBuf; 
    FormatMessage( 
     FORMAT_MESSAGE_ALLOCATE_BUFFER | 
     FORMAT_MESSAGE_FROM_SYSTEM | 
     FORMAT_MESSAGE_IGNORE_INSERTS, 
     NULL, 
     GetLastError(), 
     MAKELANGID(LANG_NEUTRAL, SUBLANG_DEFAULT), // Default language 
     (LPTSTR) &lpMsgBuf, 
     0, 
     NULL 
    ); 

   // Process any inserts in lpMsgBuf. 
    // ... 
     
    // Display the string. 
    MessageBox( NULL, (LPCTSTR)lpMsgBuf, L"Error", MB_OK | MB_ICONINFORMATION ); 
     
    // Free the buffer. 
    LocalFree( lpMsgBuf ); 

//----------------------------

//-------------------------
MessageBox(NULL, L"Hook failure", L"Title window hook fails", MB_OK);
//DWORD __stdcall WINAPI GetLastError(void);


return TRUE ;
}

if( hThisHook > NULL )
{
MessageBox(NULL, L"Congratulations on your successful hook", L"Linked the success of the title window", MB_OK);

wchar_t buf[32];
_ltow((long)hThisHook,buf,16);

MessageBoxW(0,buf,0,0);
//LPWSTR _ltow(LONG hThisHook,LPWSTR str,INT radix);
 //printf( "String of integer %d (radix 10): %s\n", hThisHook, str );

return FALSE ;
}
return TRUE;
};


LRESULT  (CALLBACK __stdcall MessageProc(int code,WPARAM wParam,LPARAM lParam))
{
switch (code)
{
case WM_PSD_ENVSTAMPRECT:
lparamvalue=((PMSG)lParam)->lParam;
wchar_t buf[32];
_ltow((long)lParam,buf,16);

MessageBoxW(0,buf,0,0);

};
 return TRUE;
};

LPARAM ( __stdcall GetlParam (void))
{
LPARAM lParam=0;

wchar_t buf[32];
_ltow((long)lParam,buf,16);

MessageBoxW(0,buf,0,0);


return lparamvalue;
};


鉤子的返回值都沒有固定 

訊息攔跳出 以下這些東西 

錯誤
7010423
錯誤
23700b1
錯誤
1210a05
錯誤
2cf0bf9

然後lParam返回數值都是0 這樣應該不是正常的吧 哪邊還需要考慮進去呢? 請求協助

#23


switch (code)
这里不是switch(code)
而是switch(((PMSG)lParam)->message)
如果不能截获,换用WH_CALLWNDPROC和WH_GETMESSAGE

#24


嗨 Lactoferrin大大 

我按照了您的建議把switch (code)改成switch(((PMSG)lParam)->message)

不過lParam返回的錯誤訊息依然是0  換了擷取鉤子類別 WH_CALLWNDPROC和WH_GETMESSAGE 也依然返回 0

此時我在懷疑會不會是  LPARAM lParam=0; << 初始值設 0的問題

我試著把設成這樣 LPARAM lParam=5  它訊息攔就會有返回值 5 

這是意味著我lParam沒有接受到返回的訊息的原因嗎? 求助了!!

#25


LRESULT  (CALLBACK __stdcall MessageProc(int code,WPARAM wParam,LPARAM lParam))
{
switch(((PMSG)lParam)->message)
{
case WM_PSD_ENVSTAMPRECT:
lparamvalue=((PMSG)lParam)->lParam;

};
 return lparamvalue;

};

LPARAM ( __stdcall GetlParam (void))
{


wchar_t buf[32];
_ltow((long)lparamvalue,buf,16);

MessageBoxW(0,buf,0,0);


return lparamvalue;
};

我試著把代碼改成這樣 不過似乎也沒用 好像根本沒有接受到信息值...

#26


你MessageProc不正确
应该返回CallNextHookEx(0,code,wParam,lParam);
如果是WH_CALLWNDPROC则PMSG要换成PCWPSTRUCT

#27


Lactoferrin 大大 您的意思是這樣嗎?  

LRESULT  (CALLBACK __stdcall MessageProc(int code,WPARAM wParam,LPARAM lParam))
{
switch(((PCWPSTRUCT)lParam)->message)
{
case WM_PSD_ENVSTAMPRECT:
lparamvalue=((PCWPSTRUCT)lParam)->lParam;

};
CallNextHookEx(0,code,wParam,lParam);
return TRUE;
};

這樣運行也是返回值0

#28


你把所有代码发到ribonucleic_acid@126.com给我看看

#29


恩  我發過去瞜  我的mail: ctjh900801@gmail.com


怕你沒收到我另外在上傳到skydrive上了

https://skydrive.live.com/redir.aspx?cid=105b2868cb2df559&resid=105B2868CB2DF559!190

#30


我是用VC++ 2010 編譯的! @@

#31


该回复于2011-10-28 08:26:53被版主删除

#32


請問你把代碼是發回我的信箱嗎?  我沒有看到耶@@

#33


是不是成了垃圾邮件

#34


被退信了,你把安全设置调一下

#35


哎,列宁同志真勤奋,一版看下来就发现你俩在版聊。。。

#36


G-MAIL 似乎不能調安全設置  

不然寄到163信箱吧 我也有163信箱

ctjh900801@163.com   

#37


学习HOOK!

#38


发了sss

#39


Lactoferrin大大 我收到了

剛測試了一下你的代碼 可以了  好像只有WH_CALLWNDPROC 這個鉤子才能抓得到數值

其他的都不行 這個是直接抓取16進制轉成10進制的數值了 直接省去了我一道麻煩 

如果要用其他的鉤子抓看看的話是不是只要把WndProc 換成 MsgProc 就可以了嗎?

像下面這樣:
 Protected Overrides Sub MsgProc (ByRef m As System.Windows.Forms.Message)
        If m.Msg = &H405 Then
            TextBox10.Text = m.LParam.ToString()
            TextBox11.Text = m.WParam.ToString()
        End If
        MyBase.WndProc(m)
    End Sub 

還有個問題就是下面這一行 0x405 這個數值是怎麼來的阿? 是隨便設的嗎?

PostMessageW(g_myhwnd,0x405,(WPARAM)lParam->hwnd,lParam->lParam);


#40


这里必须叫WndProc,因为是覆盖基类的WndProc,用于过滤所有消息
那个数值可以是0x405和0x7FFF之间任意一个

#41


謝了 Lactoferrin大大真專業!!

推荐阅读
  • Commit1ced2a7433ea8937a1b260ea65d708f32ca7c95eintroduceda+Clonetraitboundtom ... [详细]
  • Java容器中的compareto方法排序原理解析
    本文从源码解析Java容器中的compareto方法的排序原理,讲解了在使用数组存储数据时的限制以及存储效率的问题。同时提到了Redis的五大数据结构和list、set等知识点,回忆了作者大学时代的Java学习经历。文章以作者做的思维导图作为目录,展示了整个讲解过程。 ... [详细]
  • Android自定义控件绘图篇之Paint函数大汇总
    本文介绍了Android自定义控件绘图篇中的Paint函数大汇总,包括重置画笔、设置颜色、设置透明度、设置样式、设置宽度、设置抗锯齿等功能。通过学习这些函数,可以更好地掌握Paint的用法。 ... [详细]
  • 本文介绍了在go语言中利用(*interface{})(nil)传递参数类型的原理及应用。通过分析Martini框架中的injector类型的声明,解释了values映射表的作用以及parent Injector的含义。同时,讨论了该技术在实际开发中的应用场景。 ... [详细]
  • 本文讨论了在shiro java配置中加入Shiro listener后启动失败的问题。作者引入了一系列jar包,并在web.xml中配置了相关内容,但启动后却无法正常运行。文章提供了具体引入的jar包和web.xml的配置内容,并指出可能的错误原因。该问题可能与jar包版本不兼容、web.xml配置错误等有关。 ... [详细]
  • 花瓣|目标值_Compose 动画边学边做夏日彩虹
    篇首语:本文由编程笔记#小编为大家整理,主要介绍了Compose动画边学边做-夏日彩虹相关的知识,希望对你有一定的参考价值。引言Comp ... [详细]
  • 从壹开始前后端分离【 .NET Core2.0 +Vue2.0 】框架之六 || API项目整体搭建 6.1 仓储模式
    代码已上传Github+Gitee,文末有地址  书接上文:前几回文章中,我们花了三天的时间简单了解了下接口文档Swagger框架,已经完全解放了我们的以前的Word说明文档,并且可以在线进行调 ... [详细]
  • Opencv提供了几种分类器,例程里通过字符识别来进行说明的1、支持向量机(SVM):给定训练样本,支持向量机建立一个超平面作为决策平面,使得正例和反例之间的隔离边缘被最大化。函数原型:训练原型cv ... [详细]
  • PreparedStatement防止SQL注入
    添加数据:packagecom.hyc.study03;importcom.hyc.study02.utils.JDBCUtils;importjava.sql ... [详细]
  • JDK8新特性详细介绍[java入门]
    本文由java零基础入门栏目为大家介绍JDK8中的一些新特性,欢迎大家来纠错指正!JDK8中的新特性主要有:1、函数式编程;2、Lambda表达式;3、函数式接口;4、方法引用;5 ... [详细]
  • GetWindowLong函数
    今天在看一个代码里头写了GetWindowLong(hwnd,0),我当时就有点费解,靠,上网搜索函数原型说明,死活找不到第 ... [详细]
  • Iamtryingtomakeaclassthatwillreadatextfileofnamesintoanarray,thenreturnthatarra ... [详细]
  • 本文介绍了设计师伊振华受邀参与沈阳市智慧城市运行管理中心项目的整体设计,并以数字赋能和创新驱动高质量发展的理念,建设了集成、智慧、高效的一体化城市综合管理平台,促进了城市的数字化转型。该中心被称为当代城市的智能心脏,为沈阳市的智慧城市建设做出了重要贡献。 ... [详细]
  • 抽空写了一个ICON图标的转换程序
    抽空写了一个ICON图标的转换程序,支持png\jpe\bmp格式到ico的转换。具体的程序就在下面,如果看的人多,过两天再把思路写一下。 ... [详细]
  • python3 logging
    python3logginghttps:docs.python.org3.5librarylogging.html,先3.5是因为我当前的python版本是3.5之所 ... [详细]
author-avatar
llliu
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有