Hi Leute
Also gleich mal zu meinem Prob ich möchte über $cmdline einen Datenhandle zwischen zwei gleichen Progs
ausführen ohne Winhandle. Nu ist das so das ich über prog A keine $var in prog B verändern kann.Ich möchte die Daten bzw FileNamen
auch nicht extern auslagern.Gibts da irgentwie eine andere möglichkeit
$cmdline parameter handle
-
- [ offen ]
-
Rodny_le_lude -
3. November 2009 um 09:50 -
Geschlossen -
Erledigt
-
-
Du kannst z.B. über ControlSetText bei einem unsichtbaren Label des zweiten Programmes den Text ändern. Das zweite Programm prüft zyklisch ob sich der Text des Labels geändert hat und setzt dann dementsprechend die Variable.
-
Du kannst z.B. über ControlSetText bei einem unsichtbaren Label des zweiten Programmes den Text ändern. Das zweite Programm prüft zyklisch ob sich der Text des Labels geändert hat und setzt dann dementsprechend die Variable.
Genau das will ich net. Ich habe nämlich vor einen Multiselect input über externe *.files einzubauen. und das mit der zyklischen abfrage wirkt dan auf den
User ob das Prog irgentwie fehlerhaft ist.die Daten sollten eins zu eins verarbeitet werden!! Also die übertragung sollte möglicherweise in einem Rutsch erfolgen -
Es ist n Player dessen Stärken im traymenu liegen
hier ist ne beta version http://rapidshare.de/files/48625529/Dsplayer.exe.html -
Netter Player bisher Daniel
Ich verstehe aber immer noch nicht ganz was du erreichen willst. Warum nimmst du nicht Drag 'n' Drop? -
Genau das will ich net. Ich habe nämlich vor einen Multiselect input über externe *.files einzubauen. und das mit der zyklischen abfrage wirkt dan auf den
User ob das Prog irgentwie fehlerhaft ist.die Daten sollten eins zu eins verarbeitet werden!! Also die übertragung sollte möglicherweise in einem Rutsch erfolgeneine abfrage alle 100-200 ms is doch vollkommen ausreichend für den "einen Rutsch". So kannst du ja sogar mehrere verschiedene Befehle an das zweite Programm übergeben. Abhängig vom Text im Input-feld wird die entsprechende Funktion ausgeführt, und danach das input feld wieder gelöscht.
-
Netter Player bisher Daniel
Ich verstehe aber immer noch nicht ganz was du erreichen willst. Warum nimmst du nicht Drag 'n' Drop?danke fürs Lob
Also Drag 'n' Drop kommt auf jeden Fall noch mit in die Packung (frühe BetaPhase), Auch eine Grafisch ausgereifte Oberfläche.
SEuBo
du sagst das ich mit verzögerung arbeiten soll. Doch das Problem ist dabei das es zu Fehlern kommen kann da man nicht sagen kann wie ausgelastet ein rechner ist. Das würde bedeuten das wenn jemand eine starke CPU auslasstung hat und sagen wir mal 1000 mp3 auf einmal Läd und diese Magische Grenze von 100 - 200 ms überschreitet das er dan die vorgehenden mp3 überspringen würde (schon getestet) -
Kommunikation zwischen 2 Skripten über WM_Copydata.
Spoiler anzeigen
[autoit]
[/autoit] [autoit][/autoit] [autoit]
;Script2 -> Sender
#include "MessageHandler.au3"$Local_ReceiverID_Name = "Script2sReceiverID";This is the ID that the other script will use to send data
[/autoit] [autoit][/autoit] [autoit]
$Remote_ReceiverID_Name = "Script1sReceiverID";This is the ID of the script we want to send data too$hwnd = _SetAsReceiver($Local_ReceiverID_Name)
[/autoit] [autoit][/autoit] [autoit][/autoit] [autoit]
ConsoleWrite("hwnd of the Local_ReceiverID_Name is " & $hwnd & @crlf)
$myFunc = _SetReceiverFunction("_MyFunc2")
ConsoleWrite("My data receiver function is " & $myFunc & @crlf)$Str = InputBox(@ScriptName," I am " & @ScriptName & @crlf & "Enter some data to be sent to the other script")
[/autoit] [autoit][/autoit] [autoit]$iSent = _SendData($Str,$Remote_ReceiverID_Name)
[/autoit] [autoit][/autoit] [autoit]While 1
[/autoit] [autoit][/autoit] [autoit][/autoit] [autoit]
sleep(100)
WEndFunc _MyFunc2($vText)
[/autoit] [autoit][/autoit] [autoit]
Msgbox(0,@ScriptName,@ScriptName & " has received a message" & @crlf & $vText)
Exit
EndFunc;Script1 -> Empfänger
[/autoit] [autoit][/autoit] [autoit]
#include "MessageHandler.au3"$Local_ReceiverID_Name = "Script1sReceiverID";This is the ID that the other script will use to send data
[/autoit] [autoit][/autoit] [autoit]
$Remote_ReceiverID_Name = "Script2sReceiverID";This is the ID of the script we want to send data too$hwnd = _SetAsReceiver($Local_ReceiverID_Name)
[/autoit]
ConsoleWrite("hwnd of the Local_ReceiverID_Name is " & $hwnd & @crlf)
$myFunc = _SetReceiverFunction("_MyFunc2")
ConsoleWrite("My data receiver function is " & $myFunc & @crlf)Per cmdline:
Spoiler anzeigen
[autoit]
[/autoit] [autoit][/autoit] [autoit]
#Include <Array.au3>
#Include <GUIConstantsEx.au3>Opt('WinTitleMatchMode', 3)
[/autoit] [autoit][/autoit] [autoit]global const $TITLE_RECEIVER = 'DVBViewerSleepTimerReceiver'
[/autoit] [autoit][/autoit] [autoit]
global const $WM_COPYDATA = 0x004A
Global $NewDataAvailable = False, $avData[1]if WinExists($TITLE_RECEIVER) then
[/autoit] [autoit][/autoit] [autoit]
; Kommandozeile an schon laufendes Skript weitergeben
;MsgBox(1, "", "aha")
If $CMDLINE[0] = 0 Then Exit
_SendData(WinGetHandle($TITLE_RECEIVER),$CMDLINERAW)
Exit
else
; Empfänger mit normalem Skript starten
_Receiver()
Exit
endiffunc _Receiver()
[/autoit] [autoit][/autoit] [autoit]
GUICreate($TITLE_RECEIVER)
GUIRegisterMsg($WM_COPYDATA, '_WM_COPYDATA')while 1
[/autoit] [autoit][/autoit] [autoit]
Sleep(10)
if $NewDataAvailable then
$NewDataAvailable = False
$sMsg = $avData[1]
_ArrayDelete($avData,1)
$aMsg = _ParseCMDLine($sMsg)
For $i = 0 To UBound($aMsg)-1
Switch $aMsg[$i][1]
Case "dauer"
MsgBox(0, '', "Dauer anzeigen")
Case "stop"
MsgBox(0, '', "beenden")
Exit
EndSwitch
Next
endif
wendGUIDelete()
[/autoit] [autoit][/autoit] [autoit][/autoit] [autoit]
endfunc; _Receiver;===============================================================================
[/autoit] [autoit][/autoit] [autoit]
;
; Function Name: _ParseCMDLine($CMDString)
; Description:: Parses a CMD-String to Parameters with Values
; Parameter(s): $CMDString -> String to parse
; Requirement(s): ?
; Return Value(s): Error: 0 and @error = StringRegExp-Error
; Success: 2 Dimensional Array:
; $array[$i][0] : Parameter including value
; $array[$i][1] : Parameter
; $array[$i][2] : Value with quotation marks (only if value has quotaion marks)
; $array[$i][3] : Value without quotation marks
; Author(s): Prog@ndy
;
; Basis: http://regexlib.com/REDetails.aspx?regexp_id=1220
;===============================================================================
;
Func _ParseCMDLine($CMDString)
Local $y, $j, $i, $entry
Local $x = StringRegExp($CMDString,'(?:\s*)(?<=[-|/])(?<name>[^\s-|/:|=]*)(?:(?:[:|=](?:("(?<value1>.*?)(?<!\\)")|(?<value>\S*)))|\w*?)',4)
If @error Then Return SetError(@error,0,0)
Local $ResultArray[UBound($x)][4]
For $i = 0 To UBound($x)-1
$entry = $x[$i]
For $y = 0 To UBound($entry)-1
$j = $y
If $y > 3 Then $j = 3
$ResultArray[$i][$j] = $entry[$y]
Next
Next
Return $ResultArray
EndFuncfunc _SendData($hWnd, $sData)
[/autoit] [autoit][/autoit] [autoit]local $tCOPYDATA, $tMsg
[/autoit] [autoit][/autoit] [autoit]$tMsg = DllStructCreate('wchar[' & StringLen($sData) + 1 & ']')
[/autoit] [autoit][/autoit] [autoit]
DllStructSetData($tMsg, 1, $sData)
$tCOPYDATA = DllStructCreate('dword;dword;ptr')
DllStructSetData($tCOPYDATA, 2, DllStructGetSize($tMsg))
DllStructSetData($tCOPYDATA, 3, DllStructGetPtr($tMsg))
$Ret = DllCall('user32.dll', 'lparam', 'SendMessageW', 'hwnd', $hWnd, 'int', $WM_COPYDATA, 'wparam', 0, 'lparam', DllStructGetPtr($tCOPYDATA))
if (@error) or ($Ret[0] = -1) then
return 0
endif
return 1
endfunc; _SendDatafunc _WM_COPYDATA($hWnd, $msgID, $wParam, $lParam)
[/autoit] [autoit][/autoit] [autoit]local $tCOPYDATA = DllStructCreate('dword;dword;ptr', $lParam)
[/autoit] [autoit][/autoit] [autoit]
local $tMsg = DllStructCreate('wchar[' & DllStructGetData($tCOPYDATA, 2)/2 & ']', DllStructGetData($tCOPYDATA, 3))_ArrayAdd($avData, DllStructGetData($tMsg, 1))
[/autoit] [autoit][/autoit] [autoit]
$NewDataAvailable = Truereturn 0
[/autoit]
endfunc; _WM_COPYDATA -
Danke nuts werds mal n bissel modi.. und ma gucken was rauskommt