Przesuwanie innego okna

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

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();

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

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.

0

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


nie działa. Co źle robię?
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?

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.

0

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

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? :>

0

dzięki, działa

0

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

0

No spoko, ja też nie, ale wpisanie w google set window position msdn też by Ciebie naprowadziło. Anyway, temat leci do Newbie, bo to według mnie pytanie o podstawy raczej, może nie absolutne, ale nic super skomplikowanego.

0

A jest możliwe, że program blokuje komunikaty o zmianie rozmiarów i jest na nie odporny??

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