Winform中嵌入Console控制台

2022-02-25 08:12:29 字數 2031 閱讀 8256

最近做了小軟體,裡面要用到實時顯示日誌;

本來呢,是自己做個累似的視窗,原理就是用定時讀取文字檔案,但是發現如果文字檔案到了100k的時候,程式會顯得很卡;

所以不得已還是得用console控制台。

目前來說,網上有兩種方法,一種是將專案的輸出改成控制台方式;另一種就是呼叫win32 api來執行控制台...

本人更傾向於第二種方式;

但是在做的過程中碰到了乙個問題,就是關閉控制台的話,整個程式就關閉掉了...這個問題我還無法解決。為了避免直接點選關閉按鈕,在程式中把叉按鈕灰掉了,這樣就可以避免掉點選了~!

話不多說。貼原始碼

乙個呼叫win32 api的類

[c-sharp]view plain

copy

print

?

[dllimport("

kernel32.dll

")]

private

static

extern

bool allocconsole(); //

啟動視窗

[dllimport("

kernel32.dll

", entrypoint = "

freeconsole

")]

private

static

extern

bool freeconsole(); //

釋放視窗,即關閉

[dllimport("

user32.dll

", entrypoint = "

findwindow

")]

extern

static intptr findwindow(string lpclassname, string lpwindowname);//

找出執行的視窗

[dllimport(

"user32.dll

", entrypoint = "

getsystemmenu

")]

extern

static intptr getsystemmenu(intptr hwnd, intptr brevert); //

取出視窗執行的選單

[dllimport(

"user32.dll

", entrypoint = "

removemenu

")]

extern

static intptr removemenu(intptr hmenu, uint uposition, uint uflags); //

灰掉按鈕

呼叫方法如下

[c-sharp]view plain

copy

print

?

allocconsole();  

intptr windowhandle = findwindow(null

, process.getcurrentprocess().mainmodule.filename);

intptr closemenu =getsystemmenu(windowhandle, intptr.zero);

uint sc_close = 0xf060

; removemenu(closemenu, sc_close,

0x0);

for(int i=0;i<100;i++)

另外還可以呼叫 如下方法來改變標題的名稱!

[c-sharp]view plain

copy

print

?

[dllimport("

kernel32.dll

")]

public

static

extern

bool setconsoletitle(string strmessage);

如何在WPF中嵌入Winform控制項

當時把wpf的控制項canvas的handle傳給c 的專案去重新整理影象的時候發現最後重新整理的是整個wpf頁面而不是控制項所在的區域,還不知道有什麼辦法可以解決。不過可以在wpf中嵌入winform的影象控制項picturebox去做重新整理。嵌入方法 1.在專案的references中加入wi...

winform 嵌入 外部 exe窗體

using system using system.collections.generic using system.componentmodel using system.drawing using system.data using system.text using system.window...

在WinForm應用程式中嵌入WPF控制項

我們知道,在 wpf介面上新增 winform 的控制項需要使用 windowsformhost 類。而在 winform 介面上新增 wpf控制項該如何做呢?有沒有類似的類呢?明顯是有的,elementhost 就是為了在 winform 應用程式中嵌入 wpf元素而定義的。它繼承自system....