Обмен данными между Kibor и Python через Shared memory
Требуется:
Цитата:
Заходим на сайт телеграма:(для просмотра ссылки Вам необходимо авторизоваться) Вводим телефон и ждем код подтверждения на родном клиенте телеграма.
Заходим в пункт "API". Ищем "Telegram API" и заходим в "Creating an application" (https://my.telegram.org/apps).
Заполняем поля App title и Short name, нажимаем «Create application» и запоминаем две переменные: api_id и api_hash.
Цитата:
Найдите бота @BotFather в Телеграм. Это официальный бот, созданный специально для управления ботами.
Отправьте ему команду:
/newbot
@BotFather спросит вас, как вы назовёте вашего бота. Следующим сообщением отправьте его название, заканчивающееся на «_bot».
Запишите полученный токен от @BotFather — это ключ для работы с Telegram API.
В config.ini записать полученные api_id и api_hash.
В button.py, в переменную chat, записать свой user_id
Найти через поиск своего бота(начать диалог).
При первом запуске button.py потребуется указать Token бота.
P.s.Использовался Python версии 3.8.6, Telethon 1.19.4
(Добавление)
Python (Отобразить)
Kibor (Отобразить)
CODE:
#define FORMAT_MESSAGE_FROM_SYSTEM 4096
#define FORMAT_MESSAGE_IGNORE_INSERTS 512
#define PAGE_READWRITE 4
#define FILE_MAP_READ 4
#define FILE_MAP_WRITE 2
#define FALSE 0
#define NULL 0
#define INVALID_HANDLE_VALUE -1
#define WS_VISIBLE 268435456
#define WS_CHILD 1073741824
#define WS_BORDER 8388608
external(VOID, "RtlMoveMemory", "RtlMoveMemory", "Ntdll.dll" );
external(INT, "FormatMessage", "FormatMessageA", "kernel32.dll");
external(INT, "CreateFileMapping", "CreateFileMappingA", "Kernel32.dll" );
external(INT, "OpenFileMapping", "OpenFileMappingA", "Kernel32.dll" );
external(INT, "MapViewOfFile", "MapViewOfFile", "Kernel32.dll" );
external(INT, "CloseHandle", "CloseHandle", "Kernel32.dll" );
external(INT, "UnmapViewOfFile", "UnmapViewOfFile", "Kernel32.dll" );
external(INT, "GetLastError", "GetLastError", "Kernel32.dll" );
external(INT, "CreateWindow", "CreateWindowExA", "User32.dll" );
external(INT, "SetWindowLong", "SetWindowLongA", "User32.dll" );
external(INT, "SetWindowText", "SetWindowTextA", "User32.dll" );
string mappingname = "EventName";//Имя "отображаемого" объекта.
int hFileMapping;
int lpFileMap;
char message[5];
char flag[5];
flag[0]='0';
flag[1]='0';
flag[2]='0';
flag[3]='0';
flag[4]=0;
int a=0, b=0;
int b0=0, b1=0, be, fl=0;
hFileMapping = CreateFileMapping(INVALID_HANDLE_VALUE, NULL, PAGE_READWRITE, 0, 100, mappingname);
if(hFileMapping==0)
{
error_text("Ошибка CreateFileMapping: ");
goto end;
}
lpFileMap = MapViewOfFile(hFileMapping, FILE_MAP_READ | FILE_MAP_WRITE, 0, 0, 0);
if(lpFileMap==0)
{
error_text("Ошибка MapViewOfFile: ");
goto end;
}
createdialog(1);
showdialog(1, "Диалог",740, 525, 198, 78, 1, 1);
SetWindowLong(gethwnd(1), -16, WS_VISIBLE);
enabletimer(1);
RtlMoveMemory(lpFileMap, address(#flag[0]), size(#flag[0]));
looptime(45000)
{
if(flag[1]=='1')
{
textout(0, 780, 480, format(a), 1);
a++;
}
if(flag[2]=='1')
{
textout(1, 876, 480, format(b), 1);
b++;
}
sleep(1);
}
function error_text(string er_text)
+HIDE0>{
int error=GetLastError();
char message_2[999];
FormatMessage(FORMAT_MESSAGE_FROM_SYSTEM | FORMAT_MESSAGE_IGNORE_INSERTS, 0, error, 0, address(#message_2[0]), sizearray(message_2), 0);
messagebox(er_text+format(#message_2[0])+"("+ format(error)+")");
}/HIDE0>
function getmessage(1, WM_CREATE)
+HIDE1>
{
b0=CreateWindow(0, "BUTTON", "T1 старт", WS_CHILD | WS_VISIBLE, -2, -2, 100, 40, gethwnd(1), 0, 0, 0); // создать кнопку
b1=CreateWindow(0, "BUTTON", "T2 старт", WS_CHILD | WS_VISIBLE, 98, -2, 100, 40, gethwnd(1), 0, 0, 0); // создать кнопку
be=CreateWindow(0, "BUTTON", "Exit", WS_CHILD | WS_VISIBLE, -2, 38, 200, 40, gethwnd(1), 0, 0, 0); // создать кнопку
}/HIDE1>
function getmessage(1, WM_COMMAND)
+HIDE2>
{
if(message.lparam==b0)
{
if(flag[1]=='1')
{
flag[1]='0';
SetWindowText(b0, "T1 старт");
}
else
{
flag[1]='1'; //указали что нажата первая кнопка(Т1)
SetWindowText(b0, "T1 пауза");
}
flag[0]='1'; //указали что есть новые данные для Python
RtlMoveMemory(lpFileMap, address(#flag[0]), size(#flag[0])); //"записали в память"
}
if(message.lparam==b1)
{
if(flag[2]=='1')
{
flag[2]='0';
SetWindowText(b1, "T2 старт");
}
else
{
flag[2]='1'; //указали что нажата вторая кнопка(Т2)
SetWindowText(b1, "T2 пауза");
}
flag[0]='1'; //указываем что есть новые данные для Python
RtlMoveMemory(lpFileMap, address(#flag[0]), size(#flag[0])); //"записали в память"
}
if(message.lparam==be)
{
flag[3]='1'; //указали что нажата третья кнопка(Exit)
flag[0]='1'; //указываем что есть новые данные для Python
RtlMoveMemory(lpFileMap, address(#flag[0]), size(#flag[0])); //"записали в память"
disabletimer(1);
pause(100);
goto global end;
}
}/HIDE2>
CREATE_TIMER(1, 1)//
+HIDE3>
{
sleep(10);
RtlMoveMemory(address(#message[0]), lpFileMap, 5);//Считывание с памяти.
if(message[0]=='2') //Если "2" то "поступили" новые данные с Python.
{
message[0]='0'; //Изменили на "0",указали что прочитали данные
RtlMoveMemory(lpFileMap, address(#message[0]), 1);//отправили что прочитано
if(message[1]!=flag[1]) //Проверка состояния первой кнопки
{
if(message[1]=='0')
{
flag[1]='0';
SetWindowText(b0, "T1 старт");
}
else
{
flag[1]='1';
SetWindowText(b0, "T1 пауза");
}
}
if(message[2]!=flag[2]) //Проверка состояния второй кнопки
{
if(message[2]=='0')
{
flag[2]='0';
SetWindowText(b1, "T2 старт");
}
else
{
flag[2]='1';
SetWindowText(b1, "T2 пауза");
}
}
if(message[3]!=flag[3]) //Проверка состояния кнопки Exit
{
if(message[3]=='1') //Если "1" значит была нажата
{
disabletimer(1);
pause(100);
goto global end;
}
}
}
}/HIDE3>
end:
if(UnmapViewOfFile(lpFileMap)!=1)//Отменяет отображение.
{
error_text("Ошибка UnmapViewOfFile: ");
}
if(CloseHandle(hFileMapping)!=1)//Закрывает дескриптор созданного объекта.
{
error_text("Ошибка CloseHandle: ");
}
#define FORMAT_MESSAGE_FROM_SYSTEM 4096
#define FORMAT_MESSAGE_IGNORE_INSERTS 512
#define PAGE_READWRITE 4
#define FILE_MAP_READ 4
#define FILE_MAP_WRITE 2
#define FALSE 0
#define NULL 0
#define INVALID_HANDLE_VALUE -1
#define WS_VISIBLE 268435456
#define WS_CHILD 1073741824
#define WS_BORDER 8388608
external(VOID, "RtlMoveMemory", "RtlMoveMemory", "Ntdll.dll" );
external(INT, "FormatMessage", "FormatMessageA", "kernel32.dll");
external(INT, "CreateFileMapping", "CreateFileMappingA", "Kernel32.dll" );
external(INT, "OpenFileMapping", "OpenFileMappingA", "Kernel32.dll" );
external(INT, "MapViewOfFile", "MapViewOfFile", "Kernel32.dll" );
external(INT, "CloseHandle", "CloseHandle", "Kernel32.dll" );
external(INT, "UnmapViewOfFile", "UnmapViewOfFile", "Kernel32.dll" );
external(INT, "GetLastError", "GetLastError", "Kernel32.dll" );
external(INT, "CreateWindow", "CreateWindowExA", "User32.dll" );
external(INT, "SetWindowLong", "SetWindowLongA", "User32.dll" );
external(INT, "SetWindowText", "SetWindowTextA", "User32.dll" );
string mappingname = "EventName";//Имя "отображаемого" объекта.
int hFileMapping;
int lpFileMap;
char message[5];
char flag[5];
flag[0]='0';
flag[1]='0';
flag[2]='0';
flag[3]='0';
flag[4]=0;
int a=0, b=0;
int b0=0, b1=0, be, fl=0;
hFileMapping = CreateFileMapping(INVALID_HANDLE_VALUE, NULL, PAGE_READWRITE, 0, 100, mappingname);
if(hFileMapping==0)
{
error_text("Ошибка CreateFileMapping: ");
goto end;
}
lpFileMap = MapViewOfFile(hFileMapping, FILE_MAP_READ | FILE_MAP_WRITE, 0, 0, 0);
if(lpFileMap==0)
{
error_text("Ошибка MapViewOfFile: ");
goto end;
}
createdialog(1);
showdialog(1, "Диалог",740, 525, 198, 78, 1, 1);
SetWindowLong(gethwnd(1), -16, WS_VISIBLE);
enabletimer(1);
RtlMoveMemory(lpFileMap, address(#flag[0]), size(#flag[0]));
looptime(45000)
{
if(flag[1]=='1')
{
textout(0, 780, 480, format(a), 1);
a++;
}
if(flag[2]=='1')
{
textout(1, 876, 480, format(b), 1);
b++;
}
sleep(1);
}
function error_text(string er_text)
+HIDE0>{
int error=GetLastError();
char message_2[999];
FormatMessage(FORMAT_MESSAGE_FROM_SYSTEM | FORMAT_MESSAGE_IGNORE_INSERTS, 0, error, 0, address(#message_2[0]), sizearray(message_2), 0);
messagebox(er_text+format(#message_2[0])+"("+ format(error)+")");
}/HIDE0>
function getmessage(1, WM_CREATE)
+HIDE1>
{
b0=CreateWindow(0, "BUTTON", "T1 старт", WS_CHILD | WS_VISIBLE, -2, -2, 100, 40, gethwnd(1), 0, 0, 0); // создать кнопку
b1=CreateWindow(0, "BUTTON", "T2 старт", WS_CHILD | WS_VISIBLE, 98, -2, 100, 40, gethwnd(1), 0, 0, 0); // создать кнопку
be=CreateWindow(0, "BUTTON", "Exit", WS_CHILD | WS_VISIBLE, -2, 38, 200, 40, gethwnd(1), 0, 0, 0); // создать кнопку
}/HIDE1>
function getmessage(1, WM_COMMAND)
+HIDE2>
{
if(message.lparam==b0)
{
if(flag[1]=='1')
{
flag[1]='0';
SetWindowText(b0, "T1 старт");
}
else
{
flag[1]='1'; //указали что нажата первая кнопка(Т1)
SetWindowText(b0, "T1 пауза");
}
flag[0]='1'; //указали что есть новые данные для Python
RtlMoveMemory(lpFileMap, address(#flag[0]), size(#flag[0])); //"записали в память"
}
if(message.lparam==b1)
{
if(flag[2]=='1')
{
flag[2]='0';
SetWindowText(b1, "T2 старт");
}
else
{
flag[2]='1'; //указали что нажата вторая кнопка(Т2)
SetWindowText(b1, "T2 пауза");
}
flag[0]='1'; //указываем что есть новые данные для Python
RtlMoveMemory(lpFileMap, address(#flag[0]), size(#flag[0])); //"записали в память"
}
if(message.lparam==be)
{
flag[3]='1'; //указали что нажата третья кнопка(Exit)
flag[0]='1'; //указываем что есть новые данные для Python
RtlMoveMemory(lpFileMap, address(#flag[0]), size(#flag[0])); //"записали в память"
disabletimer(1);
pause(100);
goto global end;
}
}/HIDE2>
CREATE_TIMER(1, 1)//
+HIDE3>
{
sleep(10);
RtlMoveMemory(address(#message[0]), lpFileMap, 5);//Считывание с памяти.
if(message[0]=='2') //Если "2" то "поступили" новые данные с Python.
{
message[0]='0'; //Изменили на "0",указали что прочитали данные
RtlMoveMemory(lpFileMap, address(#message[0]), 1);//отправили что прочитано
if(message[1]!=flag[1]) //Проверка состояния первой кнопки
{
if(message[1]=='0')
{
flag[1]='0';
SetWindowText(b0, "T1 старт");
}
else
{
flag[1]='1';
SetWindowText(b0, "T1 пауза");
}
}
if(message[2]!=flag[2]) //Проверка состояния второй кнопки
{
if(message[2]=='0')
{
flag[2]='0';
SetWindowText(b1, "T2 старт");
}
else
{
flag[2]='1';
SetWindowText(b1, "T2 пауза");
}
}
if(message[3]!=flag[3]) //Проверка состояния кнопки Exit
{
if(message[3]=='1') //Если "1" значит была нажата
{
disabletimer(1);
pause(100);
goto global end;
}
}
}
}/HIDE3>
end:
if(UnmapViewOfFile(lpFileMap)!=1)//Отменяет отображение.
{
error_text("Ошибка UnmapViewOfFile: ");
}
if(CloseHandle(hFileMapping)!=1)//Закрывает дескриптор созданного объекта.
{
error_text("Ошибка CloseHandle: ");
}