SendMessage - problem z wysłaniem komend

dział ogólny

SendMessage - problem z wysłaniem komend

Nowy postprzez sfyrek » środa, 27 czerwca 2012, 08:13

Witam
Mam problem i nie do końca wiem jak go rozwiązać. Złapałem uchwyt okna dialogowego obcego programu "Otwórz" i nie wiem jak wysłać komunikat z nazwą pliku który chce otworzyć. Wiem że można wysłać znaki typu Char do pola Edit jednak mam problem znalazieniem klasy. W win sign podaje mi że pole do wpisywania nazwy pliku jest klasy "Edit" jednak nie znajduje mi tej klasy. Znajduje mi jednak Combo Box klasy ComboBoxEx32. I moje pytanie jak mogę do tego rodzaju kontrolki wysłać nazwę pliku?



Z góry dziękuje za pomoc.
Avatar użytkownika
sfyrek
Bladawiec
Bladawiec
 
Posty: 18
Dołączył(a): wtorek, 26 czerwca 2012, 18:14
Podziękował : 3
Otrzymał podziękowań: 0
System operacyjny: brak systemu
Kompilator: brak kompilatora
Gadu Gadu: 0
    Windows XPOpera

Re: SendMessage - problem z wysłaniem komend

Nowy postprzez Cyfrowy Baron » środa, 27 czerwca 2012, 08:36

Żeby się dobrać do elementów takiego okna dialogowego, np. do Pola typu TComboBox trzeba najpierw pobrać uchwyt do tegoż okna a potem do elementu, który na tym oknie leży. Jeżeli okno zawiera klika elementów tej samej klasy to dodatkowo musisz identyfikować taki element po nazwie. Opisałem to tutaj: http://programowanie.cal.pl/cyfbar/teor13.htm
Avatar użytkownika
Cyfrowy Baron
Administrator
Administrator
 
Posty: 4716
Dołączył(a): niedziela, 13 lipca 2008, 15:17
Podziękował : 12
Otrzymał podziękowań: 442
System operacyjny: Windows 7 x64 SP1
Kompilator: Embarcadero RAD Studio XE2
C++ Builder XE2 Update 4
SKYPE: cyfbar
Gadu Gadu: 0
    Windows XPFirefox

Re: SendMessage - problem z wysłaniem komend

Nowy postprzez sfyrek » środa, 27 czerwca 2012, 08:45

Robiłem tak jak w opisie i mogę wysłać do Pola TCombo Box komunikat CB_SHOWDROPDOWN - i to polecenie zostaje wykonane poprawnie, nie wiem tylko jak do Pola tego stawic jakiś znak lub ewenetulanie ciąg znaków.
Avatar użytkownika
sfyrek
Bladawiec
Bladawiec
 
Posty: 18
Dołączył(a): wtorek, 26 czerwca 2012, 18:14
Podziękował : 3
Otrzymał podziękowań: 0
System operacyjny: brak systemu
Kompilator: brak kompilatora
Gadu Gadu: 0
    Windows XPOpera

Re: SendMessage - problem z wysłaniem komend

Nowy postprzez Cyfrowy Baron » środa, 27 czerwca 2012, 09:10

Masz tu kod przetestowany z oknem dialogowym Otwórz programu Notatnik. Do wprowadzenia nazwy pliku posłużyłem się schowkiem. U mnie to działa:

KOD cpp:     UKRYJ  
#include "clipbrd.hpp"

void __fastcall TForm1::Button1Click(TObject *Sender)
{
  HWND fWnd1 = FindWindow(L"#32770", L"Otwórz");

  if(fWnd1 == NULL)
  {
   ShowMessage("Nie odnaleziono obiektu DialogBox - Otwórz");
   return;
  }

  HWND fWnd2 = FindWindowEx(fWnd1, 0, L"ComboBoxEx32", NULL);

  if(fWnd2 == NULL)
  {
   ShowMessage("Nie odnaleziono obiektu ComboBoxEx32");
   return;
  }

  HWND fWnd3 = FindWindowEx(fWnd2, 0, L"ComboBox", NULL);

  if(fWnd3 == NULL)
  {
   ShowMessage("Nie odnaleziono obiektu ComboBox");
   return;
  }

  HWND bWnd = FindWindowEx(fWnd3, 0, L"Edit", NULL);

  if(bWnd == NULL)
  {
   ShowMessage("Nie odnaleziono obiektu Edit");
   return;
  }

  /* zaznaczam pole */
  SendMessage(bWnd, WM_LBUTTONDOWN, 0, 1);
  SendMessage(bWnd, WM_LBUTTONUP, 0, 1);

  /* umieszczam nazwę pliku w schowku */
  Clipboard()->SetTextBuf(L"Nazwa pliku");

  /* wklejam do pola nazwę pliku ze schowka */
  SendMessage(bWnd, WM_PASTE, 0, 0);
}


Musisz jednak wiedzieć, że jeżeli masz w systemie wywołanych kilka takich okien dialogowych to zostanie pobrany uchwyt do pierwsze na systemowej liście klas.

Za ten post autor Cyfrowy Baron otrzymał podziękowanie od:
sfyrek
Avatar użytkownika
Cyfrowy Baron
Administrator
Administrator
 
Posty: 4716
Dołączył(a): niedziela, 13 lipca 2008, 15:17
Podziękował : 12
Otrzymał podziękowań: 442
System operacyjny: Windows 7 x64 SP1
Kompilator: Embarcadero RAD Studio XE2
C++ Builder XE2 Update 4
SKYPE: cyfbar
Gadu Gadu: 0
    Windows XPFirefox

Re: SendMessage - problem z wysłaniem komend

Nowy postprzez sfyrek » środa, 27 czerwca 2012, 21:43

Dziękuje, teraz działa tak jak powinno:)
Avatar użytkownika
sfyrek
Bladawiec
Bladawiec
 
Posty: 18
Dołączył(a): wtorek, 26 czerwca 2012, 18:14
Podziękował : 3
Otrzymał podziękowań: 0
System operacyjny: brak systemu
Kompilator: brak kompilatora
Gadu Gadu: 0
    Windows 7Opera


  • Podobne tematy
    Odpowiedzi
    Wyświetlone
    Ostatni post

Powrót do Ogólne problemy z programowaniem

Kto przegląda forum

Użytkownicy przeglądający ten dział: Brak zalogowanych użytkowników i 5 gości