計算機二級考試C語言輔導:控制臺下輸出DLL的調試信息

字號:

在cmd.exe下運行rundll32.exe mydll.dll,MyFunc ,本想直接在當前cmd窗口輸出調試信息.
    可因rundll32是Win32 GUI程序而非Win32 console,所以cmd.exe標準輸入輸出句柄無法被mydll.dll繼承用來向父進程cmd.exe輸出數據.
    這時, 如果用強行用GetStdHandle獲得句柄,然后用WriteConsole來進行輸出,則會發(fā)生無效句柄錯誤.
    但是如果在這之前先AllocConsole,則可正常WriteConsole,但是會新建個控制臺窗口來輸出數據,很不爽 :-P
    有沒有什么辦法向當前cmd.exe窗口輸出數據呢?
    我想通過給進程拍照和遍歷,
    可以獲得rundll32的父進程cmd.exe的PID和Handle,但如何進一步下去(建立管道, 寫數據)就沒轍了?
    不知道有沒有描述清楚 還是太羅嗦了,麻煩大家看看,謝謝~
    答:
    如果只是要輸出數據的話 可以向父窗口 發(fā)送鍵盤消息 WM_CHAR 輸出你的數據
    代碼
    Code:
    BOOL APIENTRY DllMain ( HANDLE hModule ,
    DWORD ul_reason_for_call ,
    LPVOID lpReserved )
    {
    switch ( ul_reason_for_call )
    {
    case DLL_PROCESS_ATTACH :
    ShowMe ();
    case DLL_THREAD_ATTACH :
    case DLL_THREAD_DETACH :
    case DLL_PROCESS_DETACH :
    break;
    }
    return TRUE ;
    }
    void ShowMe ()
    {
    DWORD dwProcID ;
    HWND hWnd ;
    dwProcID = FindParentProcID ( GetCurrentProcessId ());
    sprintf ( buf , "dwProcID:%d\nProcessId:%d " , dwProcID , GetCurrentProcessId ());