Przesuwanie innego okna

marek100
2011-12-02 12:45
marek100
0

Witam,
mam pytanie, jak w Delphi wysłać komunikat do aplikacji o nazwie (w Menadżerze Urządzeń) app.exe, który przesunie formę aplikacji. CZytałem o komunikatach, ale nie bardzo wiem, jak pobrać uchwyt aplikacji

Pozostało 580 znaków

2011-12-02 13:15

Rejestracja: 9 lat temu

Ostatnio: 1 godzina temu

0

Cytując MiśkaD, powiem "Oczywiście szukałem i oczywiście nigdzie nie było!!". Weź się człowieku ogarnij, i wpisz w googla "Jak pobrać uchwyt innej aplikacji delphi" i masz spokój.

Nie będę chamski i dam ci linka, FindWindow();


edytowany 2x, ostatnio: TomRiddle, 2011-12-02 13:16

Pozostało 580 znaków

marek100
2011-12-02 15:12
marek100
0

Próbowałem czegoś takiego:

var
  h:HWND;
begin
     h:=FindWindow(nil, PChar('notepad.exe'));
     SendMessage(h,WM_MOVE,100,100); 

i nie działa

Pozostało 580 znaków

2011-12-02 16:50
Moderator

Rejestracja: 12 lat temu

Ostatnio: 3 tygodnie temu

Lokalizacja: Szczecin

0

Oczywiście t.r. chciał zabłysnąc, ale nie bardzo mu się udało. Gdzie tobie do Miśka chłopie, a poza tym podajesz coś co szuka okna po tytule lub klasie, a nie nazwie pliku wykonywalnego. Co nie zmienia faktu, że pytający jakby lepiej poszukał trafił by na mój gotowiec, a czytając opis funkcji FindWindow chociażby na MSDNie, wiedzial że kombinuje bez sensu, bo tak się tego nie robi. Link do mojego krótkiego gotowca: Uchwyt na podstawie nazwy pliku exe programu a poza tym czy pytający widzi słowo Window? Ono nie jest w nazwie funkcji dla jaj, tylko coś sugeruje. Rozróżniasz Window, a Process? :P I podsumowując nie ma pewności czy takie pobranie uchwytu dla porcesu wpłynie na jego okno, bo można tworzyć okna dialogowe (wtedy bez nazwy klasy) i bez tytułu, ale na przykład mój kod z EnumWindows spowoduje, że można wpłynąc na okno przeglądarki WWW Opera - przez process opera.exe i na przykład zamknąć jej okno.


edytowany 1x, ostatnio: olesio, 2011-12-02 16:57

Pozostało 580 znaków

marek100
2011-12-02 16:56
marek100
0

Dzięki, ale kod h := ExeProcessToHWnd('notepad.exe');
ShowMessage(IntToStr(h));
SendMessage(h,WM_MOVE,100,100);



nie działa. Co źle robię?

Pozostało 580 znaków

2011-12-02 17:02
Moderator

Rejestracja: 12 lat temu

Ostatnio: 3 godziny temu

Lokalizacja: Wrocław

1
Misiekd napisał(a)

NIE DZIAŁA to możesz powiedzieć jak Ci nie stanie przy dziewczynie.

Jak nie działa?
Nie kompiluje się, czy co?


edytowany 1x, ostatnio: Patryk27, 2011-12-02 17:02

Pozostało 580 znaków

2011-12-02 17:03

Rejestracja: 17 lat temu

Ostatnio: 4 lata temu

0

chyba wybrales zla droge.
jesli chcesz po prostu przesunac okno w miejsce x,y uzyj SetWindowPos - wpisz w googlach zeby zobaczyc jak sie tego uzywa. poszukaj "SetWindowPos msdn" - a znajdziesz dokumentacje microsoftu.

Pozostało 580 znaków

marek100
2011-12-02 17:04
marek100
0

Nie przesuwa okna, ale zwraca prawidłowy uchwyt do notatnika.

Pozostało 580 znaków

2011-12-02 17:05
Moderator

Rejestracja: 12 lat temu

Ostatnio: 3 tygodnie temu

Lokalizacja: Szczecin

0

Co robisz źle? Bierzesz się za pewne za klikanie w VCL, a chyba powinieneś zacząc od pisania w konsoli, a później w czystym WinAPI. Odpowiedź jest oczywista. Programiści Microsoftu nie przewidzieli obsługi komunikatu WM_MOVE albo co bardziej prawdopodobne komunikat ten według MSDN'u jest wysyłany PO ruszeniu okna. Do zmian rozmiarów czy pozycji okien albo kontrolek służy inna funkcja API: SetWindowPos. Tylko wiesz to trzeba chwile pokombinowac, pogooglować i sam byś do tego doszedł. Wiadomo forum jest od naprowadzenia i pomocy, ale przeraża mnie to, że ludzie bardzo często nic, a nic samodzielnie nie szukają i nie kombinują. Coś nie działa to jeb od razu smarują posta na forum. I później muszą czekać, aż w pytaniach o banały w Delphi czy Pascalu ja im odpowiem, a przy okazji sobie trochę pomarudzę ;P

var
  H : HWND;
begin
  H := ExeProcessToHWnd('notepad.exe');
  SetWindowPos(H, HWND_TOP, 10, 10, 0, 0, SWP_NOSIZE);
end;

EDIT: tyle marudziłem samrując tego posta, że cimak mnie ubiegł :) Ale ja za to pewnie ubiegne kolejne pytania w stylu Jak użyć SetWindowPos? :>


edytowany 1x, ostatnio: olesio, 2011-12-02 17:06

Pozostało 580 znaków

marek100
2011-12-02 17:07
marek100
0

dzięki, działa

Pozostało 580 znaków

marek100
2011-12-02 17:08
marek100
0

Po MSDN potrafię się sam poruszać, ale niestety nie znam wszystkich funkcji WinAPI

Pozostało 580 znaków

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