Pobieranie uchwytów Edit innej aplikacji.

0

Witam wszystkich.

Dosyć często muszę zmieniać adresy IP w ustawieniach karty sieciowej, i tak sobie pomyślałem aby napisać krótki programik, gdzie za pomocą przycisku sam będzie wypełniał te pola, ale...
Oczywiście jest mały problemik, bo za cholerę nie mogę pobrać uchwytów tych pól. Może czegoś nie wiem, lub źle robię.
Oto kodzik , który skleciłem :

var Form2          : TForm2;
    hEdit1, hEdit2 : hwnd;
    H1             : Cardinal;
    s              : string;
    lpBuf          : PChar;
    nazwa_okna     : String;
    uchwyt         : HWND;

implementation

{$R *.dfm}

procedure TForm2.sButton1Click(Sender: TObject);

  function EnumWindowProc(uchwyt: HWnd; P: Pointer): Boolean; stdcall;
  var winname, cname : array[0..144] of Char;
  begin
    Result := True;
    GetWindowText(uchwyt, winname, 144);
    GetClassName(uchwyt, cname, 144);
    if (Pos(nazwa_okna, winname) > 0) then H1 := uchwyt;
  end;


 begin
   nazwa_okna := 'Właściwości: Protokół internetowy w wersji 4 (TCP/IPv4)';
   EnumWindows(@EnumWindowProc,0);
   if H1 <> 0 then
   begin
     hEdit1 := FindWindowEx(H1, 0, 'SysTabControl32', nil);
     if hEdit1 > 0 then
     begin

       s:= '192.168.0.0';
       GetMem(lpBuf, Length(s));
       try
         CopyMemory(lpBuf, @s[1], Length(s));
         SendMessage(hEdit1, WM_SETTEXT, 0, Longint(lpBuf));
       finally
         FreeMem(lpBuf);
       end;

     end;
   end;
 end;

end.

Wszelkie wskazówki mile widziane.

0

Chyba coś robisz nie tak, bo wyszukujesz najpierw okno przez EnumWindows, a według mnie raczej powinieneś pobrać uchwyt okna przez FindWindow podając (klasę jeżeli ono ją ma, ja to zawsze sprawdzam badziewnym programem TDWinControl z torry.net, ale są inne jakieś Spy++ i tym podobne również do tego celu, a jeżeli nie ma klasy to tytuł okna jak wpisałeś). Następnie trzeba - wedlug mnie - zrobić EnumChildWindows i wysłać komunikat do pola edycyjnego znalezionego w oknie rodzicu (pewnie będzie miało nazwę klasy TEdit lub Edit, a Ty wysyłasz do SysTabControl32, a to chyba zakładka). Przeanalizuj sobie kod dołączony do tego posta. W oryginale mój program wczytywał kody z pliku tekstowego w pętli i w wątku wklejał na chama numery seryjne do dołaczonego keygenme, sprawdzając hookiem czy nie pokazało się okienko z gratulacjami. I tak ten lamerski sposób się nie sprawdził, a nadal czekam aż jedna osoba z forum pomoże mi zrozumieć algo generacji seriala na różne name, co udało mi się tylko częściowo, a i też nie ma pewności, że do końca słusznie. Jak się uda to wtedy wspólnie możemy machnąc keygena pod Delphi w WinAPI. Ale mniejsza z tym co kombinowałem, myślę, że patrząc na mój kod powinieneś zrozumieć ideę.

0

Aby nie dawać nowego tematu, napiszę tutaj.

Więc sprawa wygląda tak.
Pobieram sobie uchwyt ListBox innej aplikacji i za pomocą

SendMessage(Select_H, LB_SETCURSEL, 7, 0)

podświetla mi wybraną pozycję w ListBoxie, ale niestety inne kontrolki nie zmieniają przy tym swoich stanów, a powinny...
Wymagane jest kliknięcie w daną pozycję.
Jak kliknąć w wybraną pozycję ?

EDIT: Ok. Problem rozwiązany :)

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