Paules-PC-Forum.de Anzeige:

Microsoft Windows Intune: PC-Verwaltung und -Sicherheit in der Cloud: Updateverwaltung, Anti-Virus und vieles mehr!


Zurück   Paules-PC-Forum.de > Programmierung > XProfan

XProfan Alles rund um die Programmiersprache XProfan.

EM-Tippspiel

Paule bei Facebook


Paule bei Twitter


Letzte Forenthemen
Gehe zum ersten neuen Beitrag Bundesliga-Tippspiel Saision...
Aufrufe: 7670, Antworten: 187
Gehe zum ersten neuen Beitrag PPF - Spiel "Wörter weiter...
Aufrufe: 26970, Antworten: 4223
Gehe zum ersten neuen Beitrag PPF - Shoppingwahn
Aufrufe: 50963, Antworten: 1397
Gehe zum ersten neuen Beitrag Algorithmen Teil IV...
Aufrufe: 3361, Antworten: 128
Gehe zum ersten neuen Beitrag Pc lahmt plötzlich
Aufrufe: 186, Antworten: 6
Gehe zum ersten neuen Beitrag PC fährt nicht mehr hoch.
Aufrufe: 0, Antworten: 0
Gehe zum ersten neuen Beitrag Von Live CD Windowspfad...
Aufrufe: 329, Antworten: 19
Gehe zum ersten neuen Beitrag Captur 2.2 (Snow Leo)
Aufrufe: 28, Antworten: 0
Gehe zum ersten neuen Beitrag Captur 2.3 (Lion)
Aufrufe: 34, Antworten: 0
Gehe zum ersten neuen Beitrag Acer Aspire 8745ZG fährt...
Aufrufe: 69, Antworten: 6
Zeige:





Antwort
 
LinkBack Themen-Optionen Ansicht
Alt 26.10.2009, 10:20   #1 (Direktlink)
Forenmaskottchen
 
Benutzerbild von Bangkok
 
Registriert seit: 09.02.2009
Ort: Bangkok
Beiträge: 686
Standard Eingehende Parameter

Ich bin gerade dabei eine Routine zu entwerfen, die es meinem Programm ermöglicht, alle im Explorer markierten Dateien zu übernehmen. Mein Code funktioniert auch gut, aber basiert darauf, dass die Dateien alle in Anführungszeichen übergeben werden. Dazu meine Frage. Kann man man sich darauf verlassen, dass der Explorer oder andere Datei-Commander die Dateien immer in Anführungszeichen übergeben ? Wenn ja wäre mein Code fertig, wenn nicht muss ich diese Möglichkeit auch noch berücksichtigen. Bei meinen Tests war das bisher so, dass alles in Anführungszeichen war.
Hier mein Test-Code. Zum Testen muss zur Exe kompiliert werden und ein Link ins "senden an" Verzeichnis. Funktioniert in der Form erst ab XProfan 11

Code:
Proc incoming
declare para$[]
var m% = 0:var count% = 0
var mem& = External("kernel32","GetCommandLineA")
var in$ = string$(mem&,0)
var p&= External("shlwapi.dll","PathGetArgsA",addr(in$))
var args$ = string$(p&,0)
if left$(args$,1) = "\q"
var t$ = ""
whileloop 1,len(args$)
case mid$(args$,&loop,1) = "\q":inc m%
if mid$(args$,&loop,1) <> "\q"
t$ = t$ +mid$(args$,&loop,1)
endif
ifnot m% mod 2
if t$ = " "
t$ = ""
else
para$[count%] = t$
t$ = ""
inc count%
endif
endif
endwhile
endif
return para$[]
endproc

cls
declare p$[]
p$[] =  incoming()
print "Arraygröße:",sizeof(p$[])
whileloop 0,sizeof(p$[])-1
print p$[&loop] + "  = Arraystring: "+str$(&loop)
endwhile
waitinput
Zum Code noch eine Zusatzfrage.
die beiden API-Aufrufe schreiben ja etwas in den Speicher und ich hole das nur über den Zeiger ab, ohne Bereichsvariable und ohne Dimensionierung. Wird der Speicher dann von Windows wieder automatisch freigegeben, hat jemand eine definitive Antwort. Ich denke mal ja
__________________
Er ist ein Mann wie ein Baum. Sie nennen ihn Bonsai.
http://dieterzornow.gmxhome.de
Bangkok ist offline   Mit Zitat antworten
Werbung

