01. oktober 2005 - 09:40Der er
10 kommentarer og 1 løsning
Skrive til Edit felt i andet program.
Hej eksperter ;D
Er det muligt at lave et c++ program, som kan skrive værdier i et andet program's Edit felter? Og hvis ja, kan i give mig et hint til at komme videre :)
Ja, det kan sagtens lade sig gøre. Under Windows kan du fx bruge FindWindow hvis du kender navnet på det vindue (den edit control) du vil ændre. Du kan så bruge SetWindowText til at ændre indholdet.
Ja, prøv at starte Spy++ op (ligger under Tools hvis du har Visual C++ eller Visual Studio .NET, ellers kan den sikkert downloades fra Microsoft), og find vinduet for det program du vil "skrive til". Her kan du se alle de undervinduer, programmet består af (i Win32 anses alle kontroller, som Edit felter, knapper, med mere, som vinduer). Du skal nu finde det edit felt du skal skrive til, og finde en måde entydigt at identificere det. Hvis navnet lader til at være unikt, kan du bruge det.
Fandt en program der hedder SysTree (Har ikke Visual C++).. Med det program kan jeg finde mit vindue, og jeg kan se controllet.. Window: 000300EA "" Edit Window: 0011011C "" ComboBox Er de 2 komponenter jeg skal kunne skrive til.
Jeg lavede dette eksempel, der skriver til notepad hvis den kører, og fandt ud af at du ikke kan bruge SetWindowText hvis vinduet tilhører en anden proces end din egen. Derfor sendes der en WM_SETTEXT message direkte:
#include <stdio.h> #include <windows.h>
int main() { const char * lptstrText = "Hello, notepad"; HWND hwndEdit = NULL; HWND hwndNotepad = FindWindow("Notepad",NULL); if ( NULL != hwndNotepad ) { hwndEdit = FindWindowEx(hwndNotepad,NULL,"EDIT",NULL); if ( NULL != hwndEdit ) { if (SendMessage(hwndEdit,WM_SETTEXT,NULL,(LPARAM)lptstrText)) printf("You should see some text in the notepad window"); else printf("SetWindowText failed."); } else { printf("Could not find Notepad's Edit control"); } } else { printf("Notepad is not running.\n"); }
Hex værdierne er handles til vinduerne, dem kan du ikke bruge i dit program, da de skifter fra gang til gang. Du skal bruge klassenavnet (class).
I mit eksempel ved jeg at Notepad har klassenavnet Notepad, og tekstfeltet har klassenavnet "EDIT", og jeg kan så finde det rigtige vindue på den måde.
Tja, du skal gå igennem træet af vinduer fra toppen af når du har fundet programmet, og finde det edit felt du skal bruge. Hvis der er flere Edit felter og SysTree ikke viser forskellige navne, etc., kan det blive svært. Evt. kan du bruge rækkefølgen de kommer i, men jeg ved ikke om Windows garanterer at de altid enumereres i samme rækkefølge.
Det er en login screen til et spil : Dark Age of Camelot... Der er 1 Edit felt. og 2 ComboBoxe, jeg skal kunne skrive til det hele.. Bruge rækkefølgen de kommer i? hvordan ...
Synes godt om
Ny brugerNybegynder
Din løsning...
Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.