Reserved keyword (in Codeblock) ?

Sonstiges (nicht kategorisierbar)

Moderator: Moderatoren

Antworten
Benutzeravatar
AUGE_OHR
Marvin
Marvin
Beiträge: 12906
Registriert: Do, 16. Mär 2006 7:55
Wohnort: Hamburg
Hat sich bedankt: 19 Mal
Danksagung erhalten: 45 Mal

Reserved keyword (in Codeblock) ?

Beitrag von AUGE_OHR »

hi,

was ist an dem Code "verkehrt" ?
c:\ALASKA\WMI>xpp Win32_Directory.PRG
Xbase++ (R) Compiler 1.90.355 Apr 10 2009
Copyright (c) Alaska Software. All rights reserved.
File: Win32_Directory.PRG Line: 113
Win32_Directory.PRG(96:0): error XBT0251: Reserved keyword
1 error(s) found in file Win32_Directory.PRG!

Code: Alles auswählen

#include "common.ch"
#include "os.ch"
#define CRLF CHR(13)+CHR(10)

#PRAGMA LIBRARY("ASCOM10.LIB")

STATIC lVISTA := .F.

PROCEDURE Main(strComputer)
LOCAL objWMIService
LOCAL colItems
LOCAL cText
LOCAL cName
LOCAL bCollBlock
LOCAL i,iMax
LOCAL aitem := {}
LOCAL aProp := {;
"AccessMask",;
"Archive",;
"Caption",;
"Compressed",;
"CompressionMethod",;
"CreationClassName",;
"CreationDate",;
"CSCreationClassName",;
"CSName",;
"Description",;
"Drive",;
"EightDotThreeFileName",;
"Encrypted",;
"EncryptionMethod",;
"Extension",;
"FileName",;
"FileSize",;
"FileType",;
"FSCreationClassName",;
"FSName",;
"Hidden",;
"InstallDate",;
"InUseCount",;
"LastAccessed",;
"LastModified",;
"Name",;
"Path",;
"Readable",;
"Status",;
"System" }

DEFAULT strComputer TO "Localhost"

   CLS
   SET ALTER TO Win32_Directory.TXT
   SET ALTER ON

   IF "VISTA" $ OS(OS_PRODUCT) .OR.;
   "WIN2003" $ OS(OS_PRODUCT) .OR.;
   "WIN2008" $ OS(OS_PRODUCT)
      lVISTA := .T.
   ENDIF
   IF lVISTA
      objWMIService := CreateObject("WbemScripting.SWbemLocator" ):ConnectServer(strComputer,"Root\CIMv2")
   ELSE
      objWMIService := GetObject("WinMgmts:\\"+strComputer+"\Root\CIMv2")
   ENDIF

   colItems := objWMIService:ExecQuery("select * from Win32_Directory",,48)

   bCollBlock := {|oService,n| AADD(aItem,{ n,;
     oService:AccessMask,;
     oService:Archive,;
     oService:Caption,;
     oService:Compressed,;
     oService:CompressionMethod,;
     oService:CreationClassName,;
     oService:CreationDate,;
     oService:CSCreationClassName,;
     oService:CSName,;
     oService:Description,;
     oService:Drive,;
     oService:EightDotThreeFileName,;
     oService:Encrypted,;
     oService:EncryptionMethod,;
     oService:Extension,;
     oService:FileName,;
     oService:FileSize,;
     oService:FileType,;
     oService:FSCreationClassName,;
     oService:FSName,;
     oService:Hidden,;
     oService:InstallDate,;
     oService:InUseCount,;
     oService:LastAccessed,;
     oService:LastModified,;
     oService:Name,;
     oService:Path,;
     oService:Readable,;
     oService:Status,;
     oService:System })}

   ComEvalCollection(colItems, bCollBlock )

   IF LEN(aItem) > 0
      ? iMax := LEN(aItem[1])
      FOR i := 1 TO iMax-1
         ? SUBSTR(aProp[i]+SPACE(40),1,40)+":",aItem[1,i+1]
      NEXT
   ENDIF

   SET ALTER OFF
   SET ALTER TO

   Runshell("Win32_Directory.TXT","Notepad.exe",.T.)

