Zireael |
Отправлено: 10 Мая, 2019 - 11:46:19
|
Эксперт
Покинул форум
Сообщений всего: 4464
Дата рег-ции: Нояб. 2017
Репутация: 585
|
Цитата: Почему не работают иконки?
Работают.
CODE:#define MB_OKCANCEL 1
#define MB_ICONSTOP 16
external(INT, "my_message", "MessageBoxA", "user32.dll");
my_message(0, "Сообщение", "Kibor", MB_OKCANCEL | MB_ICONSTOP); |
|
|
007wan |
Отправлено: 11 Мая, 2019 - 13:02:40
|
Эксперт
Покинул форум
Сообщений всего: 1837
Дата рег-ции: Март 2017
Репутация: -2
|
А можно ли как-то при получении указателя на браузер узнать его путь, версию и бит?
(Добавление)
Еще помните список? Как сделать, что бы если присутствует любой текст в списке(Listbox), то при нажатии на него двойным кликом показывает сообщение, причем на разный текст - разное сообщение. Теоретически я знаю пару функций, которые помогут:*
Пример текста в списке (Отобразить) Цитата:
Текст1
Текст5
Текст4
Текст2
Текст1
Текст124
При клике двойным на "текст1" выводит "текст1" и так по всем текстам.
*Функционально это должно выглядеть так:
При клике на текст в списке на любой текст(или его копии одинаковые), получаем указатель на прямоугольник выделенный, если он равен тому тексту, который там, то вывести сообщение этого текста.
(Добавление)
007wan пишет: А можно ли как-то при получении указателя на браузер узнать его путь, версию и бит? Просто я думаю так лучше будет, чем искать сразу все, да и шанс, что найдет тот слишком мал. |
|
|
Zireael |
Отправлено: 11 Мая, 2019 - 14:09:00
|
Эксперт
Покинул форум
Сообщений всего: 4464
Дата рег-ции: Нояб. 2017
Репутация: 585
|
Цитата: А можно ли как-то при получении указателя на браузер узнать его путь, версию и бит?
code (Отобразить)CODE:external(INT, "GetModuleFileNameEx", "GetModuleFileNameExA","Psapi.dll");
external (INT, "GetPrivateProfileString", "GetPrivateProfileStringA", "Kernel32.dll");
external (INT, "IsWow64Process2", "IsWow64Process2", "Kernel32.dll");
win mozilla=window (-1, "MozillaWindowClass", -1); // окно мозилы
char path[255], version[255], bit[4];
string path_to_ini;
if(mozilla)
{
int prc=openprocess(mozilla);
if(GetModuleFileNameEx(prc, 0, address (#path[0]), sizearray(path))) // путь к мозиле
{
messagebox(format(#path[0]));
if(regexsearch(1, #path_to_ini, format(#path[0]), ".*(?=firefox)", IGNORECASE)) // путь без имени
{
//messagebox(path_to_ini);
// версия мозилы из ini файла
if(GetPrivateProfileString ("App", "Version", 0, address (#version[0]), sizearray(version), path_to_ini+"application.ini"))messagebox(format(#version[0]));
}
if(IsWow64Process2(prc, address(#bit[0]), address(#bit[2]))) // разрядность
{
if(codhexi(#bit[0], 2)==0)messagebox("x64");
else messagebox("x86");
}
}
}
else messagebox("Окно не найдено"); |
|
|
Zireael |
Отправлено: 11 Мая, 2019 - 14:36:15
|
Эксперт
Покинул форум
Сообщений всего: 4464
Дата рег-ции: Нояб. 2017
Репутация: 585
|
Цитата: "Ошибка получения адреса функции IsWow64Process2" пи запуске
Она в win10 только появилась, используйте IsWow64Process.
Цитата: Еще помните список? Как сделать, что бы если присутствует любой текст в списке(Listbox), то при нажатии на него двойным кликом показывает сообщение
При двойном клике по строке списка будет сообщение (Отобразить)CODE:#define WS_CHILD 1073741824
#define WS_VISIBLE 268435456
#define WS_BORDER 8388608
#define WS_HSCROLL 1048576
#define WS_VSCROLL 2097152
#define LB_ADDSTRING 384
#define LB_GETCOUNT 395
#define LB_GETTEXT 393
#define LB_SETHORIZONTALEXTENT 404
#define LBS_DISABLENOSCROLL 4096
#define LBS_NOTIFY 1
#define LB_GETCURSEL 392
#define LB_GETTEXT 393
external(INT, "CreateWindow", "CreateWindowExA", "User32.dll" );
external(INT, "GetTextExtentPoint32", "GetTextExtentPoint32A", "Gdi32.dll" );
external(INT, "GetDC", "GetDC", "User32.dll" );
int list, hdc, max_length=0;
char text[9999];
createdialog(0);
showdialog(0, "Диалог",100, 100, 300, 300, 1, 1);
// добавить строки в список
add_list("текст1");
add_list("текст5");
add_list("text4");
add_list("text2");
add_list("text1");
add_list("text124");
loop()sleep(10);
function getmessage(0, WM_COMMAND)
{
if(message.lparam==list && hiword(message.wparam)==2) // если сделан двойной клик по тексту в списке
{
sendmessage(LB_GETTEXT, sendmessage(LB_GETCURSEL, 0, 0, formatiw(list)), address(#text[0]), formatiw(list));
messagebox(format(#text[0]));
}
}
function getmessage(0, WM_CREATE)
{
list=CreateWindow(0, "LISTBOX", "", LBS_NOTIFY | LBS_DISABLENOSCROLL | WS_VSCROLL | WS_HSCROLL | WS_BORDER | WS_CHILD | WS_VISIBLE, 10, 10, 100, 150, gethwnd(0), 0, 0, 0);
hdc=GetDC(list);
}
function add_list(string s)
{
int SIZE[2];
new char c[size(s)+1];
strcpy(#c[0], s);
GetTextExtentPoint32(hdc, address(#c[0]), sizearray(c), address(#SIZE[0])); // узнать длину текста в пикселях
if(max_length<SIZE[0])
{
max_length=SIZE[0]; // запомнить максимальную длину строки
sendmessage(LB_SETHORIZONTALEXTENT, SIZE[0], 0, formatiw(list)); // установить ширину прокрутки
}
sendmessage(LB_ADDSTRING, 0, address(#c[0]), formatiw(list));
delete c;
} |
|
|
007wan |
Отправлено: 11 Мая, 2019 - 14:39:35
|
Эксперт
Покинул форум
Сообщений всего: 1837
Дата рег-ции: Март 2017
Репутация: -2
|
Zireael пишет: используйте IsWow64Process. Работает. Спасибо.
(Добавление)
Zireael пишет: При двойном клике по строке списка будет сообщение Спасибо снова)
(Добавление)
Блин у меня в списке не находит нужный текст:
CODE:if(message.lparam == Object_Listbox1 && hiword(message.wparam) == 2)
{
char text[9999];
sendmessage(LB_GETTEXT, sendmessage(LB_GETCURSEL, 0, 0, formatiw(Object_Listbox1)), address(#text[0]), formatiw(Object_Listbox1));
if (format(#text[0]) == "Не удается найти Image_0.bmp")
{
messagebox("открыть изображение");
}
}
Проблема в том, что в listbox пишется такое:
Цитата: [hh:mm:ss] - Не удается найти Image_0.bmp где hh,mm,ss - это время оно может быть разное? как-то помню можно с помощью функцииregexsearch сделать, что бы там стояла любая цифра от 0 до 9 или он их игнорировал |
|
|
Zireael |
Отправлено: 11 Мая, 2019 - 15:01:31
|
Эксперт
Покинул форум
Сообщений всего: 4464
Дата рег-ции: Нояб. 2017
Репутация: 585
|
Цитата: используйте IsWow64Process.
Работает. Спасибо.
Обратить внимание что она отличается от IsWow64Process2 передаваемыми параметрами.
Цитата: Проблема в том, что в listbox пишется такое:
[hh:mm:ss] - Не удается найти Image_0.bmp
CODE:string Text;
char text[9999];
strcpy(#text[0], "[03:15:44] Не удается найти Image_0.bmp");
messagebox(format(#text[0]));
regexreplace(1, #Text, format(#text[0]), "^[\[\]\d:\s]+", ""); // удалить из начала строки []: цифры и пробелы
messagebox(Text); |
|
|
007wan |
Отправлено: 11 Мая, 2019 - 15:05:39
|
Эксперт
Покинул форум
Сообщений всего: 1837
Дата рег-ции: Март 2017
Репутация: -2
|
Zireael пишет: Обратить внимание что она отличается от IsWow64Process2 передаваемыми параметрами. IsWow64Process (Отобразить)CODE:BOOL IsWow64Process(
HANDLE hProcess,
PBOOL Wow64Process
); IsWow64Process2 (Отобразить)CODE:BOOL IsWow64Process2(
HANDLE hProcess,
USHORT *pProcessMachine,
USHORT *pNativeMachine
); Там 3 параметра, а там 2. Только не понимаю что откуда и почему и как, но вроде бы раз работает, то ошибки нету?
IsWow64Process function
IsWow64Process2 function(Отредактировано автором: 11 Мая, 2019 - 15:07:08) |
|
|
|