Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2004.06.06;
Скачать: CL | DM;

Вниз

Использование SendMessage   Найти похожие ветки 

 
funkster   (2004-04-20 17:53) [0]

Здравствуйте!
Пишу прогу, которая должна по нажатию горячей клавиши вставлять определённый текст в активное текстовое поле (в активной проге) (Будь это combobox, richedit или ячейка в Excel)
Использовал следующий код:

AttachThreadInput(GetWindowThreadProcessId(GetForegroundWindow, nil), GetCurrentThreadId, True);
winhwnd:=GetFocus;
SendMessage(winhwnd, WM_SETTEXT, 0,Integer(PChar("Сообщение")));

В блокнот вставляет, и почти никуда больше не хочет ((((


 
clickmaker ©   (2004-04-20 18:04) [1]

Значит остальные foreground-окна не обрабатывают это сообщение


 
funkster   (2004-04-20 18:06) [2]

А как сделать, чтобы обрабатывали?


 
clickmaker ©   (2004-04-20 18:13) [3]


> funkster   (20.04.04 18:06) [2]
> А как сделать, чтобы обрабатывали?

Накатать жалобу разработчикам этих прог.
Или искать нужное среди дочерних окон этого самого Foreground Window, FindWindowEx()


 
Ajax ©   (2004-04-20 19:57) [4]

ИМХО лучше помещать в буфер, а от туда вставлять куда надо.


 
Kolyan ©   (2004-04-21 08:47) [5]


> Ajax ©   (20.04.04 19:57) [4]

Эт точно


 
Отто   (2004-04-21 09:23) [6]

Странно, у меня работало почти везде. Может дай более подробный листинг кода? В крайнем случае можно спичаться, я кину свои исходники.


 
funkster   (2004-04-21 11:06) [7]

> Ajax ©
ага, сделал WM_PASTE вместо WM_SETTEXT
плюс вот это:

Clipboard.clear;
Clipboard.HasFormat(CF_OEMTEXT);
Clipboard.asText:="Текст";

и всё отлично работает)))))))))


 
funkster   (2004-04-21 11:09) [8]

> Отто

Пасибки, уже по другому сделал, но исходники всёравно кинь, посмотреть интересно)))


 
BaDeVlad ©   (2004-04-22 10:16) [9]

unit Unit1;

interface

uses
 Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs;

type
 TForm1 = class(TForm)
   procedure FormCreate(Sender: TObject);
   procedure ON_WM_HOTKEY(var M: TWMHOTKEY); message WM_HOTKEY;
   procedure FormClose(Sender: TObject; var Action: TCloseAction);
 private
   { Private declarations }
 public
   { Public declarations }
 end;

var
 Form1: TForm1;
 hID: Integer;

implementation

{$R *.DFM}

function ExGetText(Handle:Thandle):String;
begin
SetLength(Result, SendMessage(Handle, WM_GETTEXTLENGTH, 0, 0)+1);
 SendMessage(Handle, WM_GETTEXT, length(Result), Integer(PChar(Result)));
SetLength(Result, lStrLen(PChar(Result)));
end;

procedure ExSetText(Handle: THandle; Text:String);
begin
SendMessage(Handle, WM_SETTEXT, 0, Integer(PChar(Text)));
end;

procedure TForm1.ON_WM_HOTKEY(var M: TWMHOTKEY);
var h, f: hwnd;
   s: string;
begin
if M.HotKey = 50258 {Ctrl+2} then
begin
h:= GetForegroundWindow;
h:= GetWindowThreadProcessId(h,nil);
AttachThreadInput(GetCurrentThreadId, h, true);
f:= GetFocus;
s:= exgettext(f);
exsettext(f, "("+s+")");
AttachThreadInput(GetCurrentThreadId, h, false);
end;
end;

procedure TForm1.FormCreate(Sender: TObject);
begin
hID:=GlobalAddAtom("CalcHotkey");
RegisterHotKey(Form1.Handle, hID, mod_control, Ord("2"));
end;

procedure TForm1.FormClose(Sender: TObject; var Action: TCloseAction);
begin
UnRegisterHotKey(Form1.handle, hID);
GlobalDeleteAtom(hID);
end;

end.


Работает почти везде. По нажатию горячих клавиш Ctrl+2 берет текст из текущего окна в скобки.


 
narayan ©   (2004-04-22 10:41) [10]

2 funkster   (21.04.04 11:06) [7]

а то что ты пользователю содержимое буфера обмена портишь - пофиг?


 
Ajax ©   (2004-04-23 09:22) [11]

Перед тем, как что-то копировать в буфер обмена, нужно сохранить информацию там находящуюся. Потом копируешь текст, обрабатываешь, что хочешь и восстанавливаешь исходные данные в буфере.



Страницы: 1 вся ветка

Текущий архив: 2004.06.06;
Скачать: CL | DM;

Наверх




Память: 0.49 MB
Время: 0.034 c
1-1085109921
Апач
2004-05-21 07:25
2004.06.06
Структура данных


3-1084446570
Курдль
2004-05-13 15:09
2004.06.06
Метафайл, разделенный на страницы, бывает?


4-1083334118
Санёк
2004-04-30 18:08
2004.06.06
Как изменять размер окна тоская за угол формы?


6-1082536527
Сережа550
2004-04-21 12:35
2004.06.06
Ссылки в новом окне


1-1085126699
ПрогерШу
2004-05-21 12:04
2004.06.06
В чем хранить картинки?