Windows 7 Tipps und Tricks in Bildern

Alt 26.10.2009, 13:27   #2 (Direktlink)
Dauergast
 
Benutzerbild von p. specht
 
Registriert seit: 06.02.2009
Ort: Wien, Österreich
Beiträge: 1.082
Standard

Also bei mir kommt immer "Arraygröße: 0"
__________________
Win7-64HomPremSP1,XProfan11.2a,XPIA,JWasm,XPSE,IntelCoreQuad2.5GHz/4GB/je1TB HD intern:esataBay:USB2:USB3
p. specht ist gerade online   Mit Zitat antworten
Alt 26.10.2009, 14:23   #3 (Direktlink)
Forenmaskottchen
 
Benutzerbild von Bangkok
 
Registriert seit: 09.02.2009
Ort: Bangkok
Beiträge: 686
Standard

Ist die Frage ob du Parameter an das Programm übergibst. Du must es zur Exe kompilieren, dann einen Link zu dieser Exe ins Senden an Verzeichnis kopieren. Im Explorer dann einige Dateien markieren, rechts klicken und im Menü dann "senden an" diese Exe wählen, dann sollten die Dateien im Programm angezeigt werden.
__________________
Er ist ein Mann wie ein Baum. Sie nennen ihn Bonsai.
http://dieterzornow.gmxhome.de
Bangkok ist offline   Mit Zitat antworten
Alt 26.10.2009, 16:22   #4 (Direktlink)
AHT
Super-Moderator
 
Registriert seit: 15.02.2009
Beiträge: 10.786
Standard

Zitat:
Zitat von Bangkok Beitrag anzeigen
Dazu meine Frage. Kann man man sich darauf verlassen, dass der Explorer oder andere Datei-Commander die Dateien immer in Anführungszeichen übergeben ?
Ich bin mir da auch nicht sicher, ich denke aber, ja (ungetestet).

Meine Überlegung dazu: Anführungszeichen sind wichtig, wenn es sich um ein "langes Dateiformat" handelt - es kann sonst Probleme mit den Freizeichen innerhalb eines Ordners oder einer Datei geben. Wo also lange Dateinamen übergeben werden, sind die normalerweise in Anführungszeichen...
__________________
______________

Bitte Schnelltest durchführen: Neuer Virus, ahnungslose User seit Monaten infiziert!

Mfg

AHT
AHT ist offline   Mit Zitat antworten
Alt 26.10.2009, 16:25   #5 (Direktlink)
Super-Moderator
 
Benutzerbild von Frabbing
 
Registriert seit: 05.02.2009
Ort: Westliches NRW
Alter: 44
Beiträge: 5.094
Standard

Ich weiß nicht genau, ob ich alles so richtig gemacht habe. Bei mir stand Arraygröße 1 und der String (Dateiname) war nicht in Anführungszeichen.
__________________
Gruß, Frank


Webpage http://frabbing.bplaced.net
mit Freeware - Tools, Spiele und Grafiken.
Frabbing ist offline   Mit Zitat antworten
Werbung

Windows 7 Tipps und Tricks in Bildern

Alt 26.10.2009, 16:32   #6 (Direktlink)
Forenmaskottchen
 
Benutzerbild von Bangkok
 
Registriert seit: 09.02.2009
Ort: Bangkok
Beiträge: 686
Standard

Ja das ist richtig, die Anführungszeichen werden ja aussortiert, da mein Programm kein Problem mit Leerzeichen oder so hat.
__________________
Er ist ein Mann wie ein Baum. Sie nennen ihn Bonsai.
http://dieterzornow.gmxhome.de
Bangkok ist offline   Mit Zitat antworten
Alt 26.10.2009, 16:39   #7 (Direktlink)
Super-Moderator
 
Benutzerbild von Frabbing
 
