powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Delphi [игнор отключен] [закрыт для гостей] / PascalScript и функция SendMessage
24 сообщений из 24, страница 1 из 1
PascalScript и функция SendMessage
    #40040610
Фотография Tech N9ne
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Привет! Пытаюсь с помощью PascalScript послать чужому окну нажатие клавиши.
В приват секции описываю свою процедуру:
Код: pascal
1.
procedure SendKey(window: PWideChar; Key: Word); // название окна и кнопка


Регистрирую свою процедуру:
Код: pascal
1.
2.
3.
4.
procedure TForm1.PSScript1Compile(Sender: TPSScript);
begin
  Sender.AddMethod(Self, @TForm1.SendKey, 'procedure SendKey(window: PWideChar; Key: Word);');
end;


Сама процедура:
Код: pascal
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
procedure TForm1.SendKey(window: PWideChar; Key: Word);
var
  H: HWND;
begin
  H := FindWindow(nil, window); // ищу окно
  if H <> 0 then
  begin
    SendMessage(H, WM_KEYDOWN,  Key, MakeLong(0, MapVirtualKey(Key, 0))); // пытаюсь в окно послать нажатие клавиши
    SendMessage(H, WM_KEYUP, Key, MakeLong(0, MapVirtualKey(Key, 0)));
  end;
end;



Код: pascal
1.
2.
3.
4.
5.
6.
7.
8.
if PSScript1.Compile then // если скомпилилось, значит всё ок, можно запускать
begin
PSScript1.Execute;
end
else // если скомпилировать не получилось...
begin
showmessage(что-то не так.);
end;



Сама Delphi компилирует программу без ошибок.
В редакторе кода своей программы (memo), пишу ту самую процедуру:
Код: pascal
1.
SendKey('Counter-Strike', $20);  // пытаюсь в окно кс послать нажатие пробела


Но PSScript1 не может её скомпилировать..

До этого я сделал еще несколько процедур, типа эмуляция кликов, эмуляция нажатия клавиш - всё работает.
А с SendMessage непонятные проблемы, которые как я очень надеюсь, вы поможете мне решить))

ЗЫ SendMessage просит Cardinal, а я передаю Word. Но я пробовал передавать и Cardinal, тоже не компилируется..
Помогите пожалуйста.
...
Рейтинг: 0 / 0
PascalScript и функция SendMessage
    #40040613
ъъъъъ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Tech N9ne
Но PSScript1 не может её скомпилировать..

Как ты узнал, что "не может"?
...
Рейтинг: 0 / 0
PascalScript и функция SendMessage
    #40040618
Фотография Tech N9ne
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ъъъъъ
Tech N9ne
Но PSScript1 не может её скомпилировать..

Как ты узнал, что "не может"?

if PSScript1.Compile then // если скомпилилось, значит всё ок, можно запускать
begin
PSScript1.Execute;
end
else // если скомпилировать не получилось...
begin
showmessage(что-то не так.);
end;

Узнал потому что срабатывает showmessage)
...
Рейтинг: 0 / 0
PascalScript и функция SendMessage
    #40040621
ъъъъъ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Tech N9ne
Узнал потому что срабатывает showmessage)

То есть, компиляция выполнилась?

А отладчик? Ну, тупо в интерпретаторе воткнуть брекпоинт в точке, где вызывается процедура и посмотреть?
...
Рейтинг: 0 / 0
PascalScript и функция SendMessage
    #40040628
Фотография Tech N9ne
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ъъъъъ
Tech N9ne
Узнал потому что срабатывает showmessage)

То есть, компиляция выполнилась?

А отладчик? Ну, тупо в интерпретаторе воткнуть брекпоинт в точке, где вызывается процедура и посмотреть?

Я никогда не пользовался брейпоинтами, не знаю даже куда смотреть..
На скрине переменная i и poz
я проверяю,, если в конце строк в мемо нет " ; ", то ставлю. Сделано для удобства..
В остальном, я не понимаю, куда смотреть, что искать) Извините за тупость))
Брейкпоинт поставил на
Код: pascal
1.
if PSScript1.Compile then 


...
Рейтинг: 0 / 0
PascalScript и функция SendMessage
    #40040629
ъъъъъ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Tech N9ne
В остальном, я не понимаю, куда смотреть, что искать) Извините за тупость))


Нет, не извиняю. Вот - начало цикла статей: https://habr.com/ru/post/178007/
Изучай.
...
Рейтинг: 0 / 0
PascalScript и функция SendMessage
    #40040631
Фотография wadman
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Tech N9ne
Сама процедура:
Код: pascal
1.
procedure TForm1.SendKey(window: PWideChar; Key: Word);


У этой процедуры есть негласный параметр Self, который передается первым.
...
Рейтинг: 0 / 0
PascalScript и функция SendMessage
    #40040632
ъъъъъ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
wadman
Tech N9ne
Сама процедура:
Код: pascal
1.
procedure TForm1.SendKey(window: PWideChar; Key: Word);



У этой процедуры есть негласный параметр Self, который передается первым.

В FastScript сие учитывается. Возможно, и в PascalScript тоже.
...
Рейтинг: 0 / 0
PascalScript и функция SendMessage
    #40040644
Фотография wadman
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ъъъъъ
В FastScript сие учитывается.

А как там предусмотрено, если процедура не объекту принадлежит? По разному регистрируются?
...
Рейтинг: 0 / 0
PascalScript и функция SendMessage
    #40040647
Фотография Tech N9ne
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ну в самом коде я не ошибся? Всё верно написал?
...
Рейтинг: 0 / 0
PascalScript и функция SendMessage
    #40040649
