Vytisknout stránku | Zavřít okno

Rozpoznani OS...

Vytištěno z: CAD Fórum
Kategorie: Autodesk - stavebnictví, strojírenství, CAD/GIS
Název fóra: CAD programování
Popis fóra: Otázky programování - nadstavby a utility pro CAD a GIS aplikace Autodesk (VBA, AutoLISP, ARX/C++, .Net, JavaScript, Python, MEL...)
URL: https://www.cadforum.cz/forum/forum_posts.asp?TID=13695
Datum vytištění: 11.kvě.2026 v 00:13


Téma: Rozpoznani OS...
Odeslal: splonk
Předmět: Rozpoznani OS...
Datum odeslání: 10.říj.2011 v 14:08
Dobry den
Potreboval bych do LISPu dostat "prepinac" ktery podle verze OS spusti aplikaci (nastavbu AutoCADu) budto pro napr. XP x32 nebo Win7 x64... Proste neco ve stylu:
"Pokud je OS x64 (nebo neco jako - pokud existuje *\Program Files (x86)\) tak spust APP x64 jinak spust APP x32"
 
Nize uvadim konkretni priklady tak, jak je pouzivam nyni:
=========================
x86
=========================
(defun c:nxtIMG ()
 (startapp "ImageEditor.exe")
 (princ)
)
=========================
x64
=========================
(defun c:nxtIMG64 ()
 (startapp "ImageEditor64.exe")
 (princ)
)
 
 
Urcite uznate ze je toto dosti "neprakticke"... dva ruzne prikazi na "totez" a kdyz beru v uvahu ze mi se ikonky v Pracovnim prostoru ACADu odkazuji na tento lispik, tak my logicku vypliva ze musim mit dva WorkSpaces pro ruzne OS
 
Dalsi dotaz zni, co se stane kdyz, vyse uvedene spojim nasledovne:
 
=========================
(defun c:nxtIMG_Universal ()
 (startapp "ImageEditor.exe")
 (startapp "ImageEditor64.exe")
 (princ)
)
=========================
Vyzkousel jsem to a funguje, akorat nevim jak moc velka chyba je kdyz ACAD nenajde jednu ze dvou aplikaci? Zadnou chybu to sice nehlasi ale...?
 
Moc dekuji
JASponza
 
 


-------------
JASponza

ACA (AutoCAD) 21, 24
RVT 21, 24

Win 10, 11 x64



Odpovědi:
Odeslal: Vladimír Michl
Datum odeslání: 10.říj.2011 v 14:57
Lepší je to předem otestovat - buď verzi operačního systému nebo 32/64-bitovou verzi AutoCADu (což nemusí být vždy stejné). Tedy např.:
 

(vl-string-search "(x64)" (getvar "platform"))
 
Predikát 64-bitového AutoCADu:

(defun acad64bit-p ()
  (vl-load-com)
  (>
    (strlen
      (vl-prin1-to-string
        (vlax-get-acad-object)
      )
    )
    40
  )
)


-------------
Vladimír Michl (moderátor)
ARKANCE CZ - https://arkance.world - arkance.world
(podpora viz helpdesk.arkance-systems.cz)


Odeslal: splonk
Datum odeslání: 11.říj.2011 v 11:40
Dobry den
Dekuji na zaslanem. Sice je to prilis na moje "programatorske" schopnosti... Vyrobil jsem nasledujici:

(defun c:nxti(/ PLATF)
  (setq PLATF (getvar "platform"))
  (if (= PLATF "Microsoft Windows NT Version 6.1 (x64)")
      (progn (startapp "nXtImageEditor64.exe")
      (princ "\n   ** nXtImageEditor64 was started **"))
      (progn (startapp "nXtImageEditor.exe")
      (princ "\n   ** nXtImageEditor was started **"))
  )
  (princ)
)
Vim, ze skusenejsi kolegove asi "placou" nad timto vyrobkem (ma to asi daleko k tomu aby to slo univerzalne pouzivat). Mne to funguje a (zatim) resi problem duplicitnich Workspaces.
 
Umel by mi nekdo napsat to same ale elegantneji (jako podminka k rozpoznani jakou App spustit, v tomto pripade asi staci vedet zda je system x86 nebo x64 - na tom zda je to XP, Vista nebo Win7 pochopitelne nezalezi).
 
Dekuji
JASponza


-------------
JASponza

ACA (AutoCAD) 21, 24
RVT 21, 24

Win 10, 11 x64


Odeslal: Vladimír Michl
Datum odeslání: 11.říj.2011 v 11:58
Ano, bude to podobné:

(defun c:nxti ( / )
 (if (vl-string-search "(x64)" (getvar "platform"))
      (progn (startapp "nXtImageEditor64.exe")
      (princ "\n   ** nXtImageEditor64 was started **"))
      (progn (startapp "nXtImageEditor.exe")
      (princ "\n   ** nXtImageEditor was started **"))
 );if
 (princ)
)


-------------
Vladimír Michl (moderátor)
ARKANCE CZ - https://arkance.world - arkance.world
(podpora viz helpdesk.arkance-systems.cz)


Odeslal: splonk
Datum odeslání: 11.říj.2011 v 12:06
Dekuji pekne!
 
JASponza


-------------
JASponza

ACA (AutoCAD) 21, 24
RVT 21, 24

Win 10, 11 x64



Vytisknout stránku | Zavřít okno