![]() |
|
|
|||||||
| Регистрация | << Правила форума >> | 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
|
|||
|
|||
|
ммм, хитрая консоль
завтра попробую. |