做乙個小工具,想把一些輸出資訊使用控制台來顯示。一種方式,採用log4net;第二種方式,自己編碼。
網上查了一些資料,需要用win32api來實現。實現**如下:
1、import api
**[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);
2、winfom**
**allocconsole();
intptr windowhandle
=findwindow(
null
, process.getcurrentprocess().mainwindowtitle
/*process.getcurrentprocess().mainmodule.
*/);
intptr closemenu
=getsystemmenu(windowhandle, intptr.zero);
showwindow(windowhandle, 1);
//顯示
uint
sc_close
=0xf060;//
移除關閉按鈕
userapihelper.removemenu(closemenu, sc_close,
0x0);
consoletitle
=this
.text +"
-輸出控制台";
console.title
=consoletitle;
console.foregroundcolor
=consolecolor.red;
console.writeline(
"歡迎!!!");
注意的一點是使用process.getcurrentprocess().mainwindowtitle 來獲取視窗控制代碼,如果使用filename,當你通過桌面快捷方式啟動程式時,無法獲取到視窗控制代碼,從而無法移除關閉按鈕。
原因:在快捷方式啟動程式時,視窗的filename不包含exe所在路徑,而直接執行exe檔案filename顯示的是exe的全路徑。
效果圖:
Winform程式中呼叫cmd命令
messagebox.show command命令 output catch exception a 上面注釋掉的幾行,網上有說呼叫的時候是需要機器的使用者名稱和密碼的,但是經測試,不用也可以。ps 遇到的乙個問題,若將上面的視窗顯示設為false process.startinfo.createn...
winform呼叫cmd命令
string str console.readline system.diagnostics.process p new system.diagnostics.process p.startinfo.filename cmd.exe p.startinfo.useshellexecute false...
winform呼叫webservice假死怎麼解決
主線程呼叫外部web service,沒有返回時,主線程阻塞了,介面肯定假死 耗時操作都是要在工作執行緒裡面執行的。一般情況下winform呼叫webservice時步驟 1新增服務引用 高階 新增web引用 填寫url 新增web引用即可完成對webservice的引用 讓vs.net環境來為我們...