Registriert seit: 05.02.2009
Ort: Westliches NRW
Alter: 44
Beiträge: 5.094
Standard

Sehe schon.
__________________
Gruß, Frank


Webpage http://frabbing.bplaced.net
mit Freeware - Tools, Spiele und Grafiken.
Frabbing ist offline   Mit Zitat antworten
Alt 26.10.2009, 19:03   #8 (Direktlink)
AHT
Super-Moderator
 
Registriert seit: 15.02.2009
Beiträge: 10.786
Standard

Zitat:
Zitat von Bangkok Beitrag anzeigen
Zum Code noch eine Zusatzfrage.
die beiden API-Aufrufe schreiben ja etwas in den Speicher und ich hole das nur über den Zeiger ab, ohne Bereichsvariable und ohne Dimensionierung. Wird der Speicher dann von Windows wieder automatisch freigegeben, hat jemand eine definitive Antwort. Ich denke mal ja
Schauen wir mal, was GetCommandLine überhaupt tut - wir nehmen uns erst mal GetCommandLineW vor, und das unter NT-basierenden Systemen:
Beim Starten eines Processes erzeugt das OS einige Systemstrukturen im virtuellen Speicher des Prozesses - eine davon ist die Systemstruktur PEB.
Ein Member dieser Struktur ist wiederum ein Pointer auf eine weitere Systemstruktur, die Struktur RTL_USER_PROCESS_PARAMETERS.
Diese Struktur besteht unter anderem aus verschiedenen Unicode-Strings - einer davon ist ist die CommandLine. GetCommandLineW ließt also nur die Adresse eines Strings aus, der sowieso schon besteht (da muss nichts freigegeben werden).
Mit GetCommandLineA sieht das ganz ähnlich aus.
__________________
______________

Bitte Schnelltest durchführen: Neuer Virus, ahnungslose User seit Monaten infiziert!

Mfg

AHT
AHT ist offline   Mit Zitat antworten
Alt 26.10.2009, 19:48   #9 (Direktlink)
Super-Moderator
 
Benutzerbild von Frabbing
 
Registriert seit: 05.02.2009
Ort: Westliches NRW
Alter: 44
Beiträge: 5.094
Standard

Übergeben wird die Adresse auf den String. Laut MSDN gibt es keinen Hinweis darauf, dass es sich um eine Kopie des Strings handeln würde.
__________________
Gruß, Frank


Webpage http://frabbing.bplaced.net
mit Freeware - Tools, Spiele und Grafiken.
Frabbing ist offline   Mit Zitat antworten
Alt 26.10.2009, 20:02   #10 (Direktlink)
AHT
Super-Moderator
 
Registriert seit: 15.02.2009
Beiträge: 10.786
Standard

Zitat:
Zitat von Frabbing Beitrag anzeigen
Übergeben wird die Adresse auf den String. Laut MSDN gibt es keinen Hinweis darauf, dass es sich um eine Kopie des Strings handeln würde.
Richtig, es ist keine Kopie des Strings. Bei GetCommandLineW kann ich das hundertprozentig und sehr einfach nachweisen. Die Struktur, in der sich die Ansi Version befindet, ist komplett unbekannt. Der String, der da erzeugt wird, ist aber ein Counted-Ansi-String, auf dessen Stringpointer mehrere andere Sachen zeigen. Der wird also mit ziemlicher Sicherheit auch beim Prozessstart erzeugt. Wäre es eine Kopie, wäre kein Counted-Ansi-String nötig.
__________________
______________

Bitte Schnelltest durchführen: Neuer Virus, ahnungslose User seit Monaten infiziert!

Mfg

AHT
AHT ist offline   Mit Zitat antworten
Werbung

Windows 7 Tipps und Tricks in Bildern

Alt 26.10.2009, 20:11   #11 (Direktlink)
Forenmaskottchen
 
Benutzerbild von Bangkok
 
Registriert seit: 09.02.2009
Ort: Bangkok
Beiträge: 686
Standard

Ja danke, so ähnlich waren auch meine Überlegungen aber ich wollte sicher gehen.
__________________
Er ist ein Mann wie ein Baum. Sie nennen ihn Bonsai.
http://dieterzornow.gmxhome.de
Bangkok ist offline   Mit Zitat antworten
Alt 27.10.2009, 11:11   #12 (Direktlink)
Forenmaskottchen
 
