|
|
Регистрация | << Правила форума >> | FAQ | Пользователи | Календарь | Поиск | Сообщения за сегодня | Все разделы прочитаны |
|
Опции темы | Поиск в этой теме | Опции просмотра |
#1
|
|||
|
|||
Как сделать приложение не перехватывающее фокус ?
Я уже всю сеть облазил, всё равно берёт на себя фокус,а самое главное теряет фокус приложение в котором я находился до этого.
Ниже программа которую я запускаю по комбинации клафишь (через ярлык) И она по идее должна вставлять текст в блокноте в котором я нажал эту комбинацию клавиш (запустил прогу) Но вставки не происходит,блокнот теряет фокус и вставка происходит хз куда. Код:
unit Unit1; procedure TForm1.FormCreate(Sender: TObject); begin ShowWindow(Handle,SW_HIDE); // ShowWindow(Application.Handle,SW_HIDE); // showWindow(Form1.Handle, SW_SHOWNOACTIVATE); Application.ShowMainForm :=false; end; procedure TForm1.FormActivate(Sender: TObject); begin // S:=IdHTTP1.Get('http://www.cbr.ru/'); // S:= copy(S,Pos('руб.',S)+16,5); // парсим страницу :) // Clipboard.AsText:=S; Clipboard.AsText:='1234567890'; keybd_event(VK_RCONTROL, 0, 0, 0); //Нажатие правого Ctrl. keybd_event(Ord('v'), 0, 0, 0); //Нажатие 'v'. keybd_event(Ord('v'), 0, KEYEVENTF_KEYUP, 0); // отпускание v keybd_event(VK_RCONTROL, 0, KEYEVENTF_KEYUP, 0); //Отпускание правого Ctrl. Form1.close ; end; end. |
#2
|
||||
|
||||
Тут наверно нужно не имитировать нажатия клавиш, а посылать команды другому приложению. Ещё можно попробовать работать через трей (у RX, например, есть компонент RxTrayIcon).
|
#3
|
|||
|
|||
Код:
program Project1; {$APPTYPE GUI} {$R *.res} uses System.SysUtils, Vcl.Clipbrd, Winapi.Windows, Winapi.Messages; function GetCaretWindow: HWND; var w: HWND; aID, mID: DWORD; APoint: TPoint; begin Result:= 0; w:= GetForegroundWindow; if w <> 0 then begin aID:= GetWindowThreadProcessId(w, nil); mID:= GetCurrentThreadid; if (aID <> mID) then if AttachThreadInput(mID, aID, True) then try w:= GetFocus; if (w <> 0) then if GetCaretPos(APoint) then begin ClientToScreen(w, APoint); Result:=WindowFromPoint(APoint) end finally AttachThreadInput(mID, aID, False) end end end; begin Clipboard.AsText:='1234567890'; PostMessage(GetCaretWindow,WM_PASTE,0,0); end. |
Этот пользователь сказал Спасибо nixon232 за это полезное сообщение: | ||
selevo (15.10.2017)
|
#4
|
|||
|
|||
ооо!
это выглядит интересно. А как это вставить в мой код ? у меня иначе выглядит объявления, форма же да чёда какой тип проекта даёт такую заготовку ? У меня-то начало и структура другая, нет никаких Код:
program Project1; {$APPTYPE GUI} Раз в пятилетку программы пишу поэтому не могу знать некоторые элементарные вещи. Код:
unit Unit1; interface uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, IdBaseComponent, IdComponent, IdTCPConnection, IdTCPClient, IdHTTP,ClipBrd; type TForm1 = class(TForm) IdHTTP1: TIdHTTP; procedure FormActivate(Sender: TObject); private { Private declarations } public { Public declarations } end; var Form1: TForm1; HTTP: TIdHTTP; S:String; implementation {$R *.dfm} procedure TForm1.FormActivate(Sender: TObject); begin S:=IdHTTP1.Get('http://www.cbr.ru/'); S:= copy(S,Pos('руб.',S)+16,5); // парсим страницу :) Clipboard.AsText:=S; // Clipboard.AsText:='1234567890'; Form1.close; end; end. |
#5
|
|||
|
|||
Это консоль, а сама консоль скрыта директивной
{$APPTYPE GUI} File> New> Other> Console Application. Если вам нужна форма - это уже не консоль ) |
Этот пользователь сказал Спасибо nixon232 за это полезное сообщение: | ||
selevo (15.10.2017)
|
#6
|
|||
|
|||
ммм, хитрая консоль
завтра попробую. |