Тут можно задавать вопросы по Си/Си++
Тут можно задавать вопросы по Си/Си++
Сообщений 1 страница 4 из 4
Поделиться2Сб, 25 Июл 2020 06:40:18
Вопрос по Win32 API, как в Си или Си++ отправлять текст в окно, а так-же из буфера обмена, если знаешь HWND?
Отредактировано pochemuchka (Сб, 25 Июл 2020 06:42:56)
Поделиться3Сб, 25 Июл 2020 07:02:47
Отправить текст в окно просто вот так:
LRESULT CALLBACK WindowProcedure (HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam)
{
HWND hwndField1; // Поле1
HWND hwndField2; // Поле2
char buf[512];
switch (message)
{
case WM_CREATE:
hwndField1 = CreateWindow("EDIT", "AA", WS_CHILD | WS_VISIBLE, 10, 10, 200, 30, hwnd, NULL, hInst, lParam); // Создаём поле1
hwndField2 = CreateWindow("EDIT", "BB", WS_CHILD | WS_VISIBLE, 10, 30, 100, 20, hwnd, NULL, hInst, lParam); // Создаём поле2
GetWindowText(hwndField1, buf, GetWindowTextLength(hwndField1)+1); // Считываем текст из поел1, и сохраняем в переменную buf
SetWindowText(hwndField2, buf); // Считываем из переменной buf, и записываем текст в поле2
break;
case WM_DESTROY:
PostQuitMessage (0);
break;
default:
return DefWindowProc (hwnd, message, wParam, lParam);
}
return 0;
}
Чтобы вставить из буфера обмена то вот код:
SendMessage(hwndField1, WM_ACTIVATE, LOWORD(WA_ACTIVE), NULL); // Делаем поле1 активным
keybd_event(VK_LCONTROL, 0, 0, 0); // Посылаем клавишу LCTRL
keybd_event(0x56, 0, 0, 0); // и V
keybd_event(VK_LCONTROL, 0, KEYEVENTF_KEYUP, 0); // Отпускаем LCTRL
keybd_event(0x56, 0, KEYEVENTF_KEYUP, 0); // Отпускаем V
Поделиться4Вс, 1 Авг 2021 07:41:27
char buf[512];
GetWindowText(hwndField1, buf, GetWindowTextLength(hwndField1)+1); // Считываем текст из поел1, и сохраняем в переменную buf
SetWindowText(hwndField2, buf); // Считываем из переменной buf, и записываем текст в поле2
Как же я промахнулся... Сорри прям стыдно... Короче в коде ошибка.
Короче делать лучше так:
#include <malloc.h>
LRESULT CALLBACK WindowProcedure (HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam)
{
HWND hwndField1; // Поле1
HWND hwndField2; // Поле2
char *buf;
...
switch (message)
{
case WM_CREATE:
buf = (char *) malloc(GetWindowTextLength(hwndField1)+1);
GetWindowText(hwndField1, buf); // Считываем текст из поел1, и сохраняем в переменную buf
SetWindowText(hwndField2, buf); // Считываем из переменной buf, и записываем текст в поле2
free(buf);
...