Benutzerbild von Bangkok
 
Registriert seit: 09.02.2009
Ort: Bangkok
Beiträge: 686
Standard

Habe noch etwas getestet, Also man kann sich nicht darauf verlassen, dass alles in Anführungszeichen gesendet wird. Kurze Dateinamen die 8+3 entsprechen werden ohne gesendet, also muss ich die noch berücksichtigen.
__________________
Er ist ein Mann wie ein Baum. Sie nennen ihn Bonsai.
http://dieterzornow.gmxhome.de
Bangkok ist offline   Mit Zitat antworten
Alt 27.10.2009, 13:14   #13 (Direktlink)
AHT
Super-Moderator
 
Registriert seit: 15.02.2009
Beiträge: 10.786
Standard

Es ist manchmal besser, zum Testen auch eine EXE online zu stellen.
Nicht jeder hat die neueste Profanversion.
__________________
______________

Bitte Schnelltest durchführen: Neuer Virus, ahnungslose User seit Monaten infiziert!

Mfg

AHT
AHT ist offline   Mit Zitat antworten
Alt 27.10.2009, 14:07   #14 (Direktlink)
Forenmaskottchen
 
Benutzerbild von Bangkok
 
Registriert seit: 09.02.2009
Ort: Bangkok
Beiträge: 686
Standard

Das Thema hat sich erledigt. Wer nicht in die Hilfe schaut muss halt an so was rummachen. Aber bei mir kam plötzlich eine dumpfe Erinnerung hoch. Geht doch in Profan so einfach.

Code:
cls
Print "Parameteranzahl: " + @Str$(%ParCount)

    WhileLoop 1, %ParCount

      Print @Par$(&Loop)

    EndWhile

waitinput
__________________
Er ist ein Mann wie ein Baum. Sie nennen ihn Bonsai.
http://dieterzornow.gmxhome.de
Bangkok ist offline   Mit Zitat antworten
Alt 27.10.2009, 14:38   #15 (Direktlink)
AHT
Super-Moderator
 
Registriert seit: 15.02.2009
Beiträge: 10.786
Standard

Ja, das war schon klar.
Kommt Profan da aber mit den fehlenden Anführungszeichen zurecht?
Auch da musst du basteln.
__________________
______________

Bitte Schnelltest durchführen: Neuer Virus, ahnungslose User seit Monaten infiziert!

Mfg

AHT
AHT ist offline   Mit Zitat antworten
Werbung

Windows 7 Tipps und Tricks in Bildern

Antwort

  Paules-PC-Forum.de > Programmierung > XProfan

Lesezeichen

Themen-Optionen
Ansicht

Forumregeln
Es ist Ihnen erlaubt, neue Themen zu verfassen.
Es ist Ihnen erlaubt, auf Beiträge zu antworten.
Es ist Ihnen nicht erlaubt, Anhänge hochzuladen.
Es ist Ihnen nicht erlaubt, Ihre Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are an


Ähnliche Themen
Thema Autor Forum Antworten Letzter Beitrag
Eingehende Anrufe sperren - bestimmte Rufnummer ReyvenKey Allgemein 4 15.04.2008 15:05
Emails werden gelesen ausgehende und eingehende Destruction Software - Allgemein 1 06.06.2007 11:14
Falsches Parameter! crawler Software - Allgemein 0 03.12.2006 00:55
Falsche Parameter Phyrexo Windows XP 1 17.07.2006 14:19
Parameter DerderdieGanssah Sonstige Programmiersprachen 2 15.06.2005 23:41



Alle Zeitangaben in WEZ +2. Es ist jetzt 12:04 Uhr.


Powered by vBulletin® Version 3.8.7 (Deutsch)
Copyright ©2000 - 2012, vBulletin Solutions, Inc.
Powered by vBCMS® 2.7.0 ©2002 - 2012 vbdesigns.de
(c) Paules-PC-Forum.de

::: Impressum :::

Search Engine Optimization by vBSEO 3.3.2