แทนที่ตัวจำลองคอนโซลเริ่มต้นภายใต้ Windows XP


11

ฉันจะแทนที่โปรแกรมเริ่มต้นที่มีหน้าต่างคอนโซลภายใต้ Windows XP ได้อย่างไร

ฉันรู้ว่าเลือกโปรแกรมและฉันมีทางลัดที่จะเริ่มต้นcmd.exeในConsole2 แต่ตอนนี้ฉันต้องการให้แอปพลิเคชั่นคอนโซลเริ่มต้นใน Console2 มากกว่าโปรแกรมคอนโซลเริ่มต้นแม้ว่าฉันจะไม่สามารถควบคุมโปรแกรมที่เริ่มแอปพลิเคชันคอนโซลได้ (เช่นโปรแกรมที่ไม่ใช่คอนโซลเริ่มทำงานconsoleapp.exeและฉันไม่สามารถเปลี่ยนเป็นเริ่ม Console2 แทนได้ แต่ฉันยังต้องการให้แอปพลิเคชันเริ่มทำงานภายในอินสแตนซ์ใหม่ของ Console2)

(โปรดทราบว่าฉันต้องการแทนที่คอนโซลเองนั่นคือหน้าต่างที่แอปพลิเคชันคอนโซล (เช่นโหมดข้อความ) ทำงานและฉันจะต้องสามารถเรียกใช้แอปพลิเคชันคอนโซลที่ไม่มีการแก้ไขได้: แทนโปรแกรมคอนโซลเฉพาะเช่น Cmd จะไม่ทำอะไรให้ฉันดี)

แก้ไข : ดังนั้นสิ่งที่ฉันตามมาคือการแทนที่ CSRSSซึ่งนำไปสู่

OT: ฉันต้องการทราบเมื่อ Microsoft จะทำการเปลี่ยน CSRSS ที่เหมาะสม การไม่สามารถปรับความกว้างของ "เทอร์มินัล" โดยการปรับขนาดหน้าต่างเป็นเรื่องตลกที่สมบูรณ์

ไปดาวน์โหลด ISE แล้ว (มันรวมอยู่ใน Win7 / 2008R2)

แต่เท่าที่ฉันเข้าใจว่า ISE นี้เป็นสภาพแวดล้อมสำหรับ Powershellไม่ใช่ผู้จำลองคอนโซลทั่วไป


ข้อบกพร่องที่กล่าวถึงในใบเสนอราคาใหม่ของคุณใช้ไม่ได้กับ CMD เมื่อเรียกใช้ภายใน Console2 อย่างไรก็ตาม IIRC
Paradroid

@ jason404: ใช่ แต่ถ้าคุณดับเบิลคลิกที่แบตช์ไฟล์ตัวอย่างเช่นมันจะไม่เปิดใน Console2 อินสแตนซ์เช่นนี้เป็นที่ที่คุณอาจต้องการแทนที่เชลล์บรรทัดคำสั่ง ฉันคิดว่ามันเป็นคำถามที่ดี +1
Sasha Chedygov

อาจเป็น "Attach" ของ std console ในแท็บใหม่ของ console emulator ที่เหมาะกับคุณ? คู่มือแนบฉันหมายถึง
Maximus

@ Maximus ฉันไม่เข้าใจว่าคุณหมายถึงอะไร โดย“ std console” คุณหมายถึง CSRSS หรือไม่ สิ่งที่ "แนบ" อยู่ที่ไหน
Gilles 'SO- หยุดความชั่วร้าย'

ConEmu อาจแนบ "real console" ใด ๆ ที่มีอยู่ (CSRSS, ใช่) หรือแอปพลิเคชัน GUI แบบง่าย ๆ ลงในแท็บ การแนบอาจทำได้ด้วยตนเองจากอินเตอร์เฟส ConEmu หรือโดยการใช้คำสั่งพิเศษในคอนโซล (ถ้ามี)
Maximus

คำตอบ:


9

ฉันเป็นผู้เขียนConEmu - ตัวจำลองคอนโซล Windows หนึ่งในคุณสมบัติของมันคือการจับภาพไปยังแท็บคอนโซลที่มีอยู่หรือแอพพลิเคชั่น GUI อย่างง่าย ดังนั้นหลังจากเริ่มโปรแกรมคอนโซลในคอนโซลมาตรฐาน (CSRSS / ConHost) คุณอาจ:

  • ในเมนูระบบ ConEmu เลือกรายการ "แนบ ... " ( Win+ Gโดยค่าเริ่มต้น) แล้วเลือกหน้าต่างแนบ หาก ConEmu ไม่ได้เริ่มต้นคุณสามารถเลือกที่จะเริ่มต้นได้โดยไม่ต้องสร้างคอนโซล / แท็บเมื่อเริ่มต้น:

    C:\Tools\ConEmu.exe /detached
    
  • หรือหากทำได้ให้เรียกใช้ในคอนโซลที่เริ่มต้นด้วยคำสั่งต่อไปนี้ (ConEmu \ Attach.cmd) ซึ่งเริ่มการแนบจากคอนโซลด้านข้าง หมายเหตุในกรณีดังกล่าว ConEmu.exe (GUI) จะเริ่มต้นโดยอัตโนมัติหากยังไม่มีอยู่

    ConEmuC.exe /ATTACH /NOCMD
    
  • มีอีกวิธีหนึ่งคือ ฉันคิดว่ามันไม่ตรงกับความต้องการของคุณ แต่ฉันจะเปิดเผยมัน มีคีย์ในรีจิสตรีซึ่งเนื้อหา cmd / tcc ดำเนินการหลังจากคอนโซลเริ่มทำงาน ในขณะที่คุณกำลังเริ่มต้นconsoleapp.exeไม่cmd.exeควรพลาด มีCmd_Autorun.cmdไฟล์อยู่ใน ConEmu distrib เพื่อติดตั้ง / ถอนการติดตั้งคำสั่งนี้

    [HKEY_CURRENT_USER\Software\Microsoft\Command Processor]
    "AutoRun"="\"<Command to be executed>\"" 
    

