8

我希望能够让用户将文件拖放到我的控制台应用程序的窗口中,这样他们就不会被迫将文件拖放到应用程序的图标(或链接,或者更糟糕的是在控制台中编写命令行)上。如何获取拖放到应用程序窗口中的文件路径列表?

4

3 回答 3

6

你可以只听键盘。将文件拖到控制台窗口时,窗口会收到键盘事件,就像直接输入文件名一样。

这就是您可以在cmdPowerShell 窗口或 PowerShell 窗口上拖放文件并获取完整文件名的方式,就像直接输入一样,它也适用于您自己的应用程序。

于 2012-09-30T16:20:37.003 回答
4

控制台应用程序不拥有它的窗口,csrss.exe但确实如此。因此,即使您找到了 window HANDLE,您也无法注册拖放或处理丢弃消息。因此,您的控制台应用程序仅限于csrss.exe通过控制台 API 转发的消息类型。它们在这里列出:http: //msdn.microsoft.com/en-us/library/windows/desktop/ms683499.aspx 拖放不在其中,尽管控制台内的鼠标事件是。

您最好的选择可能是制作一个看起来像控制台应用程序但不使用 Windows 控制台的应用程序。相反,您会在屏幕上绘制文本和光标,并接受键盘输入,从而创建命令行界面。

这种东西被称为“控制台模拟器”,您可能会找到一个已经构建的满足您需求的东西。

于 2012-09-30T16:20:26.587 回答
0

你不能因为控制台应用程序没有窗口。它具有标准输入、输出和错误流。

包含控制台应用程序的窗口是 CMD 应用程序 (cmd.exe) 的窗口,您无法更改 Windows 控制台的基本行为。

CMD 像终端(putty、telnet、ssh 等)一样工作——它将字符从键盘发送到应用程序(准确地说——它将字符发送到“标准输入”)并显示由应用程序的“标准输出”生成的字符。

阅读一些关于标准流的信息。 http://en.wikipedia.org/wiki/Standard_streams

我的 Windows 7 下 CMD.exe 的行为

我可以通过拖放传递文件名(带完整路径)。在 cmd 窗口上放置一个“文件图标”将“键入”文件名 - 但没有 CR/LF(换行)字符,因此“readline”功能将不起作用。

删除多个文件图标只会传递一个文件。

对不起,如果我犯了一些语言错误。

于 2012-09-30T16:40:50.423 回答