007wan |
Отправлено: 17 Сентября, 2019 - 15:09:07
|
Эксперт
Покинул форум
Сообщений всего: 1837
Дата рег-ции: Март 2017
Репутация: -2
|
Dantes3000 пишет:
хэндл можно сравнивать только с 0 ОК
(Добавление)
Пока так оставилКод (Отобразить)CODE:function Emulation_Effects()
{
getmouse(Mouse_x, Mouse_y);
int Handle_Controls = WindowFromPoint(Mouse_x, Mouse_y);
for (int i=0; i<sizearray(Object_Checkbox); i++)
{
if (Handle_Controls == Object_Checkbox[i] || //работает
Handle_Controls == Object_Checkbox2[i] || //работает
Handle_Controls == Object_Button1 ||
Handle_Controls == Object_Button2 ||
Handle_Controls == Object_Button3 ||
Handle_Controls == Object_Static3 ||
Handle_Controls == Object_Static4)
{
SetCursor(Object_Cursor1);
sleep(10);
break;
}
//===========
if (Handle_Controls == Object_Edit1)
{
SetCursor(Object_Cursor2);
sleep(10);
break;
}
//============
if (Flash == 1)
{
if(getkeystate(1) || getkeystate(2) || getkeystate(4))
{
setwindowparam(MainWindow);
Rect_Dialog[0] = MainWindow.left;
Rect_Dialog[1] = MainWindow.top;
Rect_Dialog[2] = MainWindow.left+MainWindow.width;
Rect_Dialog[3] = MainWindow.top+MainWindow.height;
if (Handle_Controls != gethwnd(1) &&
Handle_Controls != Object_Checkbox[0] &&//robit*
Handle_Controls != Object_Checkbox[1] &&
Handle_Controls != Object_Checkbox[2] &&
Handle_Controls != Object_Checkbox[3] &&
Handle_Controls != Object_Checkbox[4] &&
Handle_Controls != Object_Checkbox2[0] &&
Handle_Controls != Object_Checkbox2[1] &&//*robit
Handle_Controls != gethwnd(2) &&
Handle_Controls != Object_Static1 &&
Handle_Controls != Object_Static2 &&
Handle_Controls != Object_Static3 &&
Handle_Controls != Object_Static4 &&
Handle_Controls != Object_Static5 &&
Handle_Controls != Object_Edit1 &&
Handle_Controls != Object_Button3)
{
if(PtInRect(address(#Rect_Dialog[0]), Mouse_x, Mouse_y))
{
FlashWindowEx(address(#FLASHWINFO[0]));
break;
}
}
}
}
}
} |
|
|
Zireael |
Отправлено: 17 Сентября, 2019 - 15:19:44
|
Эксперт
Покинул форум
Сообщений всего: 4464
Дата рег-ции: Нояб. 2017
Репутация: 585
|
Принцип такой, дописывайте условия какие надо.
code (Отобразить)CODE:#define WS_VISIBLE 268435456
#define WS_CHILD 1073741824
#define WS_BORDER 8388608
external(INT, "CreateWindow", "CreateWindowExA", "User32.dll" );
external(INT, "WindowFromPoint", "WindowFromPoint", "User32.dll");
external(INT, "GetParent", "GetParent", "User32.dll");
createdialog(0);
showdialog(0, "Dialog0", 0, 0, 300, 200, 1, 1);
int b0, h0, Handle_Controls, Mouse_x, Mouse_y;
loop()
{
getmouse(Mouse_x, Mouse_y);
Handle_Controls=WindowFromPoint(Mouse_x, Mouse_y);
if(Handle_Controls == h0 || GetParent(Handle_Controls) == h0) // если курсор над Dialog0
{
textbkcolor(255, 65280);
textout(1, 300, 320, "Курсор над Dialog0", 1);
}
else
{
textbkcolor(65280, 255);
textout(1, 300, 320, "Курсор не над Dialog0", 1);
}
sleep(100);
}
function getmessage(0, WM_CREATE)
{
h0=gethwnd(0);
b0=CreateWindow(0, "BUTTON", "Кнопка", WS_BORDER | WS_CHILD | WS_VISIBLE, 20, 10, 80, 25, gethwnd(0), 0, 0, 0); // создать кнопку
} |
|
|
007wan |
Отправлено: 17 Сентября, 2019 - 15:40:23
|
Эксперт
Покинул форум
Сообщений всего: 1837
Дата рег-ции: Март 2017
Репутация: -2
|
Код (Отобразить)CODE:function Emulation_Effects()
{
getmouse(Mouse_x, Mouse_y);
int Handle_Controls = WindowFromPoint(Mouse_x, Mouse_y);
for (int i=0; i<sizearray(Object_Checkbox); i++)
{
if (Handle_Controls == Object_Checkbox[i] ||
Handle_Controls == Object_Checkbox2[i] ||
Handle_Controls == Object_Button1 ||
Handle_Controls == Object_Button2 ||
Handle_Controls == Object_Button3 ||
Handle_Controls == Object_Static3 ||
Handle_Controls == Object_Static4)
{
SetCursor(Object_Cursor1);
sleep(10);
break;
}
//===========
if (Handle_Controls == Object_Edit1)
{
SetCursor(Object_Cursor2);
sleep(10);
break;
}
//============
if (Flash == 1)
{
if(getkeystate(1) || getkeystate(2) || getkeystate(4))
{
setwindowparam(MainWindow);
Rect_Dialog[0] = MainWindow.left;
Rect_Dialog[1] = MainWindow.top;
Rect_Dialog[2] = MainWindow.left+MainWindow.width;
Rect_Dialog[3] = MainWindow.top+MainWindow.height;
if(Handle_Controls == gethwnd(0) || GetParent(Handle_Controls) == gethwnd(0))
{
if(PtInRect(address(#Rect_Dialog[0]), Mouse_x, Mouse_y))
{
FlashWindowEx(address(#FLASHWINFO[0]));
break;
}
}
}
}
}
} Сейчас всё работает нормально, и не нужно лишнего гавна в столбик, и есть один минус, что при перемещении дочернего окна(Настройки) над основным(Основное, которое открывает настройки), начинает мигать, но не всегда, а так в целом нормально. А при щелчке ЛКМ, СКМ, ПКМ - по основному в момент открытых настроек блокировано само окно основное и кроме того настройки начинают мигать как задумывалось. Спасибо.
(Добавление)
Эту кучу так оставить?CODE: if (Handle_Controls == Object_Checkbox[i] ||
Handle_Controls == Object_Checkbox2[i] ||
Handle_Controls == Object_Button1 ||
Handle_Controls == Object_Button2 ||
Handle_Controls == Object_Button3 ||
Handle_Controls == Object_Static3 ||
Handle_Controls == Object_Static4)
{
SetCursor(Object_Cursor1);
sleep(10);
break;
}
(Добавление)
Даже можно, например, добавить курсор для всех контролов "Руку"(C:\Windows\Cursors\aero_link.cur), а для эдита - луч(C:\Windows\Cursors\beam_r.cur). А еще, а эти курсоры нужно паковать в ресы? мало ли нету у кого их на компьютере.
(Добавление)
Почему при проверку Хеша изображения, он получается такой какой был? Ведь я удалил изоброажение, а после запуска кода Хеш остается таким же, хотя изображение удалено.
Я думал оно возрвратит что-то из ряда "-1" или же "0"
(Добавление)
Кому нужен код.
Код (Отобразить)CODE:
char Md5[32];
string Hash_Images[3] =
{"7330666d94ccf730d332fcf311e09eea",//вставить через копипастира
"33042642b0f9d1c13db4b3a43c540613",
"6aec253fda23825e879ac87cf822037a"};//свой хеш для 3 картинок(или более: изменить массив)
int Verify_Image[3];
for (int gh=0; gh<sizearray(Hash_Images); gh++)
{
if(fopen(temp_fold+"Image_"+format(gh)+".bmp", "r") != 0)//если открылся
{
if(HashMD5(temp_fold+"Image_"+format(gh)+".bmp", address(#Md5[0])))//читаем хеш
{
/*
writeclipboard(format(#Md5[0]));//записать в буфер хеш, что бы втсавить в массив
messagebox(format(#Md5[0]));//после каждого сообщения останавливать скрипт моментально (удерживая остановку скрипта, сочетание)
*/
if(format(#Md5[0]) == Hash_Images[gh])//сравниваем хеш с написанным, который в массиве
{
Verify_Image[gh] = 1;//если совпадает
}
else
{
Verify_Image[gh] = 0;//если нет
}
}
}
else
{
Verify_Image[gh] = 0;//если не открылась картинка
}
}
messagebox(Verify_Image[0]);//проверяем
messagebox(Verify_Image[1]);
messagebox(Verify_Image[2]);
(Добавление)
Где-то пару страниц выше должна быть библиотека и external просто я тороплюсь очень, завтра поищу.
(Добавление)
Этот код проверяет на открытие картинок, а так же на некий ключ, который изменяется взависимости от изменения изображения, если бы Md5 возращал переменную, при которой нету файла, то fopen не понадобился
(Добавление)
007wan пишет: который изменяется взависимости от изменения изображения Например, изменении в паинте(Отредактировано автором: 17 Сентября, 2019 - 15:49:25) |
|
|
Zireael |
Отправлено: 18 Сентября, 2019 - 01:50:05
|
Эксперт
Покинул форум
Сообщений всего: 4464
Дата рег-ции: Нояб. 2017
Репутация: 585
|
Цитата: хотя изображение удалено.
Я думал оно возрвратит что-то из ряда "-1" или же "0"
Если файл не найден или не открылся, то возвращает 0. Так что fopen можно убрать. Кстати, файлы открываются fopen, но не закрываются fclose.
Цитата: А еще, а эти курсоры нужно паковать в ресы?
Если нужны конкретно эти, то да. Стандартные не нужно, идентификаторы есть в описании LoadCursorA. |
|
|
007wan |
Отправлено: 18 Сентября, 2019 - 07:31:01
|
Эксперт
Покинул форум
Сообщений всего: 1837
Дата рег-ции: Март 2017
Репутация: -2
|
LoadCursorA там никак.требуется макрос маитресурсе кауой то
(Добавление)
Zireael пишет: Если файл не найден или не открылся, то возвращает 0. Так что fopen можно убрать. Не правда. Я вчера сидел и 100500 раз проверял. Не возвращает 0
CODE: for (int gh=0; gh<sizearray(Hash_Images); gh++)
{
if(fopen(temp_fold+"Image_"+format(gh)+".bmp", "r") != 0)
{
if(HashMD5(temp_fold+"Image_"+format(gh)+".bmp", address(#Md5[0])))
{
if(format(#Md5[0]) == Hash_Images[gh])
{
Verify_Image[gh] = 1;
}
else
{
Verify_Image[gh] = 0;
}
}
}
else
{
Verify_Image[gh] = 0;
}
}
messagebox(Verify_Image[0]);
messagebox(Verify_Image[1]);
messagebox(Verify_Image[2]);[quote=Zireael]. Кстати, файлы открываются fopen, но не закрываются fclose.[/quote] Не правда. Закрываются в скрипте выше... |
|
|
|