HyperLink
Bejelentkezés
E-mail: 
Jelszó: 





Skip Navigation Links
 

Jelszót tartalmazó mező értékének lekérdezése másik alkalmazásból


Példaprogram letöltése

15148 bájt

Jelszót bekérő alkalmazásainkban – mint amilyen az Internetes kapcsolat felépítését szolgáló alkalmazás bejelentkező ablaka - előfordul, hogy az alkalmazás megjegyzi a jelszót, hogy alkalmanként ne kelljen azt megadni. Így a jelszót elfelejthetjük, számtalan gondot okozva ezzel. Cikkünkben elkészítünk egy példaprogramot, mellyel tetszőleges alkalmazás beviteli mezőjéből ki tudjuk olvasni a szöveget, még akkor is, ha az egy jelszó.

A cikk melléklete két projektet tartalmaz. A PwdHolder alkalmazás Form-ja egy beviteli mezőt tartalmaz, mely jelszókét tárolja a beírt szöveget. Ezt fogjuk a másik alkalmazás segítségével kiolvasni.
A PwdViewer alkalmazásban egy csokor API függvényt használunk fel egy tetszőleges alkalmazás szövegbeviteli mezőjének kiolvasására, jelen esetben a másik program mezőjének értelmezésére. A műveletben kétféle eljárást alkalmazunk.
Az első eljárásban a SendMessage függvény segítéségével oldjuk meg a problémát, míg a másikban a GetDlgItemText függvény lesz a kulcs a megoldáshoz. A két metódus eltérő módon működik.
A két metódus meghívását azonban minden esetben megelőzi a cél beviteli mező megkeresésének folyamata. A program elindítása után elindítunk egy időzítőt, mely egytized másodpercenként figyeli a kurzor aktuális pozícióját, és meghatározza az adott pozícióban megtalálható vezérlő azonosítóját. Az azonosítót pedig már mindkét megoldásban felhasználhatjuk.
A példánkban a Win32 osztályban helyeztük el a szükséges API függvények, konstansok és struktúra definícióját. Az egérmutató aktuális helyzetét tároló struktúránk az APIPoint nevet viseli.
public struct APIPoint
{
  public int x;
  public int y;
}
A SendMessage függvény úgy kérdezi le a kívánt értéket, hogy egy WM_GETTEXT üzenetet küld el a kiválasztott ablaknak. A konstans értéke a következő:
public const int WM_GETTEXT = 0x000D;
Vizsgáljuk meg, hogyan történik az adott vezérlő kiválasztása a mutató segítségével. A műveletet a GetWindow metódusba ágyaztuk, mely két OUT módú paraméterrel rendelkezik: az első visszaadja a célvezérlő osztályát, a második pedig a globális azonosítóját.
private void GetWindow(out string classstr, out int hWnd)
{
Példányosítjuk pozíció koordinátáit tartalmazó struktúrát.
  Win32.APIPoint p = new Win32.APIPoint();
A GetCursorPos API függvény meghívásával ebben a struktúrában tárolhatjuk el a koordinátákat.
  Win32.GetCursorPos(out p);
A koordináták alapján meghatározzuk az aktuális pozícióban megtalálható ablak Handle property-jét. Ehhez a WindowFromPoint függvényt hívjuk meg.
  int h = Win32.WindowFromPoint(p.x,p.y);
Az osztály meghatározásához egy StringBuilder objektumot adunk át a GetClassName API függvénynek, melynek ez egy OUT paramétere lesz.
  StringBuilder builder = new StringBuilder(256);
  Win32.GetClassName(h,builder,builder.Capacity);
A kapott értékeket végül átadjuk értékként a kimenő paramétereknek.
  classstr = builder.ToString();
  hWnd = h;
}
SendMessage függvény meghívása
Az első megoldásban tehát a kapott értékekkel meghívjuk a SendMessage API függvényt.
string c = "";
int hWnd = 0;
GetWindow(out c, out hWnd);
textBox1.Text = c;
A kapott ablakkezelő értékét használjuk fel a SendMessage függvény első paramétereként. A második paraméter tartalmazza az üzenetet, melyet most a Win32.WM_GETTEXT konstans tartalmaz. A harmadik paraméter egy számot tartalmaz, mely a lekérdezendő szöveget tartalmazó puffer méretét adja meg, míg a negyedik paraméter egy mutató a pufferre.
string s = "";
A karakterláncot mutatóvá konvertáljuk a StrToPtr metódusunk segítségével.
IntPtr ptr = StrToPtr(s);
Win32.SendMessage(hWnd,Win32.WM_GETTEXT,100,ptr.ToInt32());
A függvényhívás után a pointer által mutatott memóriaterületen elhelyezett értéket kinyerjük.
string outstr = Marshal.PtrToStringAnsi(ptr);
GetDlgItemText függvény meghívása
A függvényhívás itt abban különbözik az előzőtől, hogy szükségünk van a vezérlőt tartalmazó ablak kezelőjének meghatározására. Ehhez meghívjuk a GetParent API függvényt.
parentWnd = Win32.GetParent(hWnd);
Meghatározzuk a vezérlő ID-jét is a kezelőjéből a GetDlgItemID függvénnyel.
int id = Win32.GetDlgCtrlID(hWnd);
A függvény első paraméterében helyezzük el a szülőablak kezelőjét, a másodikban a vezérlő azonosítóját.
Win32.GetDlgItemText(parentWnd,id,ptr.ToInt32(),100);
A kapott pointer mutatta memóriaterületet hasonló módon olvassuk ki.
string outstr = Marshal.PtrToStringAnsi(ptr);
Látható, hogy bármely megoldást használjuk, kinyerhető az esetleg elfelejtett jelszó a beviteli mezőből.

