_argv[] proglems
-
I must have missed the + befor the folder icon becouse there is HKEY_CLASSES_ROOT\syx_auto_file\shell\open\command and it's value is ""H:\Copy of folder\prog.exe"%1" My apoligies for missing this the first time.
This is just a guess, but those double quotes look ill-placed. It's hard to tell which are actually part of the registry's value and which you added as part of the post. I would have thought it to look something like:
"H:\Copy of folder\prog.exe" "%1"
"Talent without discipline is like an octopus on roller skates. There's plenty of movement, but you never know if it's going to be forward, backwards, or sideways." - H. Jackson Brown, Jr.
"Judge not by the eye but by the heart." - Native American Proverb
-
This is just a guess, but those double quotes look ill-placed. It's hard to tell which are actually part of the registry's value and which you added as part of the post. I would have thought it to look something like:
"H:\Copy of folder\prog.exe" "%1"
"Talent without discipline is like an octopus on roller skates. There's plenty of movement, but you never know if it's going to be forward, backwards, or sideways." - H. Jackson Brown, Jr.
"Judge not by the eye but by the heart." - Native American Proverb
I got it to look like you said. now when I double click a .syx file I get _argc=4 with _argv[3] as H:\copyof~2\file.syx I could use _argv[_argc-1] to get this value but I still get unexpected results from just double clicking the aplication icon in explorer window. p.s. what does the %1 do?
-
I got it to look like you said. now when I double click a .syx file I get _argc=4 with _argv[3] as H:\copyof~2\file.syx I could use _argv[_argc-1] to get this value but I still get unexpected results from just double clicking the aplication icon in explorer window. p.s. what does the %1 do?
hlmechanic wrote:
now when I double click a .syx file I get _argc=4...
Which it should be 2.
hlmechanic wrote:
with _argv[3] as H:\copyof~2\file.syx
What is the value of
_argv[0]
,_argv[1]
, and_argv[2]
?hlmechanic wrote:
p.s. what does the %1 do?
Nothing per se. It gets replaced by the file that was double-clicked.
"Approved Workmen Are Not Ashamed" - 2 Timothy 2:15
"Judge not by the eye but by the heart." - Native American Proverb
-
hlmechanic wrote:
now when I double click a .syx file I get _argc=4...
Which it should be 2.
hlmechanic wrote:
with _argv[3] as H:\copyof~2\file.syx
What is the value of
_argv[0]
,_argv[1]
, and_argv[2]
?hlmechanic wrote:
p.s. what does the %1 do?
Nothing per se. It gets replaced by the file that was double-clicked.
"Approved Workmen Are Not Ashamed" - 2 Timothy 2:15
"Judge not by the eye but by the heart." - Native American Proverb
I am no longer at the same computer. now I am at a computer running windows XP. It gives me _argc=5. _argv[0] is still what is expected. The rest seem to be "H:\Copy of folder\prog.exe H:\Copy of folder\file.syx" with each _argv[] after 0 being a part of the line between spaces (except the space between the two file names). Windows seems to be trying to break the line up into arguments as a dos line would be. I was wishing there was a way to get this information that did not involve _argv[] or some way to make it give me the whole line so that I could break it up as I wanted. Also I wanted to thank you for your help.
-
I have written a C++ program and I wish it to be able to be started by dragging a file icon onto the program icon in windows explorer. The program name is prog.exe, the file name is file.syx, they are both in folder "H:\folder". When the file is dragged onto the program icon in explorer and starts, the value of _argc=1 with _argv[0] being "H:\folder\prog.exe" and _argv[1] being "H:\folder\file.syx" as expected. I then use this information to open file.syx. However, if the program and file are moved to a folder with a space in the name such as "H:\copy of folder", then when I drag file.syx onto prog.exe I get these unexpected results. _argc=3 with _argv[0]="H:\folder\prog.exe", _argv[1]="of", _argv[2] = "folder\prog.exe H:\copyof~2\file.syx". If I just double click "H:\copy of folder\prog.exe" I get _argc=3 with _argv[0]="H:\folder\prog.exe", _argv[1]="of", _argv[2] = "folder\prog.exe ". I have tested this program on windows98 and windowsXP with the same basic results. If anybody knows how to consistently get the name of a file that is ‘dragged onto a program icon to start that program’ from inside that program then I would appreciate the help.
I have found GetCommandLine() wich seems to be promising. When H:\copy of folder\file.syx is draged and droped onto H:\copy of folder\prog.exe then GetCommndLine() returns "H:\copy of folder\prog.exe" ":\copy of folder\file.syx" (including quote marks). If the same thing is done in H:\folder then "H:\copy of folder\prog.exe" H:\copy of folder\file.syx is given (note change in quote marks). I think I can get the filename from this. I found this from the questions and answers at the end of the folowing article Managing argc and argv[] with STL in a simple way specal thanks to DavidCrow for trying to educate me.
-
I am no longer at the same computer. now I am at a computer running windows XP. It gives me _argc=5. _argv[0] is still what is expected. The rest seem to be "H:\Copy of folder\prog.exe H:\Copy of folder\file.syx" with each _argv[] after 0 being a part of the line between spaces (except the space between the two file names). Windows seems to be trying to break the line up into arguments as a dos line would be. I was wishing there was a way to get this information that did not involve _argv[] or some way to make it give me the whole line so that I could break it up as I wanted. Also I wanted to thank you for your help.
You still have not indicated whether this is a console or GUI application. That makes a ton of difference in how command-line arguments and drag/drop operations are handled.
"Approved Workmen Are Not Ashamed" - 2 Timothy 2:15
"Judge not by the eye but by the heart." - Native American Proverb
-
I have found GetCommandLine() wich seems to be promising. When H:\copy of folder\file.syx is draged and droped onto H:\copy of folder\prog.exe then GetCommndLine() returns "H:\copy of folder\prog.exe" ":\copy of folder\file.syx" (including quote marks). If the same thing is done in H:\folder then "H:\copy of folder\prog.exe" H:\copy of folder\file.syx is given (note change in quote marks). I think I can get the filename from this. I found this from the questions and answers at the end of the folowing article Managing argc and argv[] with STL in a simple way specal thanks to DavidCrow for trying to educate me.
If this is a GUI application, are you handling the
WM_DROPFILES
message?
"Approved Workmen Are Not Ashamed" - 2 Timothy 2:15
"Judge not by the eye but by the heart." - Native American Proverb
-
If this is a GUI application, are you handling the
WM_DROPFILES
message?
"Approved Workmen Are Not Ashamed" - 2 Timothy 2:15
"Judge not by the eye but by the heart." - Native American Proverb
This is a GUI. Written in Borland C++ 4.52 I handled WM_DROPFILES with the folowing code. void DrumWindow::EvDropFiles(TDropInfo dropInfo){ int NumFiles; char NextFile [MAX_PATH]; NumFiles = dropInfo.DragQueryFile (-1, NULL, 0 );// Get the # of files being dropped.; for (int File = 0; File < NumFiles; File++ ){ if ( dropInfo.DragQueryFile (File,NextFile,MAX_PATH ) > 0 ){// Get the next filename from the HDROP info. /////work with file name NextFile here if valid (removed to keep short) };//end if next exist };//end for each file dropInfo.DragFinish ();// Free up memory. };//end EvDropfiles
-
This is a GUI. Written in Borland C++ 4.52 I handled WM_DROPFILES with the folowing code. void DrumWindow::EvDropFiles(TDropInfo dropInfo){ int NumFiles; char NextFile [MAX_PATH]; NumFiles = dropInfo.DragQueryFile (-1, NULL, 0 );// Get the # of files being dropped.; for (int File = 0; File < NumFiles; File++ ){ if ( dropInfo.DragQueryFile (File,NextFile,MAX_PATH ) > 0 ){// Get the next filename from the HDROP info. /////work with file name NextFile here if valid (removed to keep short) };//end if next exist };//end for each file dropInfo.DragFinish ();// Free up memory. };//end EvDropfiles
I'm confused. Why are you using
GetCommandLine()
whenDragQueryFile()
is how "dropped" files are retrieved?
"Approved Workmen Are Not Ashamed" - 2 Timothy 2:15
"Judge not by the eye but by the heart." - Native American Proverb
-
I'm confused. Why are you using
GetCommandLine()
whenDragQueryFile()
is how "dropped" files are retrieved?
"Approved Workmen Are Not Ashamed" - 2 Timothy 2:15
"Judge not by the eye but by the heart." - Native American Proverb
my wish is to find out wich file was used to start the program by dragging the icon of the file onto the unopened program icon. I would also like to be able to set the file extenshion to open the file using this program so the user can double click on a file with the right extenshion and start the program with that file loaded into it. I do not know how to make DragQueryFile() tell me wich file was used to start the program. The Drag and Drop onto the open program window works great but I have not noticed that it sends any information about a file that was draged onto the unopened program icon in windows explorer, or about wich program was double clicked to start this program. I suspect that this is because DragAcceptFiles is not called untill 'SetupWindow()' IF there is a better place to put DragAcceptFiles that would let the program find out this information it would be much easyer to do.