RETURN
irgendwo im oService:XXXX Bereich meckert er ... wieso ?

hier die selbe Konstruktion, aber ohne "Reserved keyword" die zeigt das es nicht an dem
"Generator" liegt.

Code: Alles auswählen

#include "common.ch"
#include "os.ch"
#define CRLF CHR(13)+CHR(10)

#PRAGMA LIBRARY("ASCOM10.LIB")

STATIC lVISTA := .F.

PROCEDURE Main(strComputer)
LOCAL objWMIService
LOCAL colItems
LOCAL cText
LOCAL cName
LOCAL bCollBlock
LOCAL i,iMax
LOCAL aitem := {}
LOCAL aProp := {;
"BootDevice",;
"BuildNumber",;
"BuildType",;
"Caption",;
"CodeSet",;
"CountryCode",;
"CreationClassName",;
"CSCreationClassName",;
"CSDVersion",;
"CSName",;
"CurrentTimeZone",;
"DataExecutionPrevention_32BitApplications",;
"DataExecutionPrevention_Available",;
"DataExecutionPrevention_Drivers",;
"DataExecutionPrevention_SupportPolicy",;
"Debug",;
"Description",;
"Distributed",;
"EncryptionLevel",;
"ForegroundApplicationBoost",;
"FreePhysicalMemory",;
"FreeSpaceInPagingFiles",;
"FreeVirtualMemory",;
"InstallDate",;
"LargeSystemCache",;
"LastBootUpTime",;
"LocalDateTime",;
"Locale",;
"Manufacturer",;
"MaxNumberOfProcesses",;
"MaxProcessMemorySize",;
"Name",;
"NumberOfLicensedUsers",;
"NumberOfProcesses",;
"NumberOfUsers",;
"Organization",;
"OSLanguage",;
"OSProductSuite",;
"OSType",;
"OtherTypeDescription",;
"PlusProductID",;
"PlusVersionNumber",;
"Primary",;
"ProductType",;
"QuantumLength",;
"QuantumType",;
"RegisteredUser",;
"SerialNumber",;
"ServicePackMajorVersion",;
"ServicePackMinorVersion",;
"SizeStoredInPagingFiles",;
"Status",;
"SuiteMask",;
"SystemDevice",;
"SystemDirectory",;
"SystemDrive",;
"TotalSwapSpaceSize",;
"TotalVirtualMemorySize",;
"TotalVisibleMemorySize",;
"Version" }

