当前位置: 代码迷 >> C语言 >> [解决]拖图标运行程序法
  详细解决方案

[解决]拖图标运行程序法

热度:603   发布时间:2008-04-23 16:58:59.0
[解决]拖图标运行程序法
上次的问题没人回答,关键在于问题问的不对,这次重问。

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;
}

程序代码:

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输出文件名就可以了………………
----------------解决方案--------------------------------------------------------
  相关解决方案