我希望能够让用户将文件拖放到我的控制台应用程序窗口,这样他们就不会被迫将文件拖放到应用程序的图标上(或链接,甚至更糟糕的是写入命令行)安慰)。如何获取我放入应用程序窗口的文件路径列表?
答案 0 :(得分:6)
你可以只听取键盘。将文件拖到控制台窗口时,窗口会获取键盘事件,就像直接输入文件名一样。
这就是你可以在cmd
或PowerShell窗口上删除文件并获取完整文件名的方式,就像直接输入一样,它也适用于你自己的应用程序。
答案 1 :(得分:4)
控制台应用程序不拥有其窗口csrss.exe
。因此,即使您找到窗口HANDLE
,您也无法注册拖放或处理丢弃消息。因此,您的控制台应用程序仅限于csrss.exe
通过Console API转发的消息类型。它们列在这里:http://msdn.microsoft.com/en-us/library/windows/desktop/ms683499.aspx拖放不在其中,尽管控制台内有鼠标事件。
您最好的选择可能是创建一个像控制台应用程序一样的应用程序,但不使用Windows控制台。相反,您可以在屏幕上绘制文本和光标并进行键盘输入,从而创建命令行界面。
这种东西被称为“控制台模拟器”,您可能会发现已经构建的符合您需求的内容。
答案 2 :(得分:0)
你不能,因为控制台应用程序没有窗口。它有标准的输入,输出和错误流。
包含控制台应用程序的窗口是CMD应用程序(cmd.exe)的窗口,您无法更改Windows控制台的基本行为。
CMD就像终端(putty,telnet,ssh等)一样工作 - 它将字符从键盘发送到应用程序(确切地说 - 它将字符发送到“标准输入”)并显示由应用程序的“标准输出”生成的字符。
阅读一些关于标准流的内容。 http://en.wikipedia.org/wiki/Standard_streams
我的Windows 7下的CMD.exe行为
我可以通过拖放操作传递文件名(带完整路径)。在cmd窗口中删除一个“文件图标”将“键入”文件名 - 但没有CR / LF(换行符)字符,因此“readline”功能将无效。
删除多个文件图标只会传递一个文件。
对不起,如果我犯了一些语言错误。