zedxxx
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Tech N9ne
Для начала, не помешает прочитать что пишет PascalScript при неудачной компиляции. В семплах есть пример :
Код: pascal
1.
2.
3.
4.
5.
6.
  if not Compiler.Compile(Script) then  // Compile the Pascal script into bytecode.
  begin
    for i := 0 to Compiler.MsgCount -1 do
      Writeln(Compiler.Msg[i].MessageToString);
      // You could raise an exception here.    
  end;
...
Рейтинг: 0 / 0
PascalScript и функция SendMessage
    #40040655
ъъъъъ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Регистрируется функция как описание + небольшой хинт.

Код: pascal
1.
2.
3.
4.
5.
6.
procedure TfrxReport.AddFunction(const FuncName: String;
  const Category: String = ''; const Description: String = '');
begin
  FScript.AddedBy := nil;
  FScript.AddMethod(FuncName, DoUserFunction, Category, Description);
end;



Пример:
Код: pascal
1.
2.
3.
4.
  AddFunction('procedure SetRegStr(aKey, aName, aValue : string)',
    'Турбо Архив, работа с реестром',
    'Заносит строковое значение aValue в переменную aName подключа aKey реестра.'
    );



В событии объекта скрипта OnUserFunction тупо анализируется имя метода и вызывается всё, что хочешь, хоть метод объекта, хоть просто функция
Код: pascal
1.
2.
3.
4.
5.
function TCustomAdvReport.KOnUserFunction(const aMethodName: string; var
  aParams: Variant): variant;
begin
  if AnsiSametext(aMethodName, 'SetRegStr') then
      SetRegStr(aParams[0], aParams[1], aParams[2]) // Вот



Точно также регистрируются и методы скриптовых классов, только при регистрации указывается специальный метод реализации. А в нем уже зовешь всё, что надо.
...
Рейтинг: 0 / 0
PascalScript и функция SendMessage
    #40040656
ъъъъъ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Tech N9ne
Ну в самом коде я не ошибся? Всё верно написал?

Иди про отладчик читай.
...
Рейтинг: 0 / 0
PascalScript и функция SendMessage
    #40040660
Фотография Tech N9ne
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
zedxxx
Tech N9ne
Для начала, не помешает прочитать что пишет PascalScript при неудачной компиляции. В семплах есть пример :
Код: pascal
1.
2.
3.
4.
5.
6.
  if not Compiler.Compile(Script) then  // Compile the Pascal script into bytecode.
  begin
    for i := 0 to Compiler.MsgCount -1 do
      Writeln(Compiler.Msg[i].MessageToString);
      // You could raise an exception here.    
  end;


...
Рейтинг: 0 / 0
PascalScript и функция SendMessage
    #40040661
Мимопроходящий
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ъъъъъ
Tech N9ne
Ну в самом коде я не ошибся? Всё верно написал?

Иди про отладчик читай.
и в ухо ему! в ухо! ©
...
Рейтинг: 0 / 0
PascalScript и функция SendMessage
    #40040663
ъъъъъ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Ну, а какой синтаксис регистрации новых функций?
...
Рейтинг: 0 / 0
PascalScript и функция SendMessage
    #40040665
Фотография Tech N9ne
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ъъъъъ
Tech N9ne
...

То есть, ты соврал:
Tech N9ne
Узнал потому что срабатывает showmessage)

Врать мне зачем? Я хочу решить проблему, я сам же и заинтересован в том, что бы объяснить свою проблему как она есть.
Я действительно не врал, и срабатывало "else".
...
Рейтинг: 0 / 0
PascalScript и функция SendMessage
    #40040666
Фотография Tech N9ne
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ъъъъъ
Ну, а какой синтаксис регистрации новых функций?

...
Рейтинг: 0 / 0
PascalScript и функция SendMessage
    #40040669
zedxxx
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Tech N9ne,
Попробуйте регистрировать не метод, а функцию (соответственно и SendKey объявить как простую процедуру, а не метод класса). Вы же в SendKey всё равно никаких полей формы не юзаете.
...
Рейтинг: 0 / 0
PascalScript и функция SendMessage
    #40040672
ъъъъъ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Tech N9ne
Код: pascal
1.
  Sender.AddMethod(Self, @TForm1.SendKey, 'procedure SendKey(window: PWideChar; Key: Word);');


А в PS есть типы PWideChar и Word?
...
Рейтинг: 0 / 0
PascalScript и функция SendMessage
    #40040676
zedxxx
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
ъъъъъ, Да, похоже загвоздка с PWideChar - такого типа действительно нету (так же, как и PAnsiChar). Есть только PChar, его и надо использовать.
...
Рейтинг: 0 / 0
PascalScript и функция SendMessage
    #40040682
Фотография Tech N9ne
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
zedxxx,
Да, теперь всё работает, спасибо огромное!
Всем спасибо ребят.
...
Рейтинг: 0 / 0
PascalScript и функция SendMessage
    #40040684
ъъъъъ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Tech N9ne
zedxxx,
Да, теперь всё работает, спасибо огромное!
Всем спасибо ребят.

Отладчик изучи, глупый.
...
Рейтинг: 0 / 0
PascalScript и функция SendMessage
    #40040685
Фотография Tech N9ne
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ъъъъъ
Tech N9ne
zedxxx,
Да, теперь всё работает, спасибо огромное!
Всем спасибо ребят.

Отладчик изучи, глупый.

оскорбление вполне уместное, заслужил.. согласен.
буду изучать
...
Рейтинг: 0 / 0
24 сообщений из 24, страница 1 из 1
Форумы / Delphi [игнор отключен] [закрыт для гостей] / PascalScript и функция SendMessage
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]