Это покажет путь ко всем программам. Калькулятору в том числе. Хоть кнопки ПУСК
CODE:
external(INT, "GetProcessImageFileName", "GetProcessImageFileNameA","Psapi.dll");
char array[255];
win w=window ("Калькулятор", "CalcFrame", -1);
int prc=openprocess(w);
GetProcessImageFileName(prc, address (#array[0]), 255);
messagebox(format(#array[0]));
char array[255];
win w=window ("Калькулятор", "CalcFrame", -1);
int prc=openprocess(w);
GetProcessImageFileName(prc, address (#array[0]), 255);
messagebox(format(#array[0]));
А это немного извращения.. Узнаем путь чтением памяти запущенного процесса сами. Перед этим узнаем имя самого файла путем как выше.
CODE:
external(INT, "GetProcessImageFileName", "GetProcessImageFileNameA","Psapi.dll");
messagebox(path_search(window ("Калькулятор", "CalcFrame", -1)));
function path_search(win w)
{
string exe_name="";
char array[255];
char all_poisk[255];
char chitat_v_char[255];
int adr;
int prc=openprocess(w);
GetProcessImageFileName(prc, address (#array[0]), 255);
for (int n=size(#array[0])-1; n>-1; n--)
{
if (array[n]=='\')goto rr;
exe_name=array[n]+exe_name;
}
rr:;
//messagebox(exe_name);
strcpy(#all_poisk[0], exe_name);
findmemory (1, #all_poisk[0], size(#all_poisk[0]), #adr, 255, prc);
string pyt=exe_name;
chitat_v_char[0]=0;
readmemory(#chitat_v_char[0], 255, adr-255, prc);
for (n=254; n>-1; n--)
{
if (chitat_v_char[n]==0)goto yy;
pyt=chitat_v_char[n]+pyt;
}
yy:;
return pyt;
}
messagebox(path_search(window ("Калькулятор", "CalcFrame", -1)));
function path_search(win w)
{
string exe_name="";
char array[255];
char all_poisk[255];
char chitat_v_char[255];
int adr;
int prc=openprocess(w);
GetProcessImageFileName(prc, address (#array[0]), 255);
for (int n=size(#array[0])-1; n>-1; n--)
{
if (array[n]=='\')goto rr;
exe_name=array[n]+exe_name;
}
rr:;
//messagebox(exe_name);
strcpy(#all_poisk[0], exe_name);
findmemory (1, #all_poisk[0], size(#all_poisk[0]), #adr, 255, prc);
string pyt=exe_name;
chitat_v_char[0]=0;
readmemory(#chitat_v_char[0], 255, adr-255, prc);
for (n=254; n>-1; n--)
{
if (chitat_v_char[n]==0)goto yy;
pyt=chitat_v_char[n]+pyt;
}
yy:;
return pyt;
}
Коряво только работает определение начала строки. Можно по спец символам ориентироваться. Типа :\ и перед этим какая то буква диска..