RichEdit i uchwyt do programu.

0

Witam!!!
Mam do napisania program, który będzie wysyłać przykładowy tekst z RichEdita do programu Expressivo. Problem jest taki, że nie mogę uzyskać uchwytu i przekazać tekstu... początkowo próbowałem z notatnikiem i zamiast tekstu wysyłał dziwne znaczki... Proszę o pomoc, kawałek kodu, lub podpowiedzi !!!

Pozdrawiam!!!

0

Idź do wróżki, współpracuje z wyszukiwarką.

0

Gdybym znalazł odpowiedź w necie to bym nie prosił o pomoc. Więc powtórzę proszę o jakąś podpowiedź !!!

0

Podpowiedź? Przeczytaj uważnie co jest na MSDN-ie napisane zamiast pisać 'dziwne znaczki':

To set the text of a control in another process, send the WM_SETTEXT message directly instead of calling SetWindowText.

Wsztystko inne to też wyłącznie kwestia przeczytania ze zrozumieniem opisu kilku funkcji. Szukałeś...

Za 'Pomocy !!!' wątek może w koszu skończyć, Ty zaś może powinieneś dowiedzieć się na czym polega współpraca.

0

Dziękuje za pomoc :D Może coś wymyśle :D

0

Jak widzę taką reakcję to od razu mam złe przeczucia... masz kod psujący Notatnik (sam nie podałeś nic z efektów swojej pracy):

#include <iostream>
#include <string>
#include <windows.h>
using namespace std;

BOOL CALLBACK enum_func(HWND hwnd, LPARAM lParam) {
  char class_name[8];

  GetClassName(hwnd, class_name, sizeof(class_name));

  if (strcmp(class_name, "Edit") == 0) {
    *(HWND*)lParam = hwnd;
    return FALSE;
  }
  return TRUE;
}

int main() {
  HWND h_notepad = FindWindow("Notepad", NULL);

  if (h_notepad == NULL) {
    cerr << "uruchom Notatnik, bucu..." << endl;
    return -1;
  }

  HWND h_edit;
  EnumChildWindows(h_notepad, enum_func, (LPARAM)&h_edit);

  cout << "wprowadz tekst od wyslania, '.' konczy:" << endl;

  string buff, str;
  do {
    getline(cin, str);
    buff.append(str).append("\r\n");
  } while (str != ".");

  SendMessage(h_edit, WM_SETTEXT, NULL, (LPARAM)buff.c_str());
}
0

Co do kodu to mam coś takiego:

#include <vcl.h>
#pragma hdrstop
#include "Unit1.h"
#include "windows.h"
#include <clipbrd.hpp>
#include "string.h"
//---------------------------------------------------------------------------
#pragma package(smart_init)
#pragma resource "*.dfm"
TForm1 *Form1;
HWND hnotatnik;
HWND hedit1;

//---------------------------------------------------------------------------
__fastcall TForm1::TForm1(TComponent* Owner)
        : TForm(Owner)
{
RichEdit1->Clear();


}
//---------------------------------------------------------------------------
void __fastcall TForm1::RadioButton1Click(TObject *Sender)
{
        hnotatnik = FindWindow(NULL, "Bez tytułu - Notatnik");
        if(hnotatnik)
        {
        Char Tekst[MAX_PATH];
        RichEdit1->Text = Tekst;
        MessageBox(NULL, "Dziala", "OK", MB_OK);
        hedit1 = FindWindowEx(hnotatnik, NULL, ("EDIT"), NULL);
        SendMessage(hedit1, WM_SETTEXT, NULL, (LPARAM)Tekst);
        }
        else
        ShellExecute(0, NULL, "notepad.exe", NULL, NULL, SW_SHOW);
}

Uchwyt działa tylko jest taki problem, że zamiast podanego tekstu przesyła dziwne znaczki :/
Może teraz jest problem bardziej jasny :)
</cpp>

0
        Char Tekst[MAX_PATH];
        RichEdit1->Text = Tekst;
        SendMessage(hedit1, WM_SETTEXT, NULL, (LPARAM)Tekst);

Weź Ty się zastanów co do czego przypisujesz...

0

Dzięki za podpowiedź już doszedłem co robiłem źle...
Dzięki za pomoc :)

0
zuy duch 4p napisał(a)

Skorzystałem z tego kodu (dzięki), ale mam pytanie jak pobrać druga instancję...
tzn na formie mam ClassName o nazwie edit "Edit" ale występuje 2 razy, oznaczone jako instance:1 i instance:2, jak pobrać konkretną instancję?

#include <iostream>
#include <string>
#include <windows.h>
using namespace std;

BOOL CALLBACK enum_func(HWND hwnd, LPARAM lParam) {
  char class_name[8];

  GetClassName(hwnd, class_name, sizeof(class_name));

  if (strcmp(class_name, "Edit") == 0) {
    *(HWND*)lParam = hwnd;
    return FALSE;
  }
  return TRUE;
}

int main() {
  HWND h_notepad = FindWindow("Notepad", NULL);

  if (h_notepad == NULL) {
    cerr << "uruchom Notatnik, bucu..." << endl;
    return -1;
  }

  HWND h_edit;
  EnumChildWindows(h_notepad, enum_func, (LPARAM)&h_edit);

  cout << "wprowadz tekst od wyslania, '.' konczy:" << endl;

  string buff, str;
  do {
    getline(cin, str);
    buff.append(str).append("\r\n");
  } while (str != ".");

  SendMessage(h_edit, WM_SETTEXT, NULL, (LPARAM)buff.c_str());
}

1 użytkowników online, w tym zalogowanych: 0, gości: 1