Kibor |
Отправлено: 28 Февраля, 2018 - 14:45:40
|
Эксперт
Покинул форум
Сообщений всего: 8203
Дата рег-ции: Март 2013
Откуда: Одесса
Репутация: 357
|
Вот еще.
Это покажет путь ко всем программам. Калькулятору в том числе. Хоть кнопки ПУСК
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]));
А это немного извращения.. Узнаем путь чтением памяти запущенного процесса сами. Перед этим узнаем имя самого файла путем как выше.
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;
}
Коряво только работает определение начала строки. Можно по спец символам ориентироваться. Типа :\ и перед этим какая то буква диска.. |
|
|
Zireael |
Отправлено: 02 Апреля, 2018 - 14:26:22
|
Эксперт
Покинул форум
Сообщений всего: 4456
Дата рег-ции: Нояб. 2017
Репутация: 585
|
Для этого есть специальные программы, например SharpKeys.
Или пишем в блокноте:
CODE:Windows Registry Editor Version 5.00
[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Keyboard Layout]
"Scancode Map"=hex:00,00,00,00,00,00,00,00,02,00,00,00,1c,00,36,00,00,00,00,00
Сохраняем с любым именем и расширением .reg, например 123.reg. Запускаем, добавляем инфу с реестр, перезагружаем комп. Вместо правого шифта будет энтер. |
|
|
Zireael |
Отправлено: 25 Ноября, 2018 - 16:16:45
|
Эксперт
Покинул форум
Сообщений всего: 4456
Дата рег-ции: Нояб. 2017
Репутация: 585
|
Вопрос по поводу addresss - считывает до первого 0 строку (string).
CODE:external(INT, "OpenClipboard", "OpenClipboard", "User32.dll" );
external(INT, "CloseClipboard", "CloseClipboard", "User32.dll" );
external(INT, "GetClipboardData", "GetClipboardData", "User32.dll" );
external(INT, "GlobalLock", "GlobalLock", "Kernel32.dll" );
external(INT, "GlobalUnlock", "GlobalUnlock", "Kernel32.dll" );
writeclipboard("qwe123"); // пишем текст в буфер
OpenClipboard(0); // открыть буфер
int h = GetClipboardData(1); // 1 - текст в буфере в ansi
int addr = GlobalLock(h); // указатель на первый байт
int i=0;
while(addressc(addr+i)!=formatic(0)) // пока не 0
{
messagebox(addressc(addr+i)); // читаем по байтам
i++;
}
// messagebox(addresss(addr)); // почему так кибор закрывается?
GlobalUnlock(h);
CloseClipboard(); // закрыть буфер |
|
|
AdryV |
Отправлено: 09 Декабря, 2018 - 13:14:10
|
Специалист
Покинул форум
Сообщений всего: 449
Дата рег-ции: Май 2016
Репутация: 11
|
Kibor пишет: CODE:external(VOID, "GetSaveFile", "GetSaveFileNameA", "COMDLG32.DLL");
char b[100];
strcpy(#b[0], "файл");
char f[256];
for (int n=0; n<256; n++)f[n]=0;
char a[77];
for (n=0; n<77; n++)a[n]=0;
writeaddress(76, address(#a[0]));
writeaddress(0, address(#a[4]));
writeaddress(0, address(#a[8]));
writeaddress(address(#b[0]), address(#a[12]));
writeaddress(0, address(#a[16]));
writeaddress(1634928, address(#a[20]));
writeaddress(1000, address(#a[24]));
writeaddress(0, address(#a[28]));
writeaddress(0, address(#a[32]));
writeaddress(address(#f[0]), address(#a[36]));
writeaddress(6148, address(#a[40]));
GetSaveFile(address(#a[0]));
messagebox (format(#f[0]));
подскажи по какой причине этот код постоянно крашит кибор?...
что бы перестал крашиться нужно изменить
char f[512];
for (int n=0; n<512; n++)f[n]=0;
char a[100];
for (n=0; n<100; n++)a[n]=0;
раньше все нормально работало. мне интересно у вас крашится?
если такое ток у меня то эт проблема с виндой, подскажите какие файлы проверять?
ошибка (Отобразить)Сигнатура проблемы:
Имя события проблемы: APPCRASH
Имя приложения: Kibor.exe
Версия приложения: 5.2.7.0
Отметка времени приложения: 5c0b8e47
Имя модуля с ошибкой: KERNELBASE.dll
Версия модуля с ошибкой: 6.1.7601.23915
Отметка времени модуля с ошибкой: 59b94abb
Код исключения: c0000005
Смещение исключения: 00030ac4
Версия ОС: 6.1.7601.2.1.0.256.1
Код языка: 1049
Дополнительные сведения 1: 882c
Дополнительные сведения 2: 882c599231b483f8fdd9418d72c3a64d
Дополнительные сведения 3: 2e5b
Дополнительные сведения 4: 2e5b4c6f6604facda674256ff474e351 (Отредактировано автором: 09 Декабря, 2018 - 13:25:47) |
|
|
Zireael |
Отправлено: 09 Декабря, 2018 - 14:14:37
|
Эксперт
Покинул форум
Сообщений всего: 4456
Дата рег-ции: Нояб. 2017
Репутация: 585
|
Цитата: подскажи по какой причине этот код постоянно крашит кибор?
Неправильно заполнена структура tagOFNA structure
Окно сохранения файла (Отобразить)CODE:external(INT, "GetSaveFileName", "GetSaveFileNameA", "COMDLG32.DLL" );
char b[256]; b[0]=formatic(0);
char a[76];
for (int n=0; n<76; n++)a[n]=0;
string s="Text Files"; // тип файла (можно наисать что угодно)
string s1="*.TXT"; // расширение файла
char c[100]; strcpy(#c[0], s); strcpy(#c[size(s)+1], s1); c[size(s+s1)+2]=formatic(0);
char d[256]; strcpy(#d[0], "C:\"); // начальный каталог
char e[256]; strcpy(#e[0], "Сохранить файл"); // заголовок диалога
writeaddress(76, address(#a[0]));
writeaddress(address(#c[0]), address(#a[12])); // тип файла
writeaddress(address(#b[0]), address(#a[28])); // сюда сохранится путь
writeaddress(sizearray(b), address(#a[32])); // размер буфера
writeaddress(address(#d[0]), address(#a[44])); // начальный каталог
writeaddress(address(#e[0]), address(#a[48])); // заголовок диалога
int x=GetSaveFileName(address(#a[0])); // вернёт 0 или 1
if(x>0)messagebox(format(#b[0]));
else messagebox("Ничего не выбрано"); |
|
|
AdryV |
Отправлено: 09 Декабря, 2018 - 14:42:21
|
Специалист
Покинул форум
Сообщений всего: 449
Дата рег-ции: Май 2016
Репутация: 11
|
Zireael пишет: Неправильно заполнена структура
сбасиб
еще вопрос эту функцию ведь можно использовать как доя открытия так и для сохранения
только нужно будет заменить, крашей ведь не будет?)))
код (Отобразить)CODE:int x=GetSaveFileName(address(#a[0])); // вернёт 0 или 1
if(x>0)messagebox(format(#b[0]));
else messagebox("Ничего не выбрано");
на
CODE:external(VOID, "GetOpenFileName", "GetOpenFileNameA", "COMDLG32.DLL");
external(INT, "GetSaveFileName", "GetSaveFileNameA", "COMDLG32.DLL" );
int par=1;
char b[256]; b[0]=formatic(0);
char a[76];
for (int n=0; n<76; n++)a[n]=0;
string s="Text Files"; // тип файла (можно наисать что угодно)
string s1="*.TXT"; // расширение файла
char c[100]; strcpy(#c[0], s); strcpy(#c[size(s)+1], s1); c[size(s+s1)+2]=formatic(0);
char d[256]; strcpy(#d[0], "C:\"); // начальный каталог
char e[256]; strcpy(#e[0], "Сохранить файл"); // заголовок диалога
writeaddress(76, address(#a[0]));
writeaddress(address(#c[0]), address(#a[12])); // тип файла
writeaddress(address(#b[0]), address(#a[28])); // сюда сохранится путь
writeaddress(sizearray(b), address(#a[32])); // размер буфера
writeaddress(address(#d[0]), address(#a[44])); // начальный каталог
writeaddress(address(#e[0]), address(#a[48])); // заголовок диалога
if(par==1)GetOpenFileName(address(#a[0])); // вернёт 0 или 1
else GetSaveFileName(address(#a[0]));
messagebox(format(#b[0])); |
|
|
|