» »

win32 api

win32 api

g7mafijec ::

Hi.

V firmi mamo staro aplikacijo, ki prebira podatke iz enkodirane baze (flat file) in jih prikaže v svojem GUI-ju. Podatki so organizirani po ključih v listbox elementu (seznam) in ob izbiri posameznega od njih se v textboxu (tekstovno polje) prikaže podatek.

Rabil bi te podatke spraviti v datoteko, po en podatek v vrtici. Vidim dva načina:

1) ugotovim, kako je enkodiran flat-file in ga dekodiram. slabša možnost.

2) prek windows api-ja povrsti izbiram elemente z listboxa, za vsakega skopiram vsebino textboxa ter zapišem v datoteko. Boljša možnost.

Rabim torej kodo, ki bi v zagnanem programu poiskala listbox, in šla povrsti po elementih v njem. Sproti bo gledala vsebino textboxa, in jo kopirala v datoteko. Dodatna zanimivost je, da textbox uporablja RTF (rich text format), samo to se da naknadno popraviti.

Kaj naj začnem brati?
Hvala.

g7 mafijec

Vesoljc ::

> Rabim torej kodo, ki bi v zagnanem programu poiskala listbox

ti bi torej rad imel program, ki bo delal sz programom? predvidevam, da izvorne kode tiste aplikacije pa nimaš...
Abnormal behavior of abnormal brain makes me normal...

g7mafijec ::

Yes.
-

g7mafijec ::

Ne, kode legacy aplikacije nimam :(. Če bi jo imel, bi jo le malo spremenil in rešil problem.

Kot praviš, rabim napisati kontrolni program, ki bo šel skozi list legacy programa, in si izpisoval vrednosti texboxa. Napisal bi ga v Visual Basicu, uporabil pa bi Windows API. Vse skupaj bi laufalo na Win98.

Preletel sem par bukev na temo windows API-ja, vendar tam ne morem najti nic o interprocess communication (kot se temu lepo reče). Not pa so funkcije za kontrolo miške in tipkovnice. Zelo grobo bi stvar napisal tako, da bi legacy program postavil v levi gornji kot, in nato pošiljal miško na absolutne koordinate:

1) premakni scrollbar na listu za ena dol
2) klikni prvi element v seznamu
3) klikni po textboxu
4) pošlji CTRL-A (select all)
5) pošlji CTRL-C (copy)
6) preberi vsebino clippboarda in jo shrani


Me no like this. Predvsem me moti, ker se besedilo textboxa vzame kot navaden text, ne v RTF zapisu.

Ima kdo boljšo idejo?
Hvala mu.
-i

Zgodovina sprememb…

LoneWolf ::

Zelo grobo bi stvar napisal tako, da bi legacy program postavil v levi gornji kot, in nato pošiljal miško na absolutne koordinate:

Jesus Christ Superstar... :\
Uporabi EnumWindows() in EnumChildWindows(). Ce imas dostop do MSDN in rabis demo, kako se prelista vsa okna in childe, poisci Spy (stara in enostavna stvar, source koda je zraven) ali Spy++ (precej bolj izpopolnjen, a brez source kode) za demo. Obstaja se cel kup podobnih utilityjev, ki znajo it rekurzivno cez vsa odprta okna, stvar je trivialno naredit.
Ko imas enkrat handle od ustrezne kontrole, pac delas z njo. Listbox komponenta ne dela z RTF tekstom - ce imas notri pobarvan ali oblikovan text, to samo pomeni, da aplikacija uporablja ownerdraw - sama izrisuje text in sploh vsebino kontrole po svoje namesto da bi to prepustila kontroli sami. V tem primeru je tudi vprasljivo, ce listbox kontrola sploh hrani text, ki ga vidis, listbox lahko deluje tudi v virtual mode nacinu kjer aplikacija skrbi za podatke, kontrola ima samo reference o stevilu vrstic in podobno, za ostalo pa klice ven aplikacijo. Poglej si ListBox Win32 API dokumentacijo za vse podrobnosti.


Vredno ogleda ...

TemaSporočilaOglediZadnje sporočilo
TemaSporočilaOglediZadnje sporočilo
»

[C#] pomoc pri vpisu elementov v listBox

Oddelek: Programiranje
101293 (1208) keworkian
»

C# Program

Oddelek: Programiranje
393095 (2018) Spura
»

C#, Dodajanje podatkov v Arraylist z Gumbom

Oddelek: Programiranje
82280 (2119) Beezgetz
»

[.NET] vohunjenje za API klici

Oddelek: Programiranje
212695 (1176) t909
»

[VB.NET] Izpisovanje v TextBox in prekinitve

Oddelek: Programiranje
121237 (930) darkolord

Več podobnih tem