DEFAULT strComputer TO "Localhost"

   CLS
   SET ALTER TO Win32_OperatingSystem.TXT
   SET ALTER ON

   IF "VISTA" $ OS(OS_PRODUCT) .OR.;
    "WIN2003" $ OS(OS_PRODUCT) .OR.;
    "WIN2008" $ OS(OS_PRODUCT)
      lVISTA := .T.
   ENDIF
   IF lVISTA
      objWMIService := CreateObject("WbemScripting.SWbemLocator"):ConnectServer(strComputer,"Root\CIMv2")
   ELSE
      objWMIService := GetObject("WinMgmts:\\"+strComputer+"\Root\CIMv2")
   ENDIF

   colItems := objWMIService:ExecQuery("select * from Win32_OperatingSystem",,48)

   bCollBlock := {|oService,n| AADD(aItem,{ n,;
     oService:BootDevice,;
     oService:BuildNumber,;
     oService:BuildType,;
     oService:Caption,;
     oService:CodeSet,;
     oService:CountryCode,;
     oService:CreationClassName,;
     oService:CSCreationClassName,;
     oService:CSDVersion,;
     oService:CSName,;
     oService:CurrentTimeZone,;
     oService:DataExecutionPrevention_32BitApplications,;
     oService:DataExecutionPrevention_Available,;
     oService:DataExecutionPrevention_Drivers,;
     oService:DataExecutionPrevention_SupportPolicy,;
     oService:Debug,;
     oService:Description,;
     oService:Distributed,;
     oService:EncryptionLevel,;
     oService:ForegroundApplicationBoost,;
     oService:FreePhysicalMemory,;
     oService:FreeSpaceInPagingFiles,;
     oService:FreeVirtualMemory,;
     oService:InstallDate,;
     oService:LargeSystemCache,;
     oService:LastBootUpTime,;
     oService:LocalDateTime,;
     oService:Locale,;
     oService:Manufacturer,;
     oService:MaxNumberOfProcesses,;
     oService:MaxProcessMemorySize,;
     oService:Name,;
     oService:NumberOfLicensedUsers,;
     oService:NumberOfProcesses,;
     oService:NumberOfUsers,;
     oService:Organization,;
     oService:OSLanguage,;
     oService:OSProductSuite,;
     oService:OSType,;
     oService:OtherTypeDescription,;
     oService:PlusProductID,;
     oService:PlusVersionNumber,;
     oService:Primary,;
     oService:ProductType,;
     oService:QuantumLength,;
     oService:QuantumType,;
     oService:RegisteredUser,;
     oService:SerialNumber,;
     oService:ServicePackMajorVersion,;
     oService:ServicePackMinorVersion,;
     oService:SizeStoredInPagingFiles,;
     oService:Status,;
     oService:SuiteMask,;
     oService:SystemDevice,;
     oService:SystemDirectory,;
     oService:SystemDrive,;
     oService:TotalSwapSpaceSize,;
     oService:TotalVirtualMemorySize,;
     oService:TotalVisibleMemorySize,;
     oService:Version })}

   ComEvalCollection(colItems, bCollBlock )

   IF LEN(aItem) > 0
      ? iMax := LEN(aItem[1])
      FOR i := 1 TO iMax-1
         ? SUBSTR(aProp[i]+SPACE(40),1,40)+":",aItem[1,i+1]
      NEXT
   ENDIF

   SET ALTER OFF
   SET ALTER TO

   Runshell("Win32_OperatingSystem.TXT","Notepad.exe",.T.)

RETURN
gruss by OHR
Jimmy
Benutzeravatar
Martin Altmann
Foren-Administrator
Foren-Administrator
Beiträge: 16509
Registriert: Fr, 23. Sep 2005 4:58
Wohnort: Berlin
Hat sich bedankt: 111 Mal
Danksagung erhalten: 48 Mal
Kontaktdaten:

Re: Reserved keyword (in Codeblock) ?

Beitrag von Martin Altmann »

Hallo Jimmy,
was ist mit diesem Attribut:

Code: Alles auswählen

oService:Hidden
Nimm das mal raus...

Viele Grüße,
Martin
:grommit:
Webseite mit XB2.NET und ausschließlich statischem Content in Form von HTML-Dateien: https://www.altem.de/
Webseite mit XB2.NET und ausschließlich dynamischem Content in Form von in-memory-HTML: https://meldungen.altem.de/

Mitglied der XUG Osnabrück
Vorsitzender des Deutschsprachige Xbase-Entwickler e. V.
Paul Brem
Rookie
Rookie
Beiträge: 18
Registriert: Di, 11. Apr 2006 8:30
Wohnort: CH-8707 Uetikon

Re: Reserved keyword (in Codeblock) ?

Beitrag von Paul Brem »

Ebenso dürfte
"Description"

Probleme bereiten
Benutzeravatar
Rolf Ramacher
Der Entwickler von "Deep Thought"
Der Entwickler von "Deep Thought"
Beiträge: 1930
Registriert: Do, 09. Nov 2006 10:33
Wohnort: Bergheim
Danksagung erhalten: 3 Mal
Kontaktdaten:

Re: Reserved keyword (in Codeblock) ?

Beitrag von Rolf Ramacher »

Him

was ist denn mit :Version() gibt es ja auch als einzelnen Befehl von Xbase -- oder :debug ???
Gruß Rolf

