Zobrazit plnou verzi příspěvku: Rozpoznani OS...

splonk
10.10.2011, 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
 
 

Vladimír Michl
10.10.2011, 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ř.:
 
[CODE]
(vl-string-search "(x64)" (getvar "platform"))[/CODE]
 
Predikát 64-bitového AutoCADu:
[CODE]
(defun acad64bit-p ()  (vl-load-com)  (>    (strlen      (vl-prin1-to-string        (vlax-get-acad-object)      )    )    40  ))[/CODE]

splonk
11.10.2011, 11:40
Dobry den
Dekuji na zaslanem. Sice je to prilis na moje "programatorske" schopnosti... Vyrobil jsem nasledujici:
[CODE]
(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))

[/CODE]
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

Vladimír Michl
11.10.2011, 11:58
Ano, bude to podobné:
[CODE]
(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)
)
[/CODE]

splonk
11.10.2011, 12:06
Dekuji pekne!
 
JASponza