Cikksorozat

#IDKategóriaCikk címeSorozat
2591WindowsTippek és trükkök - RAS - Modem csengetési szám állítása1. rész
2622WindowsTippek és trükkök - Program futtatása más felhasználóként2. rész
2640WindowsA Windows ikonméretének megváltoztatása és Windows 2000 Asztaltémák3. rész
2657WindowsTippek és trükkök - Internet Explorer4. rész
2667WindowsTippek és trükkök5. rész
2684WindowsAlapértelmezések állítása, telepítési fájlok helye, intéző nézetek6. rész
2696WindowsBiztonsági trükkök7. rész
2702WindowsWindows XP trükkök8. rész
2729WindowsWindows 2000 és XP tippek, trükkök9. rész
2757WindowsRegistry trükkök10. rész
2784WindowsTippek, trükkök11. rész
2829WindowsTippek, trükkök12. rész
2889WindowsWindows XP tippek13. rész
2909WindowsTippek Windows XP-hez14. rész
2919WindowsWindows tippek15. rész
2924WindowsWindows tippek16. rész
2963WindowsWindows tippek17. rész
2973WindowsWindows Tippek18. rész
2981WindowsWindows tippek19. rész
2990WindowsTippek-trükkök20. rész
3027WindowsIIS tippek21. rész
3034WindowsWindows XP tippek-trükkök22. rész
3088WindowsWindows 2000/XP tippek, trükkök23. rész
3133WindowsWindows XP tippcsokor24. rész
3140WindowsWindows XP tippek, trükkök25. rész
3152WindowsXP és IIS tippek - trükkök26. rész
3158WindowsWindows XP tippek, trükkök27. rész
3168WindowsTippek, trükkök28. rész
3170WindowsRegistry trükkök29. rész
3179WindowsTippek, trükkök30. rész
3197WindowsWindows XP tippek, trükkök31. rész
3205WindowsTippek, trükkök32. rész
3214WindowsTippek, trükkök33. rész
3223WindowsTippek, trükkök34. rész
3233WindowsTippek, trükkök35. rész
3271WindowsTippek, trükkök36. rész
3307WindowsTippek, trükkök37. rész
3370WindowsTippek, trükkök38. rész
3399WindowsTippek, trükkök39. rész
3510WindowsTippek, trükkök40. rész
3611WindowsHardverrel kapcsolatos tippek, trükkök41. rész
3668WindowsRegistry trükkök42. rész
3711WindowsTippek, trükkök43. rész
3771WindowsTippek, trükkök44. rész
3801WindowsTippek, trükkök45. rész
3831WindowsTippek, trükkök46. rész
3891WindowsTippek, trükkök47. rész
3921WindowsTippek, trükkök48. rész
3981WindowsTippek, trükkök49. rész
4041WindowsTippek, trükkök50. rész
4071WindowsTippek, trükkök51. rész
4151WindowsTippek, trükkök52. rész
4171C#Tippek, trükkök53. rész
4211WindowsTippek, trükkök54. rész
4251WindowsTippek, trükkök55. rész
4281WindowsTippek, trükkök56. rész
3589DelphiTippek, trükkök57. rész
3718DelphiTippek, trükkök58. rész


Könyv
Ez a cikk megtalálható ebben a könyvben: C# Software Offline 2003 évkönyv 404. oldal

Felhasználási feltételek
A Software Online szoftverfejlesztői magazin mindegyik cikke, minden megjelent képe, és egyéb publikált anyaga szerzői jog védelme alatt áll! Bármilyen formában történő másodlagos terjesztésük, közzétételük vagy felhasználásuk kizárólag a kiadó előzetes írásbeli engedélyével történhet!

Copyright © 1999-2012 Animare Software Kft. Minden jog fenntartva!
| Készült: Animare Stúdió | Adatvédelem | Kapcsolat |