请问程序C是不是你自已写的,要是的话就非常简单
ShellExecuteEx可以指定运行参数,在程序A和B中的ShellExecuteEx分别指定不同的运行参数,在程序c中判别一下就可以了知道是A还是B调用的

解决方案 »

  1.   

    C肯定是自己写的
    如果AB也是自己写的那就简单了如果AB不是自己写的,那么在NT下可以调用NtQueryInformationProcess得到父进程的ID,用ID就能知道别的了95/98/Me下估计有类似的方法(没试过)
      

  2.   

    To bugn
    NtQueryInformationProcess是API函数吗?MSDN里怎么找不到?
      

  3.   

    95/98/Me下我想了个笨办法,就是用进程遍历,在PROCESSENTRY32里有父进程ID的
      

  4.   

    NtQueryInformationProcess是在NTDDK.h里有声明的,连接ntdll.lib就行了,等一回我帮你查查
      

  5.   

    如果没有DDK就看这篇文章
    http://www.microsoft.com/msj/0197/hood/hood0197.htm
      

  6.   

    Process32First
    Process32Next
    Module32First
    Module32Next
    配合使用,具体方法见codeguru上"WhoSLocking“一文
      

  7.   

    To Kronus
    Process32First等函数只能在Win2000下使用。NT下无法运行。To bugn
    谢谢!现在我通过动态调用NTDLL.dll的方法,已经成功的取得了NtQueryInformationProcess的入口地址(基址77F8,偏移量225E,Windows 2000),但是每次调用该函数,返回值总为失败。在http://www.microsoft.com/msj/0197/hood/hood0197.htm里面提到该函数第一个参数为CreateProcess或OpenProcess所创建,那么用AfxGetIninstanceHandle()可以吗?如果你用过这个函数,能否指点一下用法?另外,Win2000的DDK中的NTDLL.LIB好像还存在无法解决的外部引用,是否还需要其他库文件?
      

  8.   

    AfxGetInstanceHandle得到的不是进程句柄,要用GetCurrentProcess()或直接是-1(就是NtCurrentProcess()看ntddk.h)也行。连接ntdll.lib时不是因为无法解决的外部引用,而是你在包含ntddk.h时要这样:
    extern "C" {
    #include <ntddk.h>
    }
      

  9.   

    多谢bugn,已经搞定。不过我用的是NtQueryInformationProcess.h(那篇文章作者重写的),直接使用NTDDK.h好像SDK函数有很多不能用了。