Задача такая, необходимо сделать "вставлялку" данных т.е. после установки курсора в Edit какой либо программы при нажатии определенного сочетания клавиш программа
выдает меню в котором можно выбрать данные из списка заранее составленного и вставляет выбранные данные в Edit.
Со вставкой данных все более мене понятно, можно использовать что то вроде:
- Код: Выделить всё
var
s: PChar;
h: THandle;
begin
s := 'Krakozjabra';
h := FindWindow(nil,'Form1');
h := FindWindowEx( h, 0, 'TEdit',nil);
SendMessage(h, WM_SETTEXT, 0, Integer(s));
А вот как получить handle Edit-а в котором установлен курсор
Для окна над котором находится курсор нашел
- Код: Выделить всё
WindowFromPoint(CrPos);
А вот для фокуса не могу найти.
Помогите кто чем может)
Добавлено спустя 1 час 30 минут 25 секунд:
Вроде как пошло дело)
- Код: Выделить всё
function MyGetFocus: HWND;
var
dwTargetOwner: DWORD; //указатель на подключаемый процесс
dwThreadID: DWORD; //указатель на текущий процесс
begin
try
dwTargetOwner := GetWindowThreadProcessId(GetForegroundWindow, nil);
dwThreadID := GetCurrentThreadId(); //указатель на текущий процесс
if (dwTargetOwner <> dwThreadID) then AttachThreadInput(dwThreadID, dwTargetOwner, TRUE)
else AttachThreadInput(dwThreadID, dwTargetOwner, FALSE);
result:=GetFocus;
except
Result:=0;
end;
end;
Добавлено спустя 7 часов 55 минут 14 секунд:
Я так понял, что большинство Edit-ов плевать хотели на WM_SETTEXT
Пробовал так:
- Код: Выделить всё
SendMessage( MyGetFocus , WM_SETTEXT, 0, Integer(s));
Работает 50/50
Подскажите аналог