Mitglied der Gruppe XUG-Cologne
www.xug-cologne.de
Benutzeravatar
Martin Altmann
Foren-Administrator
Foren-Administrator
Beiträge: 16509
Registriert: Fr, 23. Sep 2005 4:58
Wohnort: Berlin
Hat sich bedankt: 111 Mal
Danksagung erhalten: 48 Mal
Kontaktdaten:

Re: Reserved keyword (in Codeblock) ?

Beitrag von Martin Altmann »

Ich habe das jetzt gerade mal versucht - es reicht, die von mir genannte Zeile zu entfernen, um das ganze compiliert zu bekommen.

Viele Grüße,
Martin
:grommit:
Webseite mit XB2.NET und ausschließlich statischem Content in Form von HTML-Dateien: https://www.altem.de/
Webseite mit XB2.NET und ausschließlich dynamischem Content in Form von in-memory-HTML: https://meldungen.altem.de/

Mitglied der XUG Osnabrück
Vorsitzender des Deutschsprachige Xbase-Entwickler e. V.
Benutzeravatar
AUGE_OHR
Marvin
Marvin
Beiträge: 12906
Registriert: Do, 16. Mär 2006 7:55
Wohnort: Hamburg
Hat sich bedankt: 19 Mal
Danksagung erhalten: 45 Mal

Re: Reserved keyword (in Codeblock) ?

Beitrag von AUGE_OHR »

hi,

ich merke schon an eueren Antworten das es wohl nicht so geht.

Code: Alles auswählen

oObject:Property
den die :Property "könnte" ein Keyword sein.

Also muss ich das noch weiter "verpacken" in

Code: Alles auswählen

oObject:getProperty("Property")
was dann ja wohl gehen dürfte, den ich will ja ALLE Property haben (nix mit was weglassen) !!!
gruss by OHR
Jimmy
Benutzeravatar
Martin Altmann
Foren-Administrator
Foren-Administrator
Beiträge: 16509
Registriert: Fr, 23. Sep 2005 4:58
Wohnort: Berlin
Hat sich bedankt: 111 Mal
Danksagung erhalten: 48 Mal
Kontaktdaten:

Re: Reserved keyword (in Codeblock) ?

Beitrag von Martin Altmann »

Yup - und wenn nicht, gibt es dann wenigstens eine "vernünftige" Fehlermeldung :wink:

Viele Grüße,
Martin
:grommit:
Webseite mit XB2.NET und ausschließlich statischem Content in Form von HTML-Dateien: https://www.altem.de/
Webseite mit XB2.NET und ausschließlich dynamischem Content in Form von in-memory-HTML: https://meldungen.altem.de/

Mitglied der XUG Osnabrück
Vorsitzender des Deutschsprachige Xbase-Entwickler e. V.
Benutzeravatar
AUGE_OHR
Marvin
Marvin
Beiträge: 12906
Registriert: Do, 16. Mär 2006 7:55
Wohnort: Hamburg
Hat sich bedankt: 19 Mal
Danksagung erhalten: 45 Mal

Re: Reserved keyword (in Codeblock) ?

Beitrag von AUGE_OHR »

Martin Altmann hat geschrieben:Yup - und wenn nicht, gibt es dann wenigstens eine "vernünftige" Fehlermeldung :wink:
Ja solche Fehlermeldungen, wo man nicht weiss wo man suchen soll, machen einen verrückt.

deshalb die Anfrage weil ich da nur an "Keyword" gedacht habe und nicht "wie" man solche
"Keyword" als Property benutzt.

übrigens o:getProperty() scheint zu gehen, aber da ich o:AccessMask nicht angegeben haben
(wie würde man das machen ?) bekomme ich nur NIL bei o:getProperty("hidden") zurück.

egal es geht ja erstmal nur darum das dass "Prinzip" des Generators funktioniert.
da ich "live" im Generator "den" Codeblock nicht ComEvalCollection() kann, schreibe ich das
ganze als Source auf die HD,Runschell("mySource.PRG","Xpp.exe"),Runschell("mySource.OBJ","alink.exe")
und dann mit Runschell("","mySource.EXE") die Applicationen aufrufen welche mit SET ALTERNATE
eine TXT Datei schreibt die ich nun wieder mit , Runschell("mySource.TXT","Notepad.exe")
aufrufe ... umständlich aber es funktioniert.

