Stapelbefehle oder synchronisieren oder...

German support forum

Moderators: Hacker, Stefan2, white

Post Reply
User avatar
dy/dx
Junior Member
Junior Member
Posts: 92
Joined: 2005-03-06, 22:32 UTC
Contact:

Stapelbefehle oder synchronisieren oder...

Post by *dy/dx »

Hallo,

Da ich bis jetzt noch keine Möglichkeit gefunden habe, die Speicherkarte meines PocketPCs automatisch mit dem PC zu synchronisieren, bin ich auf "Synchronisieren" beim TC gestossen; den TC habe ich sowieso *immer* geöffnet und starte auch alle Programme daraus.

Das ActiveSync Plugin habe ich installiert.

Nur wäre es mir ein Anliegen, vor allem solche Sachen nicht manuell machen zu müssen, sondern auf Knopfdruck.
Also wäre es toll, wenn ich mir einen Button einrichten könnte, der im "Stapel" mehrere Befehle hintereinander ausführt, z.B. der ActiveSync-Button zuerst ActiveSync startet und danach automatisch die Synchronisation.

Da ich bei dem Synchronisationstool aber leider noch nichts gefunden habe, mit dem man das automatisieren könnte, würde mir so eine Stapelaabarbeitung auch schon sehr weiterhelfen, die folgendes der Reihe nach macht:

1.) Starte ActiveSync (bzw. eigentlich ActiveSync-Toggle)
2.) wechsle links ins lokale Verzeichnis
3.) wechsle rechts nach \\\WinCE Device\Speicherkarte
4.) Öffne den Synchronisationsdialog.

So müsste ich zumindest nur mehr auf vergleichen und synchronisieren klicken, und würde das Synchronisieren nicht irgendwann "vergessen" oder unter den Tisch kehren.


Ist so etwas möglich oder gibt es eine andere Lösung, die mein Problem (von mir aus auch ohne TC ;-) löst?


Vielen Dank,

PS: MobSync habe ich schon gefunden, das funktioniert aber nur mit Adminrechten...
User avatar
Sheepdog
Power Member
Power Member
Posts: 5150
Joined: 2003-12-18, 21:44 UTC
Location: Berlin, Germany
Contact:

Re: Stapelbefehle oder synchronisieren oder...

Post by *Sheepdog »

dy/dx wrote:Nur wäre es mir ein Anliegen, vor allem solche Sachen nicht manuell machen zu müssen, sondern auf Knopfdruck.
Also wäre es toll, wenn ich mir einen Button einrichten könnte, der im "Stapel" mehrere Befehle hintereinander ausführt, z.B. der ActiveSync-Button zuerst ActiveSync startet und danach automatisch die Synchronisation.
Versuch es doch mal damit.
Script 16. # AutoHotkey: Schicke einen Befehl an den Total Commander
eignet sich dazu, die internen Befehle des TC mittels einer Batchdatei auch extern zu verwenden.

sheepdog
"A common mistake that people make when trying to design something
completely foolproof is to underestimate the ingenuity of complete fools."
Douglas Adams
User avatar
dy/dx
Junior Member
Junior Member
Posts: 92
Joined: 2005-03-06, 22:32 UTC
Contact:

Post by *dy/dx »

very, very nice, danke für den Tipp.

Sowas könnte ich wirklich öfters brauchen, wenn ein eigenes Programm fast etwas "Overkill" ist.

Und fast unglaublich was damit alles möglich ist, sogar komplexe DLL-Aufrufe, wie in meinem Script zu sehen.

Also, falls es wer braucht, ich druche es jedenfalls hier ab (ist aber noch BETA, d.h. die erste Version):

Code: Select all

; Script Name: ActiveSync.ahk
;
; Startet ActiveSync-Toggle
; Wird die Synchronisation innerhalb von 10 Sekunden gestartet, wird
; automatisch die Speicherkartensynchronisation im TotalCommander gestartet
;
; (c) 2006 Nikolaus Hammler <nhammler@scc.co.at>
; NOBAQ, http://www.nobaq.net
;


; helper function, from docs
InsertInteger(pInteger, ByRef pDest, pOffset = 0, pSize = 4)
{
	Loop %pSize%  ; Copy each byte in the integer into the structure as raw binary data.
		DllCall("RtlFillMemory", UInt, &pDest + pOffset + A_Index-1, UInt, 1, UChar, pInteger >> 8*(A_Index-1) & 0xFF)
}

; helper function, from docs
ExtractInteger(ByRef pSource, pOffset = 0, pIsSigned = false, pSize = 4)
{
	Loop %pSize%  ; Build the integer by adding up its bytes.
		result += *(&pSource + pOffset + A_Index-1) << 8*(A_Index-1)
	if (!pIsSigned OR pSize > 4 OR result < 0x80000000)
		return result  ; Signed vs. unsigned doesn't matter in these cases.
	return -(0xFFFFFFFF - result + 1)
}

; Works only in TotalCommander ;)
IfWinNotExist ahk_class TTOTAL_CMD
{
	Return
}

; Start ASToggle and give the user 10 seconds to start HotSync
IfWinNotExist ahk_class TFormActiveSyncToggle
{
	Run ASToggle.exe
}
WinWait ahk_class SyncMgrUI, , 10
if ErrorLevel <> 0
{
	Return
}

; Look if PDA is connected by initializing RAPI
;struct RAPIINIT
;{
;	uint cbSize; // 12
;	uint heRapiInit; // 0
;	uint hrRapiInit; // 0
;}
VarSetCapacity(rapiStructure, 12, 0)
InsertInteger(12, rapiStructure, 0)
Result := DllCall("rapi.dll\CeRapiInitEx", Str, rapiStructure)
if Result = 2147500037
{
	MsgBox RAPI konnte nicht initialisiert werden
	return
}

heRapiInit := ExtractInteger(rapiStructure, 4)
hrRapiInit := ExtractInteger(rapiStructure, 8)

Result := DllCall("kernel32.dll\WaitForSingleObject", Int, heRapiInit, Int, 5000)

if Result = 4294967295
{
	MsgBox Interner Fehler bei WaitForSingleObject
	return
}
if Result = 258
{
	MsgBox Timeout beim Warten auf das Geraet
	return
}
if hrRapiInit = 2147500037
{
	MsgBox Konnte nicht mit dem Geraet verbinden
	return
}

; Start SyncDialog, fill in correct values and compare directories
PostMessage 1075, 2020, 0, , ahk_class TTOTAL_CMD
WinWait ahk_class TCmpForm
ControlSetText, TEdit2, O:\mobile, ahk_class TCmpForm
ControlSetText, TEdit1, \\\WinCE Device\Speicherkarte, ahk_class TCmpForm
Sleep 100
ControlClick TButton5, ahk_class TCmpForm
WinWaitClose ahk_class TCmpForm
PostMessage 1075, 552, 0, , ahk_class TTOTAL_CMD
Return
Post Reply