มีแท็กที่นี่บน Superuser.com

UPD สร้าง 120704 โหมดแนบทางเลือกที่ไม่อันตรายสำหรับหน้าต่างคอนโซล

ConEmu แนบกล่องโต้ตอบคอนโซลภายนอก

UPD2 สร้าง 121128. มันเป็นไปได้ที่จะสกัดกั้น "การสร้างหน้าต่างคอนโซล" จากที่กำหนด (โดยผู้ใช้) explorer.exe,vcexpress.exeการใช้งานตัวอย่างเช่น อ่านเพิ่มเติมเกี่ยวกับคุณลักษณะการทดลองที่ล่วงล้ำนี้


ดูเหมือนจะมีแนวโน้ม แต่มันก็ไม่ได้ผลสำหรับฉัน เมื่อฉันพยายามที่จะแนบconsoleapp.exe, ConEmuC.X, PID=5656 Injecting remote into PID=5432 FAILED, code=-111:0x00000057ฉันได้รับข้อความ เนื่องจากconsoleapp.exeเป็นโปรแกรมที่ฉันกำลังดีบั๊กการเห็น "การฉีดรีโมต" ทำให้ฉันสงสัยว่าเทคนิคที่ใช้โดย ConEmu จะไม่ทำงานให้ฉัน - ฉันไม่สามารถอนุญาตให้โปรแกรม "ต่างประเทศ" รบกวนโปรแกรมที่ฉันกำลังดีบั๊กได้
Gilles 'หยุดความชั่วร้าย'

ลองสร้าง 120704 อาจเป็นโหมดทางเลือกที่เหมาะกับคุณ
Maximus

สร้าง 120704 ด้วยโหมดการทำงานทางเลือกขอบคุณ ถ้าฉันไม่สามารถแทนที่อีมูเลเตอร์คอนโซลเริ่มต้นได้การเชื่อมต่อกับแอพพลิเคชั่นที่ดีกว่าหลังจากที่แอปพลิเคชันเริ่มทำงานจะดีกว่าไม่มีอะไร ฉันไม่สามารถหาวิธีที่จะทำได้ในการกดปุ่มเดียว
Gilles 'หยุดความชั่วร้าย'

@ Maximus: ฉันอดไม่ได้ที่จะไม่ยกย่องงานที่ดีของคุณ ฉันไม่ค่อยได้ใช้ Windows แต่บางครั้งฉันถูกบังคับและเมื่อฉันฉันต้องมีการรวม Cygwin หรือ Msys ในขณะที่ Console2 มีวิธีแก้ปัญหาที่ดีที่สุดที่ฉันเห็นมามันก็ค่อนข้างน่าเบื่อ ConEmu เป็นคนดีมาก แต่ฉันต้องการ 2 สิ่ง: 1. ควรมีการสนับสนุนที่ดีกว่าสำหรับโปรไฟล์เช่นควรมีผู้จัดการสำหรับการบันทึก / ลบโปรไฟล์คอนโซลที่กำหนดเอง (เช่นการโทรshโดยตรง 2. ควรแยกหน้าต่างใน แท็บแนวตั้ง / แนวนอนหลายรายการและเรียกคืนการจัดเรียงแท็บที่กำหนดเองนี้เมื่อเริ่มต้นใหม่
axel22

@ axel22: คุณสามารถโพสต์ความปรารถนาที่จะปัญหา ConEmu 1. มีโปรไฟล์อยู่แล้ว 2. ในแผนงาน
Maximus

1

คุณทำไม่ได้ Win32 consolesใช้ windows console ภายในที่จัดทำโดย CSRSS เสมอ


ขอบคุณตอนนี้ฉันรู้ว่าสิ่งที่ฉันหลังจากนั้นคือการเปลี่ยน CSRSS
Gilles 'หยุดชั่วร้าย'

@Gilles: ขอให้โชคดี (ที่จริงแล้วใน Windows 7 ฟังก์ชั่นส่วนใหญ่ของมันได้ถูกย้ายเข้าไปในเคอร์เนล แต่มันก็ยังคงเป็น "กระบวนการที่สำคัญ" ซึ่งเป็นแกนหลักของระบบย่อยของ Win32 และทุกอย่าง)
user1686

@Gilles: จากนั้นใช้เปลือกที่แตกต่างกันตามที่ฉันพูด คอนโซล Win32 เป็นตัวจำลองเทอร์มินัล Windows มาตรฐาน
Paradroid

1
@ jason404: และอย่างที่ Gilles บอกไว้มันไม่ใช่เชลล์ (cmd.exe) แต่เป็นคอนโซล (เทอร์มินัลอีมูเลเตอร์) ที่เขาต้องการแทนที่ดังนั้นโปรแกรมใด ๆที่ใช้คอนโซล windows จะใช้การแทนที่
user1686

2
การใช้งานหน้าต่างคอนโซลของ Windows 7 ได้ถูกย้ายออกcsrssไปconhost.exeแล้ว น่าเสียดายที่มันยังคงเป็น UI เดิมและเท่าที่ฉันรู้ API ของมันจะไม่มีเอกสาร เพิ่มเติมได้ที่blogs.technet.com/b/askperf/archive/2009/10/05/…
ak2
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.