unter VISTA / W2K3r2 & Co mit Xbase++ "versagt" nun der Generator, (es gibt ja auch andere
Compiler ...) also lasse ich ihn eben unter WinXP Hunderte von W32_*.EXE generieren ...
die sind unter v1.9.335 zum Glück ja nur 10-15Kb gross :)

damit hätte ich nun ALLE, welche auf "der" Website zu finden sind, aber ich bin mir sicher es
gibt noch mehr ... (jaja irgendwo bei M$ ...oder C:\WINDOWS\system32\wbem\wbemtest.exe)
also denkt an mich wenn ihr irgendwo was über WMI Property "seht" was ich noch nicht habe.

noch eine Sache die ich ausprobieren muss : alle WMI Befehle kann man ja auch über das
Netzwerk ausführen. Dazu muss man sich aber mit Passwort anmelden.
Also wenn ihr ein solches Beispiel mal seht ...
gruss by OHR
Jimmy
Benutzeravatar
AUGE_OHR
Marvin
Marvin
Beiträge: 12906
Registriert: Do, 16. Mär 2006 7:55
Wohnort: Hamburg
Hat sich bedankt: 19 Mal
Danksagung erhalten: 45 Mal

Re: Reserved keyword (in Codeblock) ?

Beitrag von AUGE_OHR »

AUGE_OHR hat geschrieben:noch eine Sache die ich ausprobieren muss : alle WMI Befehle kann man ja auch über das Netzwerk ausführen.
Dazu muss man sich aber mit Passwort anmelden.
Also wenn ihr ein solches Beispiel mal seht ...

Code: Alles auswählen

 = code + "strComputer = \"" + this.TargetWindow.GetRemoteComputerName() + "\"
+ Environment.NewLine +
"strDomain = \"" + this.TargetWindow.GetRemoteComputerDomain() + "\" "
+ Environment.NewLine +
"Wscript.StdOut.Write \"Please enter your user name:\"" +
Environment.NewLine +
"strUser = Wscript.StdIn.ReadLine "
+ Environment.NewLine +
"Set objPassword = CreateObject(\"ScriptPW.Password\")"
+ Environment.NewLine +
"Wscript.StdOut.Write \"Please enter your password:\""
+ Environment.NewLine +
"strPassword = objPassword.GetPassword()"
+ Environment.NewLine +
"Wscript.Echo"
+ Environment.NewLine + Environment.NewLine +
"Set objSWbemLocator = CreateObject(\"WbemScripting.SWbemLocator\") "
+ Environment.NewLine +
"Set objWMIService = objSWbemLocator.ConnectServer(strComputer, _ "
+ Environment.NewLine +
"    \"" + this.NamespaceValue.Text +"\", _ "
+ Environment.NewLine +
"    strUser, _ "
+ Environment.NewLine +
"    strPassword, _ "
+ Environment.NewLine +
"    \"MS_409\", _ "
+ Environment.NewLine +
"    \"ntlmdomain:\" + strDomain) "
+ Environment.NewLine;

this.GroupRemoteComputerMenu.Checked)
so wie es aussieht gibt es auch noch ein activeX "ScriptPW.Password" was man erzeugen muss.
überhaupt ist das ja die "CreateObject" Syntax wie wir sie für VISTA & Co. verwenden sollen ...

wie man sehen kann kommt das Passwort mit in den objSWbemLocator:ConnectServer() Teil.
nun steht da auch noch "MS_409\" ... hm ... was ist das ...

http://technet.microsoft.com/en-us/libr ... 42611.aspx
dort hab ich es gefunden und es heisst das es sich um eine American English /:locale (0x409) handelt.

also dann mal ran und ausprobieren wie man nun WMI per Remote einsetzten könnte.
gruss by OHR
Jimmy
Antworten