ซ่อนหน้าต่างคอนโซลในแอปพลิเคชันคอนโซล C #


106

สิ่งนี้คือฉันไม่ต้องการให้หน้าต่างคอนโซลปรากฏขึ้น ... แต่วิธีแก้ปัญหาควรทำงานอยู่ ประเด็นของฉันคือฉันต้องการให้แอปพลิเคชันทำงานในพื้นหลังโดยไม่มีหน้าต่างขึ้นมา


2
คุณสามารถให้ข้อมูลเพิ่มเติมเล็กน้อยเกี่ยวกับสิ่งที่แอปพลิเคชันควรทำ? ดูเหมือนว่ามันควรจะเป็นแอปพลิเคชัน service หรือ windows? ด้วยความรู้เพียงเล็กน้อยเกี่ยวกับจุดประสงค์เราจะสามารถช่วยได้มากขึ้นและแนะนำวิธีที่ดีที่สุดในการแก้ปัญหานี้
Dave

แอปพลิเคชั่น keylogger ฉันใช้บริการ windows แต่ไม่สามารถรับสถานะคีย์ในบริการ windows
ผู้ใช้ SOF

คำตอบ:


188

เปลี่ยนประเภทการส่งออกจากโปรแกรมประยุกต์ของคอนโซลเพื่อWindows Application สามารถทำได้ในProject -> Properties -> Applicationใน Visual Studio:

ข้อความแสดงแทน


4
หน้าต่างคอนโซลกะพริบและย้อนกลับ ฉันจะให้แอปพลิเคชันทำงานโดยไม่มีหน้าต่างได้อย่างไร
SOF User

@SOF User: คุณจะเริ่มแอปพลิเคชันได้อย่างไร? โดยดับเบิลคลิกใน Explorer หรือจาก Start Menu?
Dirk Vollmar

ฉันยังใส่ Console.ReadLine ();
SOF User

16
ลบไฟล์Console.ReadLine. มันไม่สมเหตุสมผลเลยถ้าคุณไม่มีหน้าต่างคอนโซล
Dirk Vollmar

1
@ KarolŻurowski: แนวคิดนี้คือคุณจะใช้สิ่งนี้สำหรับแอพที่มาพร้อมกับ UI บางรูปแบบ (เช่นไอคอนในถาดระบบ) หรือแอพที่ทำงานบางอย่างแล้วออกโดยอัตโนมัติเมื่อเสร็จสิ้น หากคุณไม่มีแอปจะทำงานในพื้นหลังจนกว่าจะออกจากระบบ / ปิดเครื่องหรือจนกว่าจะถูกฆ่าอย่างชัดเจนเช่นการใช้ตัวจัดการงาน
Dirk Vollmar

26

เปลี่ยนประเภทแอปพลิเคชันของคุณเป็นแอปพลิเคชัน windows รหัสของคุณจะยังคงทำงาน แต่จะไม่มีหน้าต่างคอนโซลหรือหน้าต่างมาตรฐานเว้นแต่คุณจะสร้างขึ้นมา


2
หน้าต่างคอนโซลกะพริบและย้อนกลับ ฉันจะให้แอปพลิเคชันทำงานโดยไม่มีหน้าต่างได้อย่างไร
SOF User

คุณต้องแน่ใจว่าจะไม่ยุติ ไม่มีอะไรจะพูดอีกมากหากไม่มีข้อมูลเพิ่มเติม โปรแกรมทำอะไร? มันทำงานวนซ้ำหรือไม่?
Lasse V.Karlsen

12

แทนที่จะConsole.Readline/keyใช้new ManualResetEvent(false).WaitOne()ในที่สุด สิ่งนี้ใช้ได้ดีสำหรับฉัน


3

บางทีคุณอาจต้องการที่จะลองสร้างโปรแกรม Windows บริการ มันจะทำงานในพื้นหลังโดยไม่มี UI ใด ๆ


3
Windows Service ไม่สามารถรับเหตุการณ์ที่กดคีย์ได้
ผู้ใช้ SOF

1
บริการมีข้อ จำกัด อย่างมากขึ้นอยู่กับแอปพลิเคชันของคุณเนื่องจาก Windows Vista จะถูกบังคับให้อยู่ในเซสชัน 0 ดังนั้นจึงไม่สามารถดำเนินการใด ๆ ในเซสชันอื่น ๆ เช่นแสดงข้อความป๊อปอัป
Matt

1
@Matt "ไม่สามารถดำเนินการใด ๆ ในเซสชันอื่นได้" ไม่เป็นความจริงทั้งหมด นี่คือโครงการรหัสสำหรับบริการที่เปิดพรอมต์คำสั่งของผู้ดูแลระบบบนเดสก์ท็อปของผู้ใช้ที่ล็อกอิน codeproject.com/Articles/35773/…
Qodex

1

เปลี่ยนประเภทการส่งออกจากโปรแกรมประยุกต์ของคอนโซลเพื่อWindows Application ,

และแทนที่จะConsole.Readline/keyใช้new ManualResetEvent(false).WaitOne()ในตอนท้ายเพื่อให้แอปทำงานต่อไป

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.