Leaderboard
Popular Content
Showing content with the highest reputation on 04/29/2014 in all areas
-
Here's a UDF to save and restore the entire clipboard contents. I was inspired by AHK's ClipboardAll function, which is missing from AutoIt's clipboard UDF's. If anyone thinks this is worthy of submitting for Standard UDF inclusion, let me know. Otherwise I won't bother. I'm not sure yet whether memory allocated with _MemGlobalAlloc() is automatically freed when the script closes, so I included the function to free it. If this is not necessary, then it will be removed. Notes on Memory Management: Thanks to Valik and ProgAndy for their helpful discussion. The SetClipboardData() function (_Clipboard_SetDataEx()) transfers ownership of the hMem object to the Clipboard. This means that after running this function your script no longer owns that memory, and should not free it. This means - 1. _Clipboard_GetAll() creates a local script owned copy of the Clipboard in memory. If this copy is never used, ie put back onto the Clipboard with _Clipboard_PutAll(), then it MUST be freed with _Clipboard_MemFree() before exiting the script or reusing the variable again with _Clipboard_GetAll(). If not, the memory may be leaked. 2. If the copied memory is at some point placed back on the Clipboard with _Clipboard_PutAll(), then the Clipboard now owns this memory. You should NOT free it with _Clipboard_MemFree() at this point. UPDATE 1: 2008-09-25 Updated the UDF and example based on the memory management notes above. UPDATE 2: 2009-10-23 Updated to use memcpy_s instead of _MemMoveMemory(). Added some more comments. UPDATE 3: 2009-10-24 Small change to return values of _MemCopyMemory(). Added a second example. _Clipboard.au3 - #include-once #include <Clipboard.au3> Func _Clipboard_GetAll(ByRef $avClip) Local $iFormat = 0, $hMem, $hMem_new, $pSource, $pDest, $iSize, $iErr = 0, $iErr2 = 0 Dim $avClip[1][2] If Not _ClipBoard_Open(0) Then Return SetError(-1, 0, 0) Do $iFormat = _ClipBoard_EnumFormats($iFormat) If $iFormat <> 0 Then ReDim $avClip[UBound($avClip) + 1][2] $avClip[0][0] += 1 ; aClip[n][0] = iFormat, aClip[n][1] = hMem $avClip[UBound($avClip) - 1][0] = $iFormat $hMem = _ClipBoard_GetDataEx($iFormat) If $hMem = 0 Then $iErr += 1 ContinueLoop EndIf $pSource = _MemGlobalLock($hMem) $iSize = _MemGlobalSize($hMem) $hMem_new = _MemGlobalAlloc($iSize, $GHND) $pDest = _MemGlobalLock($hMem_new) _MemCopyMemory($pSource, $pDest, $iSize) If @error Then $iErr2 += 1 _MemGlobalUnlock($hMem) _MemGlobalUnlock($hMem_new) $avClip[UBound($avClip) - 1][1] = $hMem_new EndIf Until $iFormat = 0 _ClipBoard_Close() ; Return: ; | 0 - no errors ; |-2 - _MemGlobalAlloc errors ; |-4 - _MemCopyMemory errors ; |-6 - both errors ; @extended: ; - total number of errors Local $ErrRet = 0 If $iErr Then $ErrRet -= 2 If $iErr2 Then $ErrRet -= 4 If $ErrRet Then Return SetError($ErrRet, $iErr + $iErr2, 0) Else Return 1 EndIf EndFunc Func _ClipBoard_PutAll(ByRef $avClip) ; DO NOT free the memory handles after a call to this function ; the system now owns the memory Local $iErr = 0 If Not IsArray($avClip) Or UBound($avClip, 0) <> 2 Or $avClip[0][0] <= 0 Then Return SetError(-1, 0, 0) If Not _ClipBoard_Open(0) Then Return SetError(-2, 0, 0) If Not _ClipBoard_Empty() Then _ClipBoard_Close() Return SetError(-3, 0, 0) EndIf ; seems to work without closing / reopening the clipboard, but MSDN implies we should do this ; since a call to EmptyClipboard after opening with a NULL handle sets the owner to NULL, ; and SetClipboardData is supposed to fail, so we close and reopen it to be safe _ClipBoard_Close() If Not _ClipBoard_Open(0) Then Return SetError(-3, 0, 0) For $i = 1 To $avClip[0][0] If _ClipBoard_SetDataEx($avClip[$i][1], $avClip[$i][0]) = 0 Then $iErr += 1 Next _ClipBoard_Close() If $iErr Then Return SetError(-4, $iErr, 0) Else Return 1 EndIf EndFunc Func _Clipboard_MemFree(ByRef $avClip) Local $iErr = 0 If Not IsArray($avClip) Or UBound($avClip, 0) <> 2 Or $avClip[0][0] <= 0 Then Dim $avClip[1][2] Return SetError(-1, 0, 0) EndIf For $i = 1 To $avClip[0][0] If Not _MemGlobalFree($avClip[$i][1]) Then $iErr += 1 Next Dim $avClip[1][2] If $iErr Then Return SetError(-2, $iErr, 0) Else Return 1 EndIf EndFunc Func _MemCopyMemory($pSource, $pDest, $iLength) Local $aResult = DllCall("msvcrt.dll", "int:cdecl", "memcpy_s", "ptr", $pDest, "ulong_ptr", $iLength, "ptr", $pSource, "ulong_ptr", $iLength) If @error Then Return SetError(@error, 0, -1) Return SetError(Number($aResult[0] <> 0), 0, $aResult[0]) EndFunc Example 1: copy something to the clipboard first - #include <_Clipboard.au3> #include <Array.au3> Global $aClip ConsoleWrite("->Clipboard contents from ClipGet():" & @CRLF & ClipGet() & @CRLF) _Clipboard_GetAll($aClip) ConsoleWrite(">_Clipboard_GetAll Error: " & @error & @CRLF) _ArrayDisplay($aClip) ConsoleWrite("->Clipboard contents after _Clipboard_GetAll (via ClipGet):" & @CRLF & ClipGet() & @CRLF) _ClipBoard_Open(0) _ClipBoard_Empty() _ClipBoard_Close() ConsoleWrite("->Proof the clipboard is empty: |<" & ClipGet() & ">|" & @CRLF) _ClipBoard_PutAll($aClip) ConsoleWrite(">_Clipboard_PutAll Error: " & @error & @CRLF) ConsoleWrite("->New clipboard contents from ClipGet():" & @CRLF & ClipGet() & @CRLF) Example 2: remove formatting from copied text - #AutoIt3Wrapper_AU3Check_Parameters=-d -w 1 -w 2 -w 3 -w 4 -w 5 -w 6 #include <_Clipboard.au3> HotKeySet("^v", "_ClearAndPaste") HotKeySet("^+v", "_PasteNormal") While 1 Sleep(1000) WEnd Func OnAutoItExit() ; unset hotkeys HotKeySet("^v") HotKeySet("^+v") EndFunc Func _ClearAndPaste() ; CTRL+v HotKeySet("^v") ; unset hotkey Local $aClip _Clipboard_GetAll($aClip) ; save clipboard contents Local $sClip = ClipGet() ; get clipboard as plain text ClipPut($sClip) ; put clear text back on clipboard Send("^v") ; paste it _Clipboard_PutAll($aClip) ; restore previous contents (clears current contents) HotKeySet("^v", "_ClearAndPaste") ; reset hotkey EndFunc Func _PasteNormal() ; CTRL+SHIFT+v HotKeySet("^v") ; unset hotkey Send("^v") ; paste HotKeySet("^v", "_ClearAndPaste") ; reset hotkey EndFunc1 point
-
The First: http://en.wikipedia.org/wiki/Data_structure then Autoit Help. Saludos1 point
-
Need help with a WinAPI
mLipok reacted to Unc3nZureD for a topic
Holy Crap WTF. Are you sure your HDD works well?1 point -
For the record, SQLite can handle disk-based or memory-based DBs. Of course a memory DB is way faster to populate, query, update... but it's temporary unless backed up to disk. I'll point you to an easy way to copy an SQLite DB while it's being used to/from disk or memory. 50k rows is a very small DB. This little thing is *very* flexible.1 point
-
1 point
-
Here what I did so far: #include <GDIPlus.au3> _GDIPlus_Startup() Global $e, $t = TimerInit() ;~ Global $hBmp = smethod_4(_Raw(), 350, 100, 3) Global $hBmp = smethod_4(Binary(FileRead(@ScriptDir & "\raw1.raw")), 540, 960) $e = TimerDiff($t) ConsoleWrite("Runtime: " & Round($e / 1000, 2) & " s / " & Round(($e / 1000) / 60, 2) & " min" & @CRLF) _GDIPlus_ImageSaveToFile($hBmp, @ScriptDir & "\Converted.png") _GDIPlus_BitmapDispose($hBmp) _GDIPlus_Shutdown() Func smethod_4($bRaw, $iW, $iH, $iBytes = 2) Local $hBitmap = _GDIPlus_BitmapCreateFromScan0($iW, $iH) Local $tBitmapData = _GDIPlus_BitmapLockBits($hBitmap, 0, 0, $iW, $iH, $GDIP_ILMWRITE, $GDIP_PXF32ARGB) Local $iScan0 = DllStructGetData($tBitmapData, "Scan0") Local $tPixel = DllStructCreate("int[" & $iW * $iH & "];", $iScan0) Local $iLength = BinaryLen($bRaw), $z = 1, $iX, $iY For $iY = 0 To $iH - 1 $iRowOffset = $iY * $iW + 1 For $iX = 0 To $iW - 1 DllStructSetData($tPixel, 1, smethod_3(Int(BinaryMid($bRaw, $iLength - $z, $iBytes))), $iRowOffset + $iX) $z += $iBytes Next ConsoleWrite(Int($iY / ($iH - 1) * 100) & "%" & @CRLF) Next _GDIPlus_BitmapUnlockBits($hBitmap, $tBitmapData) Return $hBitmap EndFunc #cs private static Bitmap smethod_4(BinaryReader binaryReader_0, Size size_0) { Bitmap bitmap = new Bitmap(size_0.Width, size_0.Height); BitmapData bitmapdata = bitmap.LockBits(new Rectangle(new Point(0, 0), size_0), ImageLockMode.WriteOnly, bitmap.PixelFormat); try { IntPtr destination = bitmapdata.Scan0; int length = (Math.Abs(bitmapdata.Stride) * bitmap.Height) / 4; int[] source = new int[length]; for (int i = 0; i < length; i++) { source[i] = smethod_3(binaryReader_0.ReadUInt16()); } Marshal.Copy(source, 0, destination, length); } finally { bitmap.UnlockBits(bitmapdata); } return bitmap; } #ce Func smethod_3($uShort) Local $num = BitAND(BitAND($uShort, 0x1F) * 8, 0xFF) Local $num2 = BitAND(BitAND(BitShift($uShort, 5), 0x3F) * 4, 0xFF) Local $num3 = BitAND(BitShift($uShort, 11) * 8, 0xFF) Return BitOR(BitOR(BitOR(0xFF000000, BitShift($num3, -0x10)) , BitShift($num2, -8)), $num) EndFunc #cs private static int smethod_3(ushort ushort_0) { byte num = (byte) ((int) ((((double) (ushort_0 & 0x1f)) / 32.0) * 256.0)); byte num2 = (byte) ((int) ((((double) ((ushort_0 >> 5) & 0x3f)) / 64.0) * 256.0)); byte num3 = (byte) ((int) ((((double) (ushort_0 >> 11)) / 32.0) * 256.0)); return (((-16777216 | (num3 << 0x10)) | (num2 << 8)) | num); } #ce ;Code below was generated by: 'File to Base64 String' Code Generator v1.12 Build 2014-04-08 Func _Raw($bSaveBinary = False, $sSavePath = @ScriptDir) Local $Raw $Raw &= 'O7FY+Pz4AQAQVPAgAPz/vwC/AL8AvwC/AL8AvwC/AP+/AL8AvwC/AL8AvwC/AL8A/78AvwC/AL8AvwC/AL8AvwD/vwC/AL8AvwC/AL8AXwBUAP+/Ql8AXwBfAF8AXwBfAF8A/18AXwBfAF8AXwBfAF8AXwD/XwBfAF8AXwBfAF8AXwBfAP9fAF8AXwBfAF8AXwBfAF8A/18AXwBfAF8AXwBfAF8AXwD/XwBfAF8AXwBfAF8AXwBfAP9fAF8AXwBfAF8AXwBfAF8A/18AXwA/g18AXwBfAF8AXwD/XwBfAF8AXwBfAF8AXwBfAP9fAF8AXwBfAF8AXwBfAF8A/18AXwBfAF8AXwBfAF8AXwD/XwBfAF8AXwBfAF8AXwBfAP9fAF8AXwBfAF8AXwBfAF8Af18AXwBfAF8AXwBfAF0ASrH4/PjwABBfUAEEAAD/C/9/AX8BfwF/AX8BfwF/Ab8A/74Av4e/AL8AvwC/AL8AvwD/vwC/AL8AvwC/AL8AvwC/AP+/AL8AvwC/AL8AvwC/AL8A/78AvwC/AL8AXwBfAF8AXwD/XwBfAF8AP4NfAF8AXwBfAP9fAF8AXwBfAF8AXwBfAF8A/18AXwBfAF8AXwBfAF8AXwD/XwBfAF8AXwBfAF8AXwBfAP9fAF8AXwBfAF8AXwBfAF8A/18AXwBfAF8AXwBfAF8AXwD/XwBfAF8AXwBfAF8AXwBfAP9fAF8AXwBfAF8AP4NfAF8A/18AXwBfAF8AXwBfAF8AXwD/XwBfAF8AXwBfAF8AXwBfAP9fAF8AXwBfAF8AXwBfAF8A/18AXwBfAF8AXwBfAF8AXwD/XwBfAF8AXwBfAF8AXwBfAB9fAF8AXwBfAFUAUbHg8Pj8+PAAEMVQAQL/AAD/Bf8CfwF/AX8BfwF/Af9/AX8BvwC/AL8AvwC/ALQA/7+HvwC/AL8AvwC/AL8AvwD/vwC/AL8AvwC/AL8AvwC/AP+/AL8AvwC/AL8AvwC/AL8A/18AXwBfAF8AXwBfAF8AXwD/XwBfAF8AXwBfAL9CXwBfAP9fAF8AXwBfAF8AXwBfAF8A/18AXwBfAF8AXwBfAF8AXwD/XwBfAF8AXwBfAF8AXwBfAP9fAF8AXwBfAF8AXwBfAF8A/18AXwBfAF8AXwBfAF8AXwD/XwBfAF8AXwBfAF8AXwBfAP9fAF8AXwBfAF8AXwBfAD+D/18AXwBfAF8AXwBfAF8AXwD/XwBfAF8AXwBfAF8AXwBfAP9fAF8AXwBfAF8AXwBfAF8A/18AXwBfAF8AXwBfAF8AXwD/XwBfAF8AXwBfAF8AXwBfAAFTAFOx4PD48Pj8ADAtUQEB/wAA/wL/An8BfwF/AX8BfwH/fwF/Ab8AvwC/AL8AvwC/AP+/AL8AvwCsAL+HvwC/AL8A/78AvwC/AL8AvwC/AL8AvwD/vwC/AL8AvwC/AL8AvwC/AP+/AF8AXwBfAF8AXwBfAF8A/18AXwBfAF8AXwBfAF8AXwD/XwBfAF8AP4NfAF8AXwBfAP9fAF8AXwBfAF8AXwBfAF8A/18AXwBfAF8AXwBfAF8AXwD/XwBfAF8AXwBfAF8AXwBfAP9fAF8AXwBfAF8AXwBfAF8A/18AXwBfAF8AXwBfAF8AXwD/XwBfAF8AXwBfAF8AXwBfAP9fAF8AXwBfAF8AXwC/Ql8A/18AXwBfAF8AXwBfAF8AXwD/XwBfAF8AXwBfAF8AXwBfAP9fAF8AXwBfAF8AXwBfAF8A/18AXwBfAF8AXwBfAF8AXwADXwBRAE6x+Pz48AAQl1EBAQAA/wL/fwF/AX8BfwF/AX8BfwF/Af+/AL8AvwC/AL8AvwC/AL8A/78AvwC/AKgAv4e/AL8AvwD/vwC/AL8AvwC/AL8AvwC/AP+/AL8AvwC/AL8AvwBfAF8A/18AXwBfAF8AXwBfAF8AXwD/XwBfAF8AXwBfAF8AXwBfAP9fAF8AXwBfAF8AXwA/g18A/18AXwBfAF8AXwBfAF8A' $Raw &= 'XwD/XwBfAF8AXwBfAF8AXwBfAP9fAF8AXwBfAF8AXwBfAF8A/18AXwBfAF8AXwBfAF8AXwD/XwBfAF8AXwBfAF8AXwBfAP9fAF8AXwBfAF8AXwBfAF8A/18AXwBfAF8AXwBfAF8AXwD/P4NfAF8AXwBfAF8AXwBfAP9fAF8AXwBfAF8AXwBfAF8A/18AXwBfAF8AXwBfAF8AXwA/XwBfAF8AXwBfAF8A8PhOseDw+Pz48AAQ/VGBAP8AAH8BfwF/AX8BfwF/AX8B/38BvwC/AL8AvwC/AL8AvwD/vwC/AL8AvwC/AL8AvwC/AP+iAL+HvwC/AL8AvwC/AL8A/78AvwC/AL8AvwC/AL8AvwD/XwBfAF8AXwBfAF8AXwBfAP9fAF8AXwBfAF8AXwBfAF8A/18AXwBfAF8AXwBfAF8AXwD/XwBfAF8AXwBfAF8Av0JfAP9fAF8AXwBfAF8AXwBfAF8A/18AXwBfAF8AXwBfAF8AXwD/XwBfAF8AXwBfAF8AXwBfAP9fAF8AXwBfAF8AXwBfAF8A/18AXwBfAF8AXwBfAF8AXwD/XwBfAF8AXwBfAF8AXwBfAP9fAF8AXwBfAF8AXwBfAF8A/z+DXwBfAF8AXwBfAF8AXwD/XwBfAF8AXwBfAF8AXwBfAP9fAF8AXwBfAF8AXwBfAF8AH7Lg8Pjw+PwAMGVSgQD3AAB/AXsB8P8C/wLsAn8B/8UUg2PPAu0OaQQ/C78AvwD/vwD/GnMBcStzBL8AvwC/AP+/AH8W+TX/Gr8AvwC/AL8A/6QAv4e/AL8AuQCjECMRvwD/vwC/AL8AtwA/Gr8ApglgAP3kJPxVWrsAhSQTAT4CtBP/HwpfAF8AXwBfAF8AXwB/Df9zDdkKfw1/DT8Cfw1fAF8A/18AXwBfAF8Afw11DSQbPwv/dhmbd34NdgS/Bl8AXwBfAP9fAF8AXwBfAD+DXwBfAF8A/18AXwBfAF8A0jFJIl8AXwD/XwBfAF8AXwBfAF8AWwADAB+/DF8AXwCWZSgA6PDwANDo6Ljc4MjoAOh4vNhgrMhYIKzIYLDQUABIqALI4ABotNBwuNADcwEAAsjk6MDg6PjQ5OiVNSYnHwdfAF8Av18AXwBfAH8Nl3F1JfCgDQjA4ODQCsDk6KAozNhY4QzQoA1IpIDIOJzAQKDAsACMeLjBDtANkMjYEBD58ALg7IEDWhKmRt8HXwA/XwBfAF8AXwB/DWU+8PQM8NihCiEAsNzgQBigyGjyGlAAQJy4BEiksQBwvNBotMDIUKjIqNAhG/Ad/VAe4HQNT1LfB18AXwBfAP9fAF8AXwBfAL9CXwBfAF8AD18AXwBfAFQA0OjgeODE4HDA2FUAJACzAP8eAT8CPwI/Aj8CPwI/AjoCAGC82KDU4Oj0AfsLALTY/PjwABAbUPgEFAA4AQEI+PDo8Oig0ADgkMjYcLjQOACk0BCQyACQ2MAAjNAAkNAICgEiHggGLgEEAhYAKJTQIACY0FCsyIjI4MCIyNjg6OgBYQNcPwlxIZs5BQbXA22BC/DYEOjomMyBSmi00PAonMgQhmUDYYkFDwEAjNAYmNgglMAEMJwAbdiYzNjgfOzgAzfqa4s1AgEAB+gIyOToAbjE2ECkmMgglIvUQ2eQ2MFrC0c6xzUIQAGIwDCgENCAwNgAEbDU2P8AFENt/zV/AU8BAnR/AXcBALjg4Eiw2ACIf0BPg71VAYMA/wjyCIB7hOLQ4BTA5OhCJ/8aowADSEthAdDg4Hi82FhYuOCggWEKiAKClNjYCJTCSaAAlKB+oQC/YQFGgcaCagThUOEmiABwENBguOCAjMDg6J8rDj8UvwD4GmWd8PRhneSQzEE5OKDiGuAmQhv/AxYgF+MaJB1IZucaZASjIQFCG5DQQKjYULDA2IjA2MjgSYQ/FH+/APMa6AtCAGK4YRBAACD+mOAaAS7nGuU1JzinG+waB2MBADpBGxCU0Eis8NhgvODvGmorvwC/AD+/ALEA' $Raw &= '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' $Raw &= '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' $Raw &= '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' $Raw &= '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' $Raw &= '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' $Raw &= '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' $Raw &= '2ACAkNgAlNAAlAAEg5oCgBGQ0KjY4IZB/4kjikQQbYxuEBOJI8u8uY//yYNgbdEI/zV/AXUBBZt/Af9/AX8BvwC/AL8AvwC5AGIu/8AApgAiAmUxaAGoAz8LvwABaxDo9PBIrNAADozGf2F/eAEIkNDI/OToQhO/G6gb9hq/G78A/78AvwC/ALg2/xq/AL8AvwD/vwC/AK0Av4e/AL8AvwC/AP+/AF8AXwBfAF8AXwBfAF8A/18AXwBfAF54twBfAF8AXwDnXwBfAJNBMKhQPz+DXwDBUQAQlNDY7N+UXwD/vXJ/DV8AXwBfAF8AXwBfAP9fAF8AXwBfAF8Afw2fEV8A/18AXwBfAF8AXwBfAF8AXwD/XwA/g18AXwBfAF8AXwBfAP9fAF8AXwBfAF8AXwBfAF8A/18AXwBfAF8AXwBfAF8AXwA/XwBfAF8AXwBfAFYAwOQ46CCcH4K/AKJDjNDgULDQ8PTfcF8AXwD/XwBfAF8AXwBfAF8AXwBfAP9fAF8AXwBfAF8AXwBfAF8A/18AXwBfAF8AXwBfAF8AXwD/P4NfAF8AXwBfAF8AXwBSALCxMPj4+PwAMHBR/PgAiMTgAITICJhA2ACQ0ACUmQIIAYACiNCAyOD4/PrwABzw/19/AX8BfwF/Aft/AVkB8EAAgXt/AX8BvwD/vwC/AL8AvwC/AL8AvwC/AJO/ALUAkMzhfQCUhoD+0AiCYgFJACSDPwu/AL8A/78AvwC/AL8AvwC/AL8AvwD/vwC/AL8ArgC/h78AvwBfAP9fAF8AXwBfAF8AXwBfAF8A/18AXwBfAF8AXwBfAF8AXwA/XwBfAF8AXwBcAEMf6PTY8Dio8oAwg5RSgV8AgVgAKJzQ2OjoRAT/nwVfAF8AXwBfAF8AXwBfAP9fAF8AXwBfAF8AXwBfAF8A/18AXwBfAF8AXwBfAF8AXwD/XwBfAF8AP4NfAF8AXwBfAP9fAF8AXwBfAF8AXwBfAF8A/18AXwBfAF8AXwBfAF8AXwD/XwBfAF8AXwBfAF8AWQASHwDY6PAAiMgAkHDYAIzQLwAqAAKDKPCk2ODwkUE/BV8AXwD/XwBfAF8AXwBfAF8AXwBfAP9fAF8AXwBfAF8AXwBfAF8A/18AXwBfAF8AXwBfAF8AXwADP4NVAIOxKvgBAPzSUfCCAsDgAOBQsNhArNhAB4MCCQGPCKzYcMDY/8YO/yB/AX8BfwF/AX8BfwH9WAHwIACBPr8AvwC/AL8A/78AvwC/AL8AvwC/AL8AvwCnvwC/AK4A8PQAAfABAf1EAOgAQWYBAwEiAmQBJQL/Pwu/AL8AvwC/AL8AvwC/AP+/AL8AvwC/AL8AvwBeAL9C/18AXwBfAF8AXwBfAF8AXwD/XwBfAF8AXwBfAF8AXwBfAP9fAF8AXwBfAF8AXwBfAF8A/18AXwBdAH8fXwD/An8BXwD/XwBfAF8AXwBfAF8AXwBfAP9fAF8AXwBfAF8AXwBfAF8A/18AXwBfAF8AXwBfAF8AXwD/XwA/g18AXwBfAF8AXwBfAP9fAF8AXwBfAF8AXwBfAF8A/18AXwBfAF8AXwBfAF8AXwD/XwBfAF8AXwBfAFMAcx9fAP9fAFkAfwRfAF8AXwBfAF8A/18AXwBfAF8AXwBfAF8AXwD/XwBfAF8AXwBfAF8AXwBfAAFbAE6x4PD48Pj8ADBJUAEE/wAA/wt/AX8BfwF/AX8BfwH/fwG/AL4Av4e/AL8AvwC/AP+/AL8AvwC/AL8AvwC/AL8A/78AvwC/AL8AvwC/AL8AvwD/vwC/AL8AvwC/AL8AXwBfAP9fAF8AXwBfAF8AP4NfAF8A/18AXwBfAF8AXwBfAF8AXwD/XwBfAF8AXwBfAF8AXwBfAP9fAF8AXwBfAF8AXwBfAF8A/18AXwBfAF8AXwBfAF8AXwD/XwBfAF8AXwBfAF8AXwBfAP9fAF8AXwBfAF8AXwBfAF8A/18AXwBfAF8AXwBfAF8AP4P/XwBfAF8A' $Raw &= 'XwBfAF8AXwBfAP9fAF8AXwBfAF8AXwBfAF8A/18AXwBfAF8AXwBfAF8AXwD/XwBfAF8AXwBfAF8AXwBfAP9fAF8AXwBfAF8AXwBfAF8A/18AXwBfAF8AXwBfAF8AVwBQsfj8+PAAELNQAQIAAP8F//8CfwF/AX8BfwF/AX8BfwH/vwC/AL8AvwC/ALQAv4e/AP+/AL8AvwC/AL8AvwC/AL8A/78AvwC/AL8AvwC/AL8AvwD/vwC/AL8AvwC/AL8AXwBfAP9fAF8AXwBfAF8AXwBfAF8A/18AXwBfAL9CXwBfAF8AXwD/XwBfAF8AXwBfAF8AXwBfAP9fAF8AXwBfAF8AXwBfAF8A/18AXwBfAF8AXwBfAF8AXwD/XwBfAF8AXwBfAF8AXwBfAP9fAF8AXwBfAF8AXwBfAF8A/18AXwBfAF8AXwBfAF8AXwD/XwBfAF8AXwBfAD+DXwBfAP9fAF8AXwBfAF8AXwBfAF8A/18AXwBfAF8AXwBfAF8AXwD/XwBfAF8AXwBfAF8AXwBfAP9fAF8AXwBfAF8AXwBfAF8A/18AXwBfAF8AXwBfAF8AVQBTseDw+Pz48AAQGVEBAf8AAP8C/wJ/AX8BfwF/AX8B/38BfwF/Ab8AvwC/AL8AvwD/vwC/AK4Av4e/AL8AvwC/AP+/AL8AvwC/AL8AvwC/AL8A/78AvwC/AL8AvwC/AL8AvwD/XwBfAF8AXwBfAF8AXwBfAP9fAF8AXwBfAF8AXwBfAF8A/18AXwA/g18AXwBfAF8AXwD/XwBfAF8AXwBfAF8AXwBfAP9fAF8AXwBfAF8AXwBfAF8A/18AXwBfAF8AXwBfAF8AXwD/XwBfAF8AXwBfAF8AXwBfAP9fAF8AXwBfAF8AXwBfAF8A/18AXwBfAF8AXwBfAF8AXwD/XwBfAF8AXwBfAL9CXwBfAP9fAF8AXwBfAF8AXwBfAF8A/18AXwBfAF8AXwBfAF8AXwD/XwBfAF8AXwBfAF8AXwBfAP9fAF8AXwBfAF8AXwBfAF8AA18AUwBTseDw+PD4/AAwgVEBAf8AAP8CfwF/AX8BfwF/AX8B/38BfwG/AL8AvwC/AL8AvwD/vwC/AL8AvwC/AKgAv4e/AP+/AL8AvwC/AL8AvwC/AL8A/78AvwC/AL8AvwC/AL8AvwD/XwBfAF8AXwBfAF8AXwBfAP9fAF8AXwBfAF8AXwBfAF8A/18AXwBfAF8AXwBfAF8AXwD/P4NfAF8AXwBfAF8AXwBfAP9fAF8AXwBfAF8AXwBfAF8A/18AXwBfAF8AXwBfAF8AXwD/XwBfAF8AXwBfAF8AXwBfAP9fAF8AXwBfAF8AXwBfAF8A/18AXwBfAF8AXwBfAF8AXwD/XwBfAF8AXwBfAF8AXwBfAP9fAF8AP4NfAF8AXwBfAF8A/18AXwBfAF8AXwBfAF8AXwD/XwBfAF8AXwBfAF8AXwBfAP9fAF8AXwBfAF8AXwBfAF8AA18AUQCcsPj8+PAAEOtRAQEAAP8C/38BfwF/AX8BfwF/Ab8AvwD/vwC/AL8AvwC/AL8AvwC/AP+/AL8AvwC/AL8ApAC/h78A/78AvwC/AL8AvwC/AL8AvwD/vwC/AL8AvwC/AF8AXwBfAP9fAF8AXwBfAF8AXwBfAF8A/18AXwBfAF8AXwBfAF8AXwD/XwBfAF8AXwBfAF8AXwBfAAdfAF8AXwA=' $Raw = _WinAPI_Base64Decode($Raw) Local $tSource = DllStructCreate('byte[' & BinaryLen($Raw) & ']') DllStructSetData($tSource, 1, $Raw) Local $tDecompress _WinAPI_LZNTDecompress($tSource, $tDecompress, 105000) $tSource = 0 Local $bString = Binary(DllStructGetData($tDecompress, 1)) If $bSaveBinary Then Local $hFile = FileOpen($sSavePath & "\raw2.raw", 18) FileWrite($hFile, $bString) FileClose($hFile) EndIf Return $bString EndFunc ;==>_Raw Func _WinAPI_Base64Decode($sB64String) Local $aCrypt = DllCall("Crypt32.dll", "bool", "CryptStringToBinaryA", "str", $sB64String, "dword", 0, "dword", 1, "ptr", 0, "dword*", 0, "ptr", 0, "ptr", 0) If @error Or Not $aCrypt[0] Then Return SetError(1, 0, "") Local $bBuffer = DllStructCreate("byte[" & $aCrypt[5] & "]") $aCrypt = DllCall("Crypt32.dll", "bool", "CryptStringToBinaryA", "str", $sB64String, "dword", 0, "dword", 1, "struct*", $bBuffer, "dword*", $aCrypt[5], "ptr", 0, "ptr", 0) If @error Or Not $aCrypt[0] Then Return SetError(2, 0, "") Return DllStructGetData($bBuffer, 1) EndFunc ;==>_WinAPI_Base64Decode Func _WinAPI_LZNTDecompress(ByRef $tInput, ByRef $tOutput, $iBufferSize) $tOutput = DllStructCreate("byte[" & $iBufferSize & "]") If @error Then Return SetError(1, 0, 0) Local $aRet = DllCall("ntdll.dll", "uint", "RtlDecompressBuffer", "ushort", 0x0002, "struct*", $tOutput, "ulong", $iBufferSize, "struct*", $tInput, "ulong", DllStructGetSize($tInput), "ulong*", 0) If @error Then Return SetError(2, 0, 0) If $aRet[0] Then Return SetError(3, $aRet[0], 0) Return $aRet[6] EndFunc ;==>_WinAPI_LZNTDecompress Might be that some conversation are wrong... I cropped the original raw image to save to time during conversation. Br, UEZ1 point
-
@anhyeuem: Ya.. ya.. I know it's better to keep questions and answers public. It's the reason this forum created. I mean, you can PM me about the question, in our language, and I can translate and post it here, and everyone will have a better discussion, about programming. It saves lots of time reading and guessing, solving the language problem, and saves lots of forum resources. Best regard!1 point
-
Maybe in the registry in HKLMSOFTWAREMicrosoftWindows NTCurrentVersion ?1 point
-
I assume you can do something like https://developer.mozilla.org/en-US/docs/Web/API/window.location Not tested but should lead to something like _ChromeEval("window.location = "http://www.mozilla.org";"); alternate udf is to search for iuiautomation in example forum1 point
-
Are you going to go the 'App Builder' route (App Inventor is one, as PincoPanco pointed out)? Or perhaps try your hands at Java and the Dalvik VM? Or maybe experiment with true native apps with the NDK (Android Native Development Kit) (Wikipedia)? Or maybe with the Marmalade SDK? Perhaps using Javascript might be an option (PhoneGap, Titanium, Intel XDK) There's also C# with Xamarin.. Lots of options.. I was considering going native with the NDK and interfacing through the JNI (Java Native Interface) to use Java for the UI, but perhaps as an easy way in I might experiment with the Javascript app packagers.. decisions, decisions. Btw, all that stuff wasn't meant to confuse or confound you - its literally things on my 'to investigate' list.. *edit: Just thought I'd also mention Corona SDK as another option, which actually uses the Lua language. I was mainly focusing on free tools in this post, but it turns out Corona has a free 'Starter' version (see their pricing FAQ).1 point
-
How to get oauth_access_token and oauth_access_token_secret for dropbox
Palestinian reacted to trancexx for a topic
You do have extra space character before the "https", but really, post your code. Pictures of it lame they are, Luke.1 point -
To connect to an active Word document use function _Word_DocAttach (with AutoIt 3.3.10.2) or the similar function in 3.3.8.1.1 point
-
Glad to help you By the way i am Nessie the Loch Ness Monster Hi!1 point
-
Thanks @Universalist for the sample code. All modern Operating Systems will not need special font to display Unicode correctly. We just have to use with Unicode mode which is 4: BinaryToString($sDecript, 4) Same with writing out to a file, we can use mode 128: FileOpen($sFilePath, 2+128) But yes I forgot that was Persian. Sorry. Again thanks for the sample code. #include <Crypt.au3> $sFilePath = @ScriptDir & "\testRead.txt" $sKey = "password" $hOpen = FileOpen($sFilePath, 0) $sRead = FileRead($hOpen) FileClose($hOpen) $sDecript = _Crypt_DecryptData($sRead, $sKey , $CALG_AES_256) If @error Then MsgBox(16, "Error", "Unable to decript the file") Exit EndIf $hOpen = FileOpen($sFilePath, 2+128) FileWrite($hOpen, BinaryToString($sDecript, 4)) FileClose($hOpen)1 point
-
Try this: #include <Crypt.au3> $sFilePath = @ScriptDir & "\testRead.txt" $sKey = "password" $hOpen = FileOpen($sFilePath, 0) $sRead = FileRead($hOpen) FileClose($hOpen) $sDecript = _Crypt_DecryptData($sRead, $sKey , $CALG_AES_256) If @error Then MsgBox(16, "Error", "Unable to decript the file") Exit EndIf $hOpen = FileOpen($sFilePath, 2) FileWrite($hOpen, BinaryToString($sDecript)) FileClose($hOpen) By the way the next time please use an english test, as not anyone have persian font installed Hi!1 point
-
An another solution with $WM_NOTIFY:;Autor Bugfix http://www.autoit.de/index.php?page=Thread&postID=117453#post117453 #include <ListViewConstants.au3> #include <StructureConstants.au3> #include <GUIConstantsEx.au3> #include <WindowsConstants.au3> #include <GUIListView.au3> $gui = GUICreate('test') $hListView = GUICtrlCreateListView('Spalte1|Spalte2', 10, 10, 300, 200) _GUICtrlListView_SetColumnWidth($hListView, 0, 146) _GUICtrlListView_SetColumnWidth($hListView, 1, $LVSCW_AUTOSIZE_USEHEADER) For $i = 1 To 10 GUICtrlCreateListViewItem('Zeile ' & $i & ' Spalte 1|Zeile ' & $i & ' Spalte 2', $hListView) Next GUISetState() GUIRegisterMsg($WM_NOTIFY, "WM_NOTIFY") Do $msg = GUIGetMsg() Until $msg = $GUI_EVENT_CLOSE Func ListView_HOTTRACK($iSubItem) Local $HotItem = _GUICtrlListView_GetHotItem($hListView) If $HotItem <> -1 Then _ToolTipMouseExit("Überfahrenes Item: " & $HotItem & " SubItem: " & $iSubItem & @CRLF & _ 'Inhalt: ' & _GUICtrlListView_GetItemText($hListView, $HotItem, $iSubItem), 500) EndFunc ;==>ListView_HOTTRACK Func _ToolTipMouseExit($TEXT, $TIME=-1, $x=-1, $y=-1, $TITLE='', $ICON=0, $OPT='') If $TIME = -1 Then $TIME = 3000 Local $start = TimerInit(), $pos0 = MouseGetPos() If ($x = -1) Or ($y = -1) Then ToolTip($TEXT, $pos0[0], $pos0[1], $TITLE, $ICON, $OPT) Else ToolTip($TEXT, $x, $y, $TITLE, $ICON, $OPT) EndIf Do Sleep(50) $pos = MouseGetPos() Until (TimerDiff($start) > $TIME) Or _ (Abs($pos[0] - $pos0[0]) > 10 Or _ Abs($pos[1] - $pos0[1]) > 10) ToolTip('') EndFunc ;_ToolTipMouseExit Func WM_NOTIFY($hWnd, $iMsg, $iwParam, $ilParam) Local $hWndFrom, $iIDFrom, $iCode, $tNMHDR, $hWndListView $hWndListView = $hListView If Not IsHWnd($hListView) Then $hWndListView = GUICtrlGetHandle($hListView) $tNMHDR = DllStructCreate($tagNMHDR, $ilParam) $hWndFrom = HWnd(DllStructGetData($tNMHDR, "hWndFrom")) $iIDFrom = DllStructGetData($tNMHDR, "IDFrom") $iCode = DllStructGetData($tNMHDR, "Code") Switch $hWndFrom Case $hWndListView Switch $iCode Case $LVN_HOTTRACK ; Sent by a list-view control when the user moves the mouse over an item Local $tInfo = DllStructCreate($tagNMLISTVIEW, $ilParam) ListView_HOTTRACK(DllStructGetData($tInfo, "SubItem")) EndSwitch EndSwitch Return $GUI_RUNDEFMSG EndFunc ;==>WM_NOTIFY1 point