Форум по Delphi программированию

Delphi Sources



Вернуться   Форум по Delphi программированию > Все о Delphi > [ "Начинающим" ]
Ник
Пароль
Регистрация <<         Правила форума         >> FAQ Пользователи Календарь Поиск Сообщения за сегодня Все разделы прочитаны

Ответ
 
Опции темы Поиск в этой теме Опции просмотра
  #1  
Старый 06.12.2017, 00:29
usfire usfire вне форума
Прохожий
 
Регистрация: 25.02.2016
Сообщения: 20
Версия Delphi: Delphi 7
Репутация: 10
По умолчанию Помогите, вставка текста в другую программу

Меняется название окна , а нужно заполнение Edit

Код:
program Project1;



uses
  SysUtils,
  windows,
  dialogs,
  controls,
  messages;

var
  s: pchar;
  h,h1: HWND;
begin
  s:= 's11';
  h := FindWindow(nil,'хендл  программы');
  h1 := FindWindowEx(h1, 0, 'EDIT', 'хендл  программы');
  SendMessage(h1, WM_SETTEXT, 0, LongInt(PCHAR(s)));



end.
Ответить с цитированием
  #2  
Старый 06.12.2017, 06:52
lmikle lmikle вне форума
Модератор
 
Регистрация: 17.04.2008
Сообщения: 8,004
Версия Delphi: 7, XE3, 10.2
Репутация: 49089
По умолчанию

Delphi 10.1 Berlin
Вот так работает:
Код:
procedure TForm1.Button1Click(Sender: TObject);
const
  str : String = 'test string';
var
  hp : HWND;
  he  :HWND;
  pstr : pchar;
begin
  hp := FindWindow(nil,'TestMainForm');
  If IsWindow(hp) Then
    Begin
      he := FindWindowEx(hp,0,'TEDIT',Nil);
      if IsWindow(he)
        Then
          Begin
            GetMem(pstr,SizeOf(Char)*(Length(str)+1));
            Try
              ZeroMemory(pstr,SizeOf(Char)*(Length(str)+1));
              StrPCopy(pstr,str);
              SendMessage(he,WM_SETTEXT,SizeOf(str),NativeInt(pstr))
            Finally
              freeMem(pstr,SizeOf(Char)*(Length(str)+1));
            End;
          End
        Else ShowMessage('Edit not found');
    End
  Else ShowMessage('Main window not found.');
end;
Второе приложение - просто форма с одним TEdit'ом.
Что будет, если на форме несколько TEdit - не проверял. Может быть потребуется сделать EnumWindow/GetWindowInfo для определения какой именно нужен.
Ответить с цитированием
  #3  
Старый 06.12.2017, 22:18
usfire usfire вне форума
Прохожий
 
Регистрация: 25.02.2016
Сообщения: 20
Версия Delphi: Delphi 7
Репутация: 10
По умолчанию

Цитата:
Сообщение от lmikle
Delphi 10.1 Berlin
Вот так работает:
Код:
procedure TForm1.Button1Click(Sender: TObject);
const
  str : String = 'test string';
var
  hp : HWND;
  he  :HWND;
  pstr : pchar;
begin
  hp := FindWindow(nil,'TestMainForm');
  If IsWindow(hp) Then
    Begin
      he := FindWindowEx(hp,0,'TEDIT',Nil);
      if IsWindow(he)
        Then
          Begin
            GetMem(pstr,SizeOf(Char)*(Length(str)+1));
            Try
              ZeroMemory(pstr,SizeOf(Char)*(Length(str)+1));
              StrPCopy(pstr,str);
              SendMessage(he,WM_SETTEXT,SizeOf(str),NativeInt(pstr))
            Finally
              freeMem(pstr,SizeOf(Char)*(Length(str)+1));
            End;
          End
        Else ShowMessage('Edit not found');
    End
  Else ShowMessage('Main window not found.');
end;
Второе приложение - просто форма с одним TEdit'ом.
Что будет, если на форме несколько TEdit - не проверял. Может быть потребуется сделать EnumWindow/GetWindowInfo для определения какой именно нужен.

ShowMessage('Edit not found')


выводит ошибку


како делал иначе функция блокировок клавиш + клавиатура 10 сек

далее через нажатие таб ввод таб ввод таб ентер

работало но хромало


а сейчас вообще не работает

Последний раз редактировалось usfire, 06.12.2017 в 22:22.
Ответить с цитированием
  #4  
Старый 06.12.2017, 23:12
lmikle lmikle вне форума
Модератор
 
Регистрация: 17.04.2008
Сообщения: 8,004
Версия Delphi: 7, XE3, 10.2
Репутация: 49089
По умолчанию

Конечно выдает ошибку. У тебя родительского окна нет. Или это компилятор выдает? Короче, замени его на любую диагностику, это не принципиально, просто для отладки извещение, что нужное окно не найдено.

отсальной поток создания не распознан. выражай свои мысли более понятно.
Ответить с цитированием
  #5  
Старый 07.12.2017, 01:14
usfire usfire вне форума
Прохожий
 
