czy da się otrzymać uchwyt z funkcją FindWindow pustej klasy

Odpowiedz Nowy wątek
proqix polaczeq
2012-02-29 10:04
proqix polaczeq
0

Mam pytanko czy da się otrzymać uchwyt z funkcją FindWindow podając typ który jest "pustą" klasą
np

type TMojaKlasa = class
end;

czy musi być to obiekt typu np TForm

Pozostało 580 znaków

2012-02-29 11:44

Rejestracja: 16 lat temu

Ostatnio: 7 lat temu

0

Musi to być TForm.
Szukając "dziecka" funkcją FindWindowEx musi ono być co najmniej TWinControl.

Dokładniej mówiąc szukając uchwytu przez FindWindow wystarczy, że klasa będzie co najmniej TWinControl, nie musi być TForm tyle że musi to być okno typu top-level czego bez uciekania się do WinAPI w Delhi nie zrobisz jeśli to nie TForm.

edytowany 4x, ostatnio: adf88, 2012-02-29 11:54

Pozostało 580 znaków

2012-02-29 14:20

Rejestracja: 11 lat temu

Ostatnio: 4 lata temu

0

to jak by znaleźć uchwyt dla aplikacji która nie ma "ciała" tylko jest samym procesem ?


CodeGear Delphi 2007 | Windows 7 |
Jak to dobrze że istnieje opcja edytuj post ;]

Pozostało 580 znaków

2012-02-29 15:42

Rejestracja: 14 lat temu

Ostatnio: 1 minuta temu

Lokalizacja: Gorlice

0

Przecież funkcja FindWindow i FindWindowEx służą do zwracają uchwyty okien (w wypadku drugiej funkcji okien potomnych) a class nie posiada uchwytu uchwyt posiadają kontrolki i okna a więc w Delphi dziedziczące po TWinControl a tak jak napisałeś oznacza to samo co .

type TMojaKlasa = class(TObject)
end; 

a więc dziedziczy tylko po TObject (czyli podstawowej klasie)


Nie odpowiadam na PW w sprawie pomocy programistycznej.
Pytania zadawaj na forum, bo:
od tego ono jest ;) | celowo nie zawracasz gitary | przeczyta to więcej osób a więc większe szanse że ktoś pomoże.
edytowany 3x, ostatnio: kAzek, 2012-02-29 17:18

Pozostało 580 znaków

2012-02-29 17:02

Rejestracja: 11 lat temu

Ostatnio: 4 lata temu

0

ale w programie jest tylko jeden typ TMojaKlasa
i jak mogę się do niego odwołać (uchwyt) bo już nie mam pomysłu...
żadnego komponentu nie ma na tym ani modułu Forms tylko Windows, Messages, SysUtils
nie wiem może jakiś inny sposób ?


CodeGear Delphi 2007 | Windows 7 |
Jak to dobrze że istnieje opcja edytuj post ;]
edytowany 1x, ostatnio: proqix, 2012-02-29 17:03

Pozostało 580 znaków

2012-02-29 17:06

Rejestracja: 16 lat temu

Ostatnio: 7 lat temu

0

Ale jaki uchwyt? FindWindow szuka uchwytu okna. Nie ma okna to i nie ma uchwytu. Może napisz co chcesz osiągnąć.

kAzek napisał(a)

uchwyt posiadają kontrolki i okna a więc w Delphi dziedziczące po TControl
Musi być TWinControl. TControl nie ma uchwytu, nie jest oknem. Dlatego np. nie da się buttona przesłonić zwykłym labelem.

edytowany 7x, ostatnio: adf88, 2012-02-29 17:11
No tak masz rację pomyliłem musi być TWinControl (poprawiłem) - kAzek 2012-02-29 17:16

Pozostało 580 znaków

2012-02-29 17:18

Rejestracja: 11 lat temu

Ostatnio: 4 lata temu

0

nie wyjaśniłem, chciałem znaleźć uchwyt do programu więc uznałem że najlepiej będzie użyć jakiejś sobie klasy do znalezienia uchwytu żeby później wysłać do niej (aplikacji) wiadomość SendMessage albo PostMessage.
ale nie ma praktycznie nic (nie ma interfejsu) w sumie to nawet klasa nie jest potrzebna do działania.


CodeGear Delphi 2007 | Windows 7 |
Jak to dobrze że istnieje opcja edytuj post ;]

Pozostało 580 znaków

2012-02-29 17:23

Rejestracja: 16 lat temu

Ostatnio: 7 lat temu

0

To trzeba było tak od razu, że chcesz przesyłać komunikaty do aplikacji. Poczytaj o "message-only windows".
http://www.google.com/search?q=HWND_MESSAGE+delphi

edytowany 5x, ostatnio: adf88, 2012-02-29 17:27

Pozostało 580 znaków

2012-02-29 17:27

Rejestracja: 14 lat temu

Ostatnio: 1 minuta temu

Lokalizacja: Gorlice

0

To że nie ma widocznego okna to nie znaczy że go nie ma nie wiem dokładnie jak napisałeś ten program ale może jest TApplication?


Nie odpowiadam na PW w sprawie pomocy programistycznej.
Pytania zadawaj na forum, bo:
od tego ono jest ;) | celowo nie zawracasz gitary | przeczyta to więcej osób a więc większe szanse że ktoś pomoże.

Pozostało 580 znaków

2012-02-29 17:49

Rejestracja: 11 lat temu

Ostatnio: 4 lata temu

0

Tapp... jest w Forms więc odpada

takie coś

var
  Wnd: TWndClass;  // klasa okna
  Msg: TMsg;
begin
  with Wnd do
  begin
    hInstance := hInstance; // uchwyt do zasobów
    lpszClassName := 'My1stApp'; // klasa
    hbrBackground := COLOR_WINDOW; // kolor tła
  end;

  RegisterClass(Wnd); // zarejestruj nowa klasę
  ShowMessage(IntToStr(FindWindow('My1stApp',nil)));

end.

zwraca mi 0 nie wiem czemu...


CodeGear Delphi 2007 | Windows 7 |
Jak to dobrze że istnieje opcja edytuj post ;]
edytowany 1x, ostatnio: proqix, 2012-02-29 17:49

Pozostało 580 znaków

2012-02-29 18:04

Rejestracja: 16 lat temu

Ostatnio: 7 lat temu

0

A tworzenie okna gdzie? Generalnie musisz napisać aplikację tak jak się o robi w czystym WinAPI: rejestracja klasy (RegisterClassEx), tworzenie okna (CreateWindowEx), obsługa komunikatów (GetMessage, DispatchMessage).

Alternatywnie zastosuj mechanizm komunikacji inny od komunikatów.

edytowany 1x, ostatnio: adf88, 2012-02-29 18:04

Pozostało 580 znaków

Odpowiedz

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