关于8.3文件名的奇怪有关问题?如何一会简写,一会全称

关于8.3文件名的奇怪问题?怎么一会简写,一会全称。
大家都知道长文件名称在某些情况下会用简写来表示,譬如12345678.exe会写成123456~1.exe
最近我碰到一个奇怪的问题,我的exe文件名称刚好8个字符,然后奇怪的问题就发生了,在进程里面她一会叫12345678.exe一会叫123456~1.exe(注册表里面也有了2个名字)
这样问题就来了,我最近打开的文件一会列出来的是12345678.exe的列表,一会列出的是123456~1.exe的列表。
弹出的一些系统对话框上一会叫12345678,一会叫123456~1,
同一个exe我可能上来点击她出来的名字叫12345678.exe,我过段时间去点击她出来的名字又叫123456~1.exe了,真是头大死了~。~
我想问的是什么情况下她会叫12345678.exe,什么情况下又会叫123456~1.exe
PS:主要是想搞懂这种情况怎么发生的,而非要解决我上面说的2种问题。

------解决方案--------------------
我把一个exe改成12345678.exe 在xp上试了3次,任务管理器里面都是显示12345678.exe
------解决方案--------------------
我的程序遇到过这样的情况:

我的程序是和.abc的后缀名关联的,如果直接双击程序或者程序的快捷方式,打开的进程文件名是c:\testtest1.exe;

如果是双击一个.abc的文件打开程序,那么程序就被变成了c:\testte~1.exe这样的名字打开。

后来为了解决问题,我把我的程序的名称改成8个字符了。
------解决方案--------------------
用下面的函数把文件名转化一下:

Function GetLongFileName(Const FileName : String) : String;var
aInfo: TSHFileInfo;begin
if SHGetFileInfo(PChar(FileName),0,aInfo,Sizeof(aInfo),SHGFI_DISPLAYNAME)<>0 then
Result:= String(aInfo.szDisplayName) else Result:= FileName;end;
------解决方案--------------------
好像直接双击快捷方式也会一会出现简写一会不出现简写,我这里就是,我用的exe名字长10,系统2000