[解决]拖图标运行程序法
上次的问题没人回答,关键在于问题问的不对,这次重问。windows有这么一种操作,假设有个prog.exe的可执行文件可以修改某文本文件,有一个a.txt的文本文件。
把a.txt的图标拖到prog.exe的图标上,a.txt就被修改了。
请问这种操作是如何用c语言实现的???
谢谢:)
[[it] 本帖最后由 SNAKEQX 于 2008-4-24 12:31 编辑 [/it]]
----------------解决方案--------------------------------------------------------
理论上等价于命令行
prog.exe a.txt
[color=white]
----------------解决方案--------------------------------------------------------
经实践,果如LS所说
附上试验程序和结果
程序代码:
#include <stdio.h>
#include <stdlib.h>
int main(int argc, char *argv[])
{
int i;
for(i = 0; i < argc; i++)
{
puts(argv[i]);
}
system("PAUSE");
return 0;
}
#include <stdlib.h>
int main(int argc, char *argv[])
{
int i;
for(i = 0; i < argc; i++)
{
puts(argv[i]);
}
system("PAUSE");
return 0;
}
程序代码:
C:\Documents and Settings\Administrator\桌面\未命名14.exe
C:\Documents and Settings\Administrator\桌面\未命名14.cpp
请按任意键继续. . .
获取了文件名及路径
后面想拿它咋滴就咋滴~~
[[it] 本帖最后由 sxn0508 于 2008-4-23 17:34 编辑 [/it]]
----------------解决方案--------------------------------------------------------
请帮我看看下面代码,拖图标可以运行,但是无输出文件,打命令行就 没问题。
下楼贴代码
----------------解决方案--------------------------------------------------------
/////////////////////////////////////////
// A prog. make my work easier
// during scanning the barcode
// of the module.
// Ver 1.0
// Writer: Qian Xin on 2008.4.23
////////////////////////////////////////
#include<stdio.h>
#include<stdlib.h>
int main(int argc, char *argv[])
{
// 46 modules in fact, but 4 modules for buff
// Every barcode has 1 char and 8 ints
// 10 makes 1 buff in barcode
// barcode example: s30201234
char strBarcode[50][10];
int nModuleNumber=0;
//print paras
printf("%d para\n",argc);
for (int i=0;i<argc;i++) printf ("para[%d]:%s\n",i,argv[i]);
FILE *in,*out;
// file to read
if (!(in=fopen(argv[1],"r")))
{
printf("Read Error!\n");
system("pause");
return 1;
}
// file to write
if (!(out=fopen("out.txt","w")))
{
printf("Write Error!\n");
system("pause");
return 1;
}
// read from file
while(fscanf(in,"%s",&strBarcode[nModuleNumber]) != EOF)
nModuleNumber++;
// converting
if (nModuleNumber != 46)
{
printf ("There are %d modules!\n",nModuleNumber);
printf ("Please check it out!\n");
}
else
{
printf ("Success!\n");
}
// write to the file removing every first character of the string
for (int i=0;i<nModuleNumber;i++)
{
fprintf(out,"%s",strBarcode[i]+1);
fprintf(out,"\n");
}
system ("pause");
fclose(in);
fclose(out);
return 0;
}
[[it] 本帖最后由 SNAKEQX 于 2008-4-23 18:16 编辑 [/it]]
----------------解决方案--------------------------------------------------------
这个是拖进去的
2 para
para[0]:E:\test\Debug\test.exe
para[1]:E:\test\Debug\test.ilk
There are 4 modules!
Please check it out!
这个是直接打的
2 para
para[0]:test.exe
para[1]:test.ilk
There are 4 modules!
Please check it out!
可以看出参数不一样 一个是绝对路径 一个是相对路径
out=fopen("out.txt","w")你这个并没有写绝对路径
我把路径改成绝对路径就可以输出了
话说回来我一直不知道竟然可以拖.....
----------------解决方案--------------------------------------------------------
哦,原来是路径问题,也就是说如果我拖得话,可能输出路径就是我的环境变量的路径?
那么如何让拖进去的文件输出也是相对路径呢???
----------------解决方案--------------------------------------------------------
自己顶一下!!!大家帮帮我啊!
----------------解决方案--------------------------------------------------------
main还有一个参数
int main(int argc, char* argv[], char* envp[])
envp就是环境变量,但这是非标的 :)
----------------解决方案--------------------------------------------------------
可以处理得到的文件名,取得路径,然后SetCurrentDir(API,不知道CRT里面怎么表示的),应该就可以了……
顺便说说,实际上,取得路径了以后,直接strcat输出文件名就可以了………………
----------------解决方案--------------------------------------------------------