Ovládání formulářů v CATIA   zodpovězená otázka

VB.NET, VB6/VBA

Zdravím fórum,

jsem spíše konstruktér než programátor, tak doufám že prominete možný nepřesný popis problému.

Píšu makra pro CATII (CAD soft). CATIA má v sobě integrovaný VB6, ale je možné ji ovládat i externě přes COM rozhraní (VB si vytvoří příslušné dll knihovny - to využívám já (VB2008).

Problém je v tom, že některé funkce programu se nedají ovládat přímo makrem - lze je jen spustit. Pokud funkce nemá dialog, kde je potřeba interaktivity s uživatelem, dá se to takto obejít. Někdy je ale třeba v tomto dialogu kliknout myší na některou z voleb a pak dialog potvrdit - TO JE PROBLÉM.

Jak nasimulovat kliknutí myší už jsem zjistil, nevím ale jak zacílit kurzor na příslušné místo v dialogu. Jinak než myší (TAB v dialogu nefunguje) to opravdu nejde.

Exisuje nějaká možnost jak tohle vyřešit? Předem díky.

nahlásit spamnahlásit spam 0 odpovědětodpovědět

Toto je téměř nerealizovatelně složitá záležitost. Pokud ty funkce nejsou dostupné samostatně, ale pouze zapouzdřené v dialogovém okně, potom bych to řešil buď nějak jinak, nebo vůbec.

nahlásit spamnahlásit spam -1 / 1 odpovědětodpovědět

Podľa názvu triedy okna alebo titulku okna si vyhľadať handle k oknu tlačidla a poslať mu správu WM_CLICK. Prvne je teda potrebné ten dialóg spustiť, potom cez nástroj Spy++ z DirectX SDK príp. cez niečo podobné zistíte nejaký identifikátor okna(ale nie jeho ID, to sa stále mení).Následne keď chcete programovo kliknúť na to tlačidlo, tak prehľadáte všetky okná v systéme, nájdete ho a potom ako som povedal poslať mu WM_CLICK a ono si pomyslí, že naň niekto klikol a kto naň klikol už neporieší.

nahlásit spamnahlásit spam 0 odpovědětodpovědět

To je sice teoreticky možné, prakticky ale těžko realizovatelné, obzvlášť pro začátečníka. Speciálně ta část s vyhledáním okna - hledat ho podle ID je blbost protože se pokaždé mění a hledat ho podle názvu je také blbost protože ten může být také pokaždé jiný a nebo naopak stejný s jinými okny.

nahlásit spamnahlásit spam -1 / 1 odpovědětodpovědět

hledat ho podle názvu je také blbost protože ten může být také pokaždé jiný

Poznáte aplikáciu, ktorá pri každom spustení dá svojmu oknu iný názov ?

nahlásit spamnahlásit spam 0 odpovědětodpovědět

Tak vidím, že tudy cesta asi nevede. Postup uvedený v druhém příspěvku pro mě nepřipadá v úvahu (ne, že bych se rád něco nepřiučil, ale opravdu nejsem rodilý programátor).

Nicméně díky za za ujištění, že to nejspíš opravdu nepůjde.

Jdu bloumat nad jiným způsobem, jak to obejít.

nahlásit spamnahlásit spam 0 odpovědětodpovědět

Jistě. Dělá to téměř každá druhá aplikace, například Poznámkový blok, Word nebo Excel (název souboru).

nahlásit spamnahlásit spam 0 odpovědětodpovědět

Dobre tak raz je tam "Bez názvu - Poznámkový blok" a inokedy "hosts - Poznámkový blok" ale vždy je tam "Poznámkový blok".Navyše keď si odfiltrujete okna procesu notepad.exe ktorých predkom je okno pracovnej plochy tak máte presnú zhodu.

A to okno, na ktorom to chce naklikať nie je dialóg ? Alebo aj dialógy majú názvy "názovdokumentu - Poznámkový blok" ?

nahlásit spamnahlásit spam 0 odpovědětodpovědět

Takové okno zase může mít název, který není unikátní (a taky často mívá), například Detail záznamu, Chyba nebo něco podobného.

Nikdo netvrdí, že to nejde, ale nemusí to fungovat na 100% a rozhodně to není triviální. Záleží na konkrétní aplikaci.

nahlásit spamnahlásit spam 0 odpovědětodpovědět

Měl jsem v práci soft, který dokázal simulovat události na základě shody obrazců mezi obrazovkou a uloženými fragmenty obrázků resp. vzhled ovládacích prvků libovolné aplikace. Ta aplikace si prostě našla uvedený obrázek na obrazovce a provedla nějakou jednoduchou přiřazenou akci. Např. levý klik, vyplnění čísla.

Pak jste si do určité složky nakopíroval obrazce tlačítek a pojmenoval je. Podle názvu jste pak v aplikaci přiřadil konkrétní akci a spustil. Funguje to výborně a nahradí to hromadu práce. Dokonce je to propojený s DB a určité hodnoty např. do formulářů se tak dají vkládat automaticky a ušetří to fůru času a práce. Např. na skladě to používáme u příjmu zboží a stačí naskenovat EAN a všechny potřebné údaje to do webového formuláře zadává "samo" :-) Zvláště když používáte řešení, které nemůžete doprogramovat a zidealizovat tak je to fakt perfektní. Je k tomu i určitý scriptovací jazyk, kde se dájí podmínky větvit a odchýtávat výjimky. Jediná nevýhoda je, že je to citlivý na změnu např. motivů aplikace či Windows, kde např. nějaký button tím změní vzhled.

