SettingController pro nový Product popř. FindWindowExA z WinAPI
Uživatel | Příspěvek |
Břeťa Doležal ![]() ![]() Poslat zprávu | Profil |
Datum:
19.2. 2015
| Zobrazeno:
19071x Konfigurace CATIA: V5 R19 Text dotazu:
|
Ing Jan Cinert ![]() ![]() Poslat zprávu | Profil |
[#4957]
| Publikováno:
19.02. 2015 - 11:09 Ahoj,
já řeším něco podobného takto - jde o přejmenování názvu setů s Constraints. V podstatě si dialog sám vyvolám a pošlu do něj CTLR+V a pak Enter. Funguje to celkem obstojně, ale musí se vychytat prodleva, aby se okno stihlo otevřít. Jinak to makro pošle přímo do hlavního okna Catie a je zle... Win API <DllImport("User32.dll")> _ A funkce pro odeslani stisku klaves do okna... Private Function RenameConstraintSet(ByVal sSetName As String) As Boolean |
Břeťa Doležal ![]() ![]() Poslat zprávu | Profil |
[#5203]
| Publikováno:
27.05. 2015 - 09:45 Řešil někdy někdo, jak případně uživateli zajistit volbu se kterou Catií má makro spolupracovat?
Jde nějak z procesu vyzískat object INFITF.Application? Pokud běží vícero Catií najednou, jakou si makro vybere, pokud dám následující příkaz? locCATApp = CType(GetObject(, "CATIA.Application"), INFITF.Application)
Je zde nějaké pravidlo? Čas spuštění, poslední aktivní....apod. |
Ing Jan Cinert ![]() ![]() Poslat zprávu | Profil |
[#5205]
| Publikováno:
28.05. 2015 - 13:51 Zdravím,
při použití GetObject se chytá první spuštěná instance Catie. Pokud je každá jiná (Release, SP), dá se to poznat, ale pak už nevím jak si chytit tu správnou. Měl jsem s tím velký problém, když mi současně běžely V5 a V6. Oba procesy se jmenují úplně stejně (někdo nepřemýšlel) a tak se mi pořád chytala V6. Objektový model je podobný, takže jsem se vždycky dlouho vztekal a nemohl přijít na to, kde mám chybu. |
Milan Kubišta ![]() ![]() Poslat zprávu | Profil |
[#5208]
| Publikováno:
29.05. 2015 - 09:26 Běžící programy ve Windows jsou odněkud spouštěny. Tento údaj by nepomohl? |
Ing Jan Cinert ![]() ![]() Poslat zprávu | Profil |
[#5210]
| Publikováno:
29.05. 2015 - 11:30 To ano, ale problém je v tom, jak se dostat k tomu druhému procesu. Metoda GetObject prostě vezme jeden z nich a s tím pracuje. Pokud je to zrovna ten nesprávný, už s tím nic (alespoň zatím se na tu na to nepřišlo) nenaděláte.
Běžící procesy se dají najít, ale otázka je, jak už psal p. Doležal, jak z procesu vytáhnout objekt CATIA.Application. |
Tomáš Drbohlav ![]() ![]() Poslat zprávu | Profil |
[#5497]
| Publikováno:
26.11. 2015 - 11:27 Uživatel odpovídá na příspěvek #5203:
Ahoj Břéťo, metodou Process.GetProcesses se mi nepodařilo Catii chytit. Ale mělo by to jít přes win api - funkce FindWindow. V příloze máš mikroProjekt, kde se jména všech viditelných oken programů načtou do ListBoxu. Pak můžeš dvojklikem na určitý řádek okno aktivovat (SetForegroundWindow). Pak můžeš přiložený VB projekt upravit. Vyfiltrovat jen instance Catie a aktivovat dle libosti. Pomůže to? Měj se! T. |
Břeťa Doležal ![]() ![]() Poslat zprávu | Profil |
[#5215]
| Publikováno:
03.08. 2016 - 12:09 Díky Drbi. Tvoje aplikace vylistuje seznam oken, to bych ještě snad i zvládl. Já ještě chci následně získat objekt aplikace z handleru okna.
Nadějně vypadá tento zdrojový kód pro Excel, ale nevím jestli se tím dokážu prokousat. Win API neznám a vyhýbám se mu, jako čert kříži První na čem končím je, že neznám tyto konstanty pro Catii, vypadá to jako nějaký klíč z registrů, ale jestli to je na všech počítačích stejné pro Catii, to nevím?: Const IID_IDispatch As String = "{00020400-0000-0000-C000-000000000046}" Const OBJID_NATIVEOM As LongPtr = &HFFFFFFF0
Chce to někoho zkušeného na Win API. Zkusím nejprve zprovoznit toto pro Excel a pak budu zkoušet pro Catii. |
Ing Jan Cinert ![]() ![]() Poslat zprávu | Profil |
[#5944]
| Publikováno:
03.08. 2016 - 12:28 Taky si přidám trošku. V nedávné minulosti jsem se tím znovu, už poněkolikáté zabýval, leč bezúspěšně. Přes GetObject si .NET vždycky vytáhne první instanci Catie.
Našel jsem řešení přes tzv. ROT - Running Object Table, kde se přes CLSID dala získat konkrétní Catie. Zde je ale problém v tom, že Catie je tzv. MultiInstance - každá Catie má svůj proces. I touto metodou (která už tak byla nad moje znalosti a jen jsem kód lehce upravoval), jsem se neustále dostával pouze na první běžící instanci. Takže i zde bez úspěchu. Pak jsem našel někde na zahraničním fóru další slibně vypadající metodu, která přes pro mě opět nedosažitelné knihovny v C uložila objekt CNext do souboru (???) a z něj pak získala konkrétní instanci. Bohužel se zde muselo pracovat s kódy v C a tak jsem to vzdal. Navíc si myslím, že byla nutná nějaké příprava v systému, která se musela dělat u každé stanice, nešlo to nasadit plošně. No a nakonec přikládám video, kde to evidentně jde - jmenuje se to CSessionManager. I jsem psal autorovi, ale nikdo se neozval. Takže nezbývá než pátrat dál. Doufám, že se jednou dopátráme .... |
Uživatel nepřihlášen
Pro zobrazení obsahu stránky / provedení akce (vytvoření nového téma, napsání odpovědi do diskuse apod.) musíte být přihlášeni.