007wan |
Отправлено: 16 Марта, 2019 - 16:01:53
|
Эксперт
Покинул форум
Сообщений всего: 1837
Дата рег-ции: Март 2017
Репутация: -2
|
Zireael , Узнать ЦП в %, у меня визуальное окно жрет много и комп виснет. На мощном компьютрере почти за 60% заходит, а на старом, не смотрел, но виснет хорошо, да и софт там галимый, я хочу узнать сколько будет в %, что бы он автоматически отключал визуальное окно при определенном % загрузки ЦП
(Добавление)
А еще не могу найти как добавить текст в Эдит, потому что SendMessage(Edit1, WM_SETTEXT, 0, "Текст", 0); Только заменяет, а не добавляет в эдит или же если такого нету, то тогда как перевести строку в эдит и добавить последующий текст
А еще UPPERCASE и LOWERCASE не пашут, хотя я прочитал и там написано, что нужно SetWindowLong, может сюда что-то надо добавить? SetWindowLong(HWND, -16, GetWindowLong(HWND, -16)+WS_SIZEBOX); |
|
|
Zireael |
Отправлено: 16 Марта, 2019 - 16:16:12
|
Эксперт
Покинул форум
Сообщений всего: 4464
Дата рег-ции: Нояб. 2017
Репутация: 585
|
Цитата: Узнать ЦП в %
CODE:external(INT, "GetSystemTimes", "GetSystemTimes", "Kernel32.dll");
int idle[2], idle2[2];
int kernel[2], kernel2[2];
int user[2], user2[2];
loop()
{
GetSystemTimes(address(#idle2[0]), address(#kernel2[0]), address(#user2[0]));
sleep(1400); // подобрать значение
GetSystemTimes(address(#idle[0]), address(#kernel[0]), address(#user[0]));
int sys = (user[0] - user2[0]) + (kernel[0] - kernel2[0]);
int cpu = (sys - idle[0] + idle2[0]) * 100 / sys;
if(cpu<=100)textout(0, 300, 300, "Загрузка цп "+format(cpu)+"%", 2);
}
Цитата: А еще UPPERCASE и LOWERCASE не пашут
CODE:#define WS_VISIBLE 268435456
#define WS_CHILD 1073741824
#define WS_BORDER 8388608
#define ES_UPPERCASE 8
external(INT, "CreateWindow", "CreateWindowExA", "User32.dll" );
int edit1;
createdialog(0);
showdialog(0, "Диалог", 100, 100, 300, 300, 1, 1);
loop()sleep(1);
function getmessage(0, WM_CREATE)
{
edit1=CreateWindow(0, "EDIT", "", WS_VISIBLE | WS_CHILD | WS_BORDER | ES_UPPERCASE, 10, 10, 100, 20, gethwnd(0), 0, 0, 0);
}
Цитата: как добавить текст в Эдит
Получить текст, добавить нужный текст, изменить текст в edit. |
|
|
007wan |
Отправлено: 16 Марта, 2019 - 16:40:49
|
Эксперт
Покинул форум
Сообщений всего: 1837
Дата рег-ции: Март 2017
Репутация: -2
|
Zireael пишет: Zireael , Если я правильно понял, то UPPERCASE преобразует верхний текст в нижний регистр я так же все сделал и подумал, что он все верхний символы вбивает внизу, это так? или как? что вообще означают эти оба)) CODE:#define WS_VISIBLE 268435456
#define WS_CHILD 1073741824
#define WS_BORDER 8388608
#define ES_UPPERCASE 8
external(INT, "CreateWindow", "CreateWindowExA", "User32.dll" );
int edit1;
createdialog(0);
showdialog(0, "Диалог", 100, 100, 300, 300, 1, 1);
loop()sleep(1);
function getmessage(0, WM_CREATE)
{
edit1=CreateWindow(0, "EDIT", "", WS_VISIBLE | WS_CHILD | WS_BORDER | ES_UPPERCASE, 10, 10, 100, 20, gethwnd(0), 0, 0, 0);
} |
|
|
007wan |
Отправлено: 16 Марта, 2019 - 16:46:51
|
Эксперт
Покинул форум
Сообщений всего: 1837
Дата рег-ции: Март 2017
Репутация: -2
|
CODE:#define WS_VISIBLE 268435456
#define WS_CHILD 1073741824
#define WS_BORDER 8388608
#define ES_UPPERCASE 8
#define ES_LOWERCASE 16
#define ES_AUTOHSCROLL 128
#define ES_UPPERCASE 8
#define ES_MULTILINE 4
#define ES_WANTRETURN 4096
#define ES_LOWERCASE 16
#define ES_READONLY 2048
#define WS_VISIBLE 268435456
#define WS_CHILD 1073741824
#define WS_BORDER 8388608
#define WS_SIZEBOX 262144
#define WS_CHILD 1073741824
#define WS_HSCROLL 1048576
#define WS_VSCROLL 2097152
external(INT, "CreateWindow", "CreateWindowExA", "User32.dll" );
int edit1;
createdialog(0);
showdialog(0, "Диалог", 100, 100, 300, 300, 1, 1);
loop()sleep(1);
function getmessage(0, WM_CREATE)
{
edit1=CreateWindow(0, "EDIT", "Этот текст должен быть в самом внизу ", ES_MULTILINE | ES_AUTOHSCROLL | ES_WANTRETURN | WS_HSCROLL | WS_VSCROLL | WS_VISIBLE | WS_CHILD | WS_BORDER | ES_UPPERCASE, 10, 10, 200, 200, gethwnd(0), 0, 0, 0);
}
(Добавление)
Zireael , Ааааа. Блин.
(Добавление)
Zireael , А что получается никак не сдалать это: весь вводимый текст оседает внизу эдита(вверху код) и поднимается вверх? |
|
|
Zireael |
Отправлено: 16 Марта, 2019 - 20:58:09
|
Эксперт
Покинул форум
Сообщений всего: 4464
Дата рег-ции: Нояб. 2017
Репутация: 585
|
Цитата: весь вводимый текст оседает внизу эдита(вверху код) и поднимается вверх?
code (Отобразить)CODE:#define WS_VISIBLE 268435456
#define WS_CHILD 1073741824
#define WS_BORDER 8388608
#define WS_HSCROLL 1048576
#define WS_VSCROLL 2097152
#define ES_UPPERCASE 8
#define ES_AUTOHSCROLL 128
#define ES_MULTILINE 4
#define ES_WANTRETURN 4096
#define ES_READONLY 2048
#define ES_AUTOVSCROLL 64
#define EM_SETRECT 179
#define EM_SETSEL 177
#define EM_SCROLLCARET 183
external(INT, "CreateWindow", "CreateWindowExA", "User32.dll" );
external(INT, "GetFocus", "GetFocus", "User32.dll" );
external(INT, "SetFocus", "SetFocus", "User32.dll" );
int edit1;
int rect[4]={5, 150, 190, 170}; // прямоугольник, в котором можно вводить текст
char text[999999];
createdialog(0);
showdialog(0, "Диалог", 100, 100, 300, 300, 1, 1);
enabletimer(0);
loop()sleep(1);
function getmessage(0, WM_CREATE)
{
edit1=CreateWindow(0, "EDIT", "", WS_VSCROLL | WS_HSCROLL | ES_MULTILINE | ES_WANTRETURN | WS_VISIBLE | WS_CHILD | WS_BORDER | ES_UPPERCASE, 10, 10, 200, 200, gethwnd(0), 0, 0, 0);
sendmessage(EM_SETRECT, 0, address(#rect[0]), formatiw(edit1));
SetFocus(edit1);
}
CREATE_TIMER(0, 20)
{
if(getkeystate(RETURN) && GetFocus()==edit1) // если нажат Enter и курсор находится в edit
{
while(getkeystate(RETURN))sleep(10); // ждать пока Enter нажат
// если верхняя граница прямоугольника больше 20, то уменьшаем её
if(rect[1]>20){rect[1]=rect[1]-16; sendmessage(EM_SETRECT, 0, address(#rect[0]), formatiw(edit1));}
else sendmessage(EM_SETRECT, 0, 0, formatiw(edit1)); // иначе убираем прямоугольник, в котором можно вводить текст
sendmessage(EM_SETSEL, size(#text[0]), size(#text[0]), formatiw(edit1)); // перевести курсор в конец текста
sendmessage(EM_SCROLLCARET, 0, 0, formatiw(edit1)); // скролл к концу текста
}
} |
|
|
Zireael |
Отправлено: 17 Марта, 2019 - 18:24:56
|
Эксперт
Покинул форум
Сообщений всего: 4464
Дата рег-ции: Нояб. 2017
Репутация: 585
|
Цитата: А можно ли с помощью external реализовать связь с другими программами и посылать им команды?
Sendmessage и все функции что используют хендл.
Цитата: А как найти нужное окно с помощью external?
CODE:external(INT, "FindWindow", "FindWindowA", "User32.dll");
int handle;
string name="Новый текстовый документ.txt — Блокнот"; // имя окна
string class="Notepad"; // класс окна
handle=FindWindow(class, 0); // поиск по классу
if(handle)messagebox("Хендл окна: "+format(handle));
else messagebox("Окно по классу не найдено");
handle=FindWindow(0, name); // поиск по имени
if(handle)messagebox("Хендл окна: "+format(handle));
else messagebox("Окно по имени не найдено");
handle=FindWindow(class, name); // поиск по классу и имени
if(handle)messagebox("Хендл окна: "+format(handle));
else messagebox("Окно по классу и имени не найдено");
// win w=window (-1, "Notepad", -1);
// messagebox("Хендл: "+format(formatwi(w)));
FindWindow не ищет дочерние окна. Если окон несколько, находит то, которое было активно последним, в отличие от функции window(), которая находит первое запущенное окно. |
|
|
|