Sice je to za money, ale bylo to řádově v několika desítkách euro. Když jsem to viděl v akci tak je to prostě geniální řešení a nechtěl jsem nejdříve věřit, že to funguje. Dokonce jsem to rozchodil i u nás v práci na registrování příjmů do systému, kde jsme tím snížili čas zaregistrování asi na desetinu. Jenže já měl k dispozici ještě nějakou starou verzi a když jsem se díval na jejich stránky tak to vypadá, že jsou ještě dále.

Odkaz nepošlu, protože to nemohu najít :-), ale pokud budete mít zájem tak ještě zapátrám.

nahlásit spamnahlásit spam 0 odpovědětodpovědět

Ještě jednou díky, objevil jsem naštěstí způsob, který problém řeší alespoň částečně. To co popisujete je určitě perfektní, ale pro můj případ (jedno kliknutí do formuláře) zbytečně složité.

nahlásit spamnahlásit spam 0 odpovědětodpovědět

Rozpoznávání a následné ovládání částí aplikace na základě OCR? Tak od takové prasárny ruce pryč.

nahlásit spamnahlásit spam -1 / 1 odpovědětodpovědět

Zní to zajímavě a určitě by s tím byla spousta legrace, ale obávám se že pro komerční využití to je dost velké bezpečnostní riziko. Pokud budete mít dva velice podobné dialogy, může se stat že to OCR nepozná správně.

Stačí napsat program který bude mít stejně vyhlížející dialogová okna a je problém. V lepším případě to bude pouze náhodná shoda ve vzhledu dvou oken a nebude to fungovat, protože ta OCR utilitka bude "klikat" na jiný dialog. V horším případě se bude jednat o škodlivý software který Vám někdo záměrně podstrčí do počítače. Nevím přesně jak to OCR uvnitř funguje (jestli to nehlídá ještě něco dalšího aby to poznalo jestli se opravdu jedná o správné okno, ale podle toho co píšete to vypadá že ne), ale teoreticky by stačilo udělat printScreen toho originálního formuláře (třeba právě toho do kterého se dotahují údaje z databáze) a nastavit ho jako pozadí toho "škodlivého software" a problém je tu, data se vloží do škodlivého prográmku a odešlou se kam si jeho tvůrce zamane.

nahlásit spamnahlásit spam 0 odpovědětodpovědět
                       
Nadpis:
Antispam: Komu se občas házejí perly?
Příspěvek bude publikován pod identitou   anonym.
  • Administrátoři si vyhrazují právo komentáře upravovat či mazat bez udání důvodu.
    Mazány budou zejména komentáře obsahující vulgarity nebo porušující pravidla publikování.
  • Pokud nejste zaregistrováni, Vaše IP adresa bude zveřejněna. Pokud s tímto nesouhlasíte, příspěvek neodesílejte.

přihlásit pomocí externího účtu

přihlásit pomocí jména a hesla

Uživatel:
Heslo:

zapomenuté heslo

 

založit nový uživatelský účet

zaregistrujte se

 
zavřít

Nahlásit spam

Opravdu chcete tento příspěvek nahlásit pro porušování pravidel fóra?

Nahlásit Zrušit

Chyba

zavřít

feedback