Windows Explorer Drag and Drop for CLI Arugments

Skip to first unread message

Patrick Kramer

Nov 8, 2005, 4:27:05 PM11/8/05
I'm building a file format converter for someone who at best takes more
than his fair share of IT helpdesk hours :D

So I want to make it as simple as possible. What I want it to do is,

program.exe file.txt

When I drop file.txt onto the executable file. In other words, take
whatever file dropped onto the executable as the second CLI arugment.

I don't know how this works, but I have seen it before with the OggDrop
Encoder, where you drop your audio file onto the executable and it
outputs an .ogg encoded file. I've also seen it in pure CLI
executables.. But from working with the OggDrop Source I dont see
anything that would allow me to do what they are doing. And the other
utilities are closed source, so no luck there.

Any Insights, Help or Misc. Commentary would be greatly appreciated.


Nov 8, 2005, 4:40:49 PM11/8/05

That's an OS issue, not so much a programming issue, and so it's
off-topic here. The C++ question would be related to argc and argv, and
if you need help with that, just ask.

Cheers! --M

Marcus Kwok

Nov 8, 2005, 4:50:35 PM11/8/05

There is no special facility needed, as long as your program handles
argc/argv properly. If you drag and drop files onto the program, it
will pass each file as a command line parameter. Try dragging files
onto this program:

#include <iostream>
#include <string>

int main(int argc, char* argv[])
if (argc < 2) {
std::cout << "no files!\n";
else {
// argv[0] is probably program name, so skip it
for (int i = 1; i < argc; ++i) {
std::cout << argv[i] << '\n';

// to pause the screen
std::cout << "\n\nPress <Enter> to quit.\n";
std::string trash;
std::getline(std::cin, trash);

return 0;


Marcus Kwok

Patrick Kramer

Nov 8, 2005, 5:41:02 PM11/8/05
That's what I needed..

I wrote an exploratory program that excepted CLI arguments in command
prompt and then ouputed the file as output.txt. It worked within the
command prompt, but didn't do anything when I dragged and dropped to
the executable in windows.

I figured I was doing something wrong (apparently :D).. But I'll just
work off the code you submitted, as It does exactly what I want.


Reply all
Reply to author
0 new messages