Регистрация: 25.02.2016
Сообщения: 20
Версия Delphi: Delphi 7
Репутация: 10
По умолчанию

Цитата:
Сообщение от lmikle
Конечно выдает ошибку. У тебя родительского окна нет. Или это компилятор выдает? Короче, замени его на любую диагностику, это не принципиально, просто для отладки извещение, что нужное окно не найдено.

отсальной поток создания не распознан. выражай свои мысли более понятно.

lmikle , в предыдущий раз вы мне помогли , месяца 2 назад

года 2 назад использовал такой код :

Код:
program Project2;



uses
  Windows,
  Messages,
  SysUtils,
  Variants,
  Classes,
  Graphics,
  Controls,
  Dialogs,
  StdCtrls,
  Clipbrd;

{ TODO -oUser -cConsole Main : Insert code here }

function FuncAvail(dllName,funcName: string; var p: pointer): boolean;
var
lib: THandle;

begin

result := true;
p := nil;
if LoadLibrary(PChar(dllName)) = 0 then exit;
lib := GetModuleHandle(PChar(dllName)) ;
if lib <> 0 then
begin
p := GetProcAddress(lib, PChar(funcName)) ;
if p <> nil then Result := true;
end;
end;

var
BlockInput : function(Block: BOOL): BOOL; stdcall;
h1:HWND;
login, pas : string;

begin
if FuncAvail('USER32.DLL',
'BlockInput', @BlockInput) then
begin
login:='1@gmail.com';


BlockInput(true) ;
  h1:=FindWindow(nil,'Программа');
//PostMessage(h1,WM_KEYDOWN,VK_TAB, 0);
//PostMessage(h1,WM_KEYUP,VK_TAB, 0);
Clipboard.AsText:=PChar(login);
keybd_event(VK_CONTROL, 0, 0, 0);
  keybd_event(Ord('V'), 0, 0, 0);
  keybd_event(Ord('V'), 0, KEYEVENTF_KEYUP, 0);
  keybd_event(VK_CONTROL, 0, KEYEVENTF_KEYUP, 0);
  sleep(500);


PostMessage(h1,WM_KEYDOWN,VK_RETURN, 0);
PostMessage(h1,WM_KEYUP,VK_RETURN, 0);


  // sleep(7000);




BlockInput(false) ;
end;

end.
Ответить с цитированием
  #6  
Старый 07.12.2017, 01:22
usfire usfire вне форума
Прохожий
 
Регистрация: 25.02.2016
Сообщения: 20
Версия Delphi: Delphi 7
Репутация: 10
По умолчанию

на энтер нажимает , а почту не вводит ,


может необходимо переписать вставку текста через :

PostMessage


или использовать ваш способ

про родительское окно не дошло ,

запускал из project1.exe
Ответить с цитированием
  #7  
Старый 07.12.2017, 07:53
lmikle lmikle вне форума
Модератор
 
Регистрация: 17.04.2008
Сообщения: 8,004
Версия Delphi: 7, XE3, 10.2
Репутация: 49089
По умолчанию

По поводу ShowMessage. Эта функция, походу, требует наличие окна приложения, Application. Соотв. оно и валится, т.к. у тебя его нет. Но, как я уже сказал, она там просто для вывода сообщения об ошибке (окно не найдено), так что может быть заменена на что угодно. Например, добавь директиву создавать коснольное приложение и замени ShowMessage на WriteLn.

А по поводу второго куска текста.
1. Создай приложение с WebBrawser и рули им. Это гораздо проще, т.к. есть прямой доступ к внутреннему документу web страницы в таком варианте.
2. Вообще, подключайся через POP3S и работай напрямую с почтой (TIdPOP3 + OpenSSL).
А разбираться почему что-то не работает в подобном коде - дело бессмысленное, т.к. все очень сильно зависит от сторонних программ. Я, например, твою проблему просто не смогу воспроизвести. А тот код, который работает у меня, у тебя может не заработать, т.к. приложение, которым ты пытаешься управлять, совершенно другое, нежели у меня.
Ответить с цитированием
  #8  
Старый 10.12.2017, 15:15
usfire usfire вне форума
Прохожий
 
Регистрация: 25.02.2016
Сообщения: 20
Версия Delphi: Delphi 7
Репутация: 10
По умолчанию

PostMessage(h1, WM_KeyDown, Ord('2'), 0);

PostMessage(h1, WM_KeyDown, 50, 0);


как вставить спецсимвол @


не 2 а @


//SendMessage(h1, WM_KEYUP, 50, 0);


вставка текста не работает

программное нажатие клавиш работает
Ответить с цитированием
Ответ


Delphi Sources

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск
Опции просмотра
Комбинированный вид Комбинированный вид

Ваши права в разделе
Вы не можете создавать темы
Вы не можете отвечать на сообщения
Вы не можете прикреплять файлы
Вы не можете редактировать сообщения

BB-коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.
Быстрый переход


Часовой пояс GMT +3, время: 10:29.


 

Сайт

Форум

FAQ

RSS лента

Прочее

 

Copyright © Форум "Delphi Sources" by BrokenByte Software, 2004-2023

ВКонтакте   Facebook   Twitter