moocan2112 Posted October 27, 2014 Share Posted October 27, 2014 Dear Community, I'm trying to catch the output from a console soft witch is verbose using StdoutRead. All Is working fine. But I need to convert characters from OEM To Ansi because there is many and many french accentuated characters. I'm on a Windows 7 Professional x64. I have made so many search about OemToAnsi So here is a piece of code (Which I have found on your site) that I use to test ( and reproduce my error) and include a simple "DIR C: /S /O:N" which return a lot of output expandcollapse popup#include <EditConstants.au3> #include <GUIConstantsEx.au3> #include <WindowsConstants.au3> #include <Constants.au3> #include <GuiEdit.au3> #include <WinAPIMisc.au3> Local $line $Parent = GUICreate ("OemToCharW Test", 520, 260, -1, -1) $Logbox = GUICtrlCreateEdit('', 10, 10, 500, 200); , BitOR($ES_READONLY, $WS_VSCROLL)) _GUICtrlEdit_SetLimitText($logbox, -1) ;$Logbox = _GUICtrlEdit_Create($Parent, "This is a test" & @CRLF & "Another Line", 10, 10, 500, 200) $Button = GuiCtrlCreateButton("Run", 10, 220, 80, 20) GuiSetState () While 1 Dim $GUI_Msg = GuiGetMsg() Switch $GUI_Msg Case -3 Exit Case -100 To 0 ContinueLoop Case $GUI_EVENT_CLOSE Exit Case $Button _Check () EndSwitch Wend Func _Check() GUICtrlSetData ($Button, "Stop") GUICtrlSetData($Logbox, "") ;Local $Pid = Run(@SystemDir & '\cmd /c "dir c:\ /s /O:N"', @SystemDir, @SW_HIDE, $STDIN_CHILD + $STDOUT_CHILD) ;Local $Pid = Run(@SystemDir & '\cmd /c "dir c:\ /s /O:N"', @SystemDir, @SW_MAXIMIZE, $STDIN_CHILD + $STDOUT_CHILD) local $Pid = Run(@ComSpec & " /c " & "dir c:\ /S /O:N",@SystemDir,@SW_HIDE, $STDIN_CHILD + $STDOUT_CHILD) MsgBox(0, "Pid", $Pid) While $Pid $msg = GUIGetMsg() Select Case $msg = $GUI_EVENT_CLOSE or $msg = $Button ProcessClose ($Pid) Exitloop EndSelect Dim $line = StdoutRead($Pid) If @error Then ExitLoop Else ;1st way ;Local $hDll = DllOpen("User32.dll") $ret = DllCall("User32.dll", "BOOL", "OemToChar", "str", $line, "str", "") If $ret[0] Then $line = $ret[2] ;view string len Local $linelen = StringLen($line) ConsoleWrite($line & @CRLF) ConsoleWrite("buffer: " & $linelen & @CRLF) ; 2nd test ;Local $linelen = StringLen($line) ;$ret = DllCall("user32.dll", "BOOL", "OemToCharBuff", "str", $line, "str", "", "DWORD", $linelen) ;$retour = $ret[2] ;$line = $retour ;GUICtrlSetData($Logbox, @LF, True) ;$line = OEM2ANSI($line) ;$line = _ChangePageCode($line,1) ; split string working but report output 5 minutes after process finished .. not realtime ;$aFolder = StringSplit($line, @CRLF, 3) ;ReDim $aFolder[UBound($aFolder) - 1] ;For $i = 0 To UBound($aFolder) - 1 ; ; $msg = GUIGetMsg() ; Select ; Case $msg = $GUI_EVENT_CLOSE or $msg = $Button ; msgbox(0,"debug", $Pid) ; ProcessClose($Pid) ; MsgBox(0,"debug", @error) ; Exitloop ; EndSelect ; ; ; ;$aFolder[$i] = _OEMToAnsi($aFolder[$i]) ; $aFolder[$i] = _WinAPI_OemToChar ($aFolder[$i]) ; _GUICtrlEdit_AppendText($Logbox, $aFolder[$i] & @CRLF) ;Next ;GUICtrlSetData($Logbox, $line, True) _GUICtrlEdit_AppendText($Logbox, $line) ;DllClose($ret) EndIf WEnd GUICtrlSetData ($Button, "Run") EndFunc Func _OEMToAnsi($sOEM) Local $a_AnsiFName = DllCall('user32.dll', 'Int', 'OemToChar', 'str', $sOEM, 'str', '') If @error = 0 Then $sAnsi = $a_AnsiFName[2] Return $sAnsi EndFunc ;==>_OEMToAnsi Func _ChangePageCode($sString, $iPageCode) Local $objConv = ObjCreate("OlePrn.OleCvt") return $objConv.ToUnicode($sString,$iPageCode) EndFunc Func OEM2ANSI($aString) Local $OEM[256] $OEM[000]="00" $OEM[001]="01" $OEM[002]="02" $OEM[003]="03" $OEM[004]="04" $OEM[005]="05" $OEM[006]="06" $OEM[007]="07" $OEM[008]="08" $OEM[009]="09" $OEM[010]="0A" $OEM[011]="0B" $OEM[012]="0C" $OEM[013]="0D" $OEM[014]="0E" $OEM[015]="0F" $OEM[016]="10" $OEM[017]="11" $OEM[018]="12" $OEM[019]="13" $OEM[020]="14" $OEM[021]="15" $OEM[022]="16" $OEM[023]="17" $OEM[024]="18" $OEM[025]="19" $OEM[026]="1A" $OEM[027]="1B" $OEM[028]="1C" $OEM[029]="1D" $OEM[030]="1E" $OEM[031]="1F" $OEM[032]="20" $OEM[033]="21" $OEM[034]="22" $OEM[035]="23" $OEM[036]="24" $OEM[037]="25" $OEM[038]="26" $OEM[039]="27" $OEM[040]="28" $OEM[041]="29" $OEM[042]="2A" $OEM[043]="2B" $OEM[044]="2C" $OEM[045]="2D" $OEM[046]="2E" $OEM[047]="2F" $OEM[048]="30" $OEM[049]="31" $OEM[050]="32" $OEM[051]="33" $OEM[052]="34" $OEM[053]="35" $OEM[054]="36" $OEM[055]="37" $OEM[056]="38" $OEM[057]="39" $OEM[058]="3A" $OEM[059]="3B" $OEM[060]="3C" $OEM[061]="3D" $OEM[062]="3E" $OEM[063]="3F" $OEM[064]="40" $OEM[065]="41" $OEM[066]="42" $OEM[067]="43" $OEM[068]="44" $OEM[069]="45" $OEM[070]="46" $OEM[071]="47" $OEM[072]="48" $OEM[073]="49" $OEM[074]="4A" $OEM[075]="4B" $OEM[076]="4C" $OEM[077]="4D" $OEM[078]="4E" $OEM[079]="4F" $OEM[080]="50" $OEM[081]="51" $OEM[082]="52" $OEM[083]="53" $OEM[084]="54" $OEM[085]="55" $OEM[086]="56" $OEM[087]="57" $OEM[088]="58" $OEM[089]="59" $OEM[090]="5A" $OEM[091]="5B" $OEM[092]="5C" $OEM[093]="5D" $OEM[094]="5E" $OEM[095]="5F" $OEM[096]="60" $OEM[097]="61" $OEM[098]="62" $OEM[099]="63" $OEM[100]="64" $OEM[101]="65" $OEM[102]="66" $OEM[103]="67" $OEM[104]="68" $OEM[105]="69" $OEM[106]="6A" $OEM[107]="6B" $OEM[108]="6C" $OEM[109]="6D" $OEM[110]="6E" $OEM[111]="6F" $OEM[112]="70" $OEM[113]="71" $OEM[114]="72" $OEM[115]="73" $OEM[116]="74" $OEM[117]="75" $OEM[118]="76" $OEM[119]="77" $OEM[120]="78" $OEM[121]="79" $OEM[122]="7A" $OEM[123]="7B" $OEM[124]="7C" $OEM[125]="7D" $OEM[126]="7E" $OEM[127]="7F" $OEM[128]="C7" $OEM[129]="FC" $OEM[130]="E9" $OEM[131]="E2" $OEM[132]="E4" $OEM[133]="E0" $OEM[134]="E5" $OEM[135]="E7" $OEM[136]="EA" $OEM[137]="EB" $OEM[138]="E8" $OEM[139]="EF" $OEM[140]="EE" $OEM[141]="EC" $OEM[142]="C4" $OEM[143]="C5" $OEM[144]="C9" $OEM[145]="E6" $OEM[146]="C6" $OEM[147]="F4" $OEM[148]="F6" $OEM[149]="F2" $OEM[150]="FB" $OEM[151]="F9" $OEM[152]="FF" $OEM[153]="D6" $OEM[154]="DC" $OEM[155]="F8" $OEM[156]="A3" $OEM[157]="D8" $OEM[158]="D7" $OEM[159]="83" $OEM[160]="E1" $OEM[161]="ED" $OEM[162]="F3" $OEM[163]="FA" $OEM[164]="F1" $OEM[165]="D1" $OEM[166]="AA" $OEM[167]="BA" $OEM[168]="BF" $OEM[169]="AE" $OEM[170]="AC" $OEM[171]="BD" $OEM[172]="BC" $OEM[173]="A1" $OEM[174]="AB" $OEM[175]="BB" $OEM[176]="A6" $OEM[177]="A6" $OEM[178]="A6" $OEM[179]="A6" $OEM[180]="A6" $OEM[181]="C1" $OEM[182]="C2" $OEM[183]="C0" $OEM[184]="A9" $OEM[185]="A6" $OEM[186]="A6" $OEM[187]="2B" $OEM[188]="2B" $OEM[189]="A2" $OEM[190]="A5" $OEM[191]="2B" $OEM[192]="2B" $OEM[193]="2D" $OEM[194]="2D" $OEM[195]="2B" $OEM[196]="2D" $OEM[197]="2B" $OEM[198]="E3" $OEM[199]="C3" $OEM[200]="2B" $OEM[201]="2B" $OEM[202]="2D" $OEM[203]="2D" $OEM[204]="A6" $OEM[205]="2D" $OEM[206]="2B" $OEM[207]="A4" $OEM[208]="F0" $OEM[209]="D0" $OEM[210]="CA" $OEM[211]="CB" $OEM[212]="C8" $OEM[213]="69" $OEM[214]="CD" $OEM[215]="CE" $OEM[216]="CF" $OEM[217]="2B" $OEM[218]="2B" $OEM[219]="A6" $OEM[220]="5F" $OEM[221]="A6" $OEM[222]="CC" $OEM[223]="AF" $OEM[224]="D3" $OEM[225]="DF" $OEM[226]="D4" $OEM[227]="D2" $OEM[228]="F5" $OEM[229]="D5" $OEM[230]="B5" $OEM[231]="FE" $OEM[232]="DE" $OEM[233]="DA" $OEM[234]="DB" $OEM[235]="D9" $OEM[236]="FD" $OEM[237]="DD" $OEM[238]="AF" $OEM[239]="B4" $OEM[240]="AD" $OEM[241]="B1" $OEM[242]="3D" $OEM[243]="BE" $OEM[244]="B6" $OEM[245]="A7" $OEM[246]="F7" $OEM[247]="B8" $OEM[248]="B0" $OEM[249]="A8" $OEM[250]="B7" $OEM[251]="B9" $OEM[252]="B3" $OEM[253]="B2" $OEM[254]="A6" $OEM[255]="A0" $anArray = StringSplit($aString,"") $var = "" For $i = 1 to $anArray[0] $var = $var & Chr(dec($OEM[Asc($anArray[$i])])) Next return $var EndFunc I have tryied so many think that I found on your site. - Using function as OEMTOANSI or _ChangePageCode or _OemToAnsi with a StringSplit is not realy "RealTime" as I have always an activity output 5+ minutes after the Dir C: /S /O:N has ended. - Using a DllCall "DllCall("User32.dll", "BOOL", "OemToChar", "str", $line, "str", "")" or DllCall("user32.dll", "BOOL", "OemToCharBuff", "str", $line, "str", "", "DWORD", $linelen) => AutoIt crash with AutoIt3.exe ended.rc:-1073741819 I have tried using x86 and x64 build but nothing change. All is working if I don't try to convert characters from OEM to Ansi. Is there something that I don't do correctly ? Is there a limitation somewhere ? If someone could help me or give me some advices. Many thanks in advance Kind Regards Link to comment Share on other sites More sharing options...
Danyfirex Posted October 27, 2014 Share Posted October 27, 2014 Look: expandcollapse popupLocal $OEM[256] $OEM[000]="00" $OEM[001]="01" $OEM[002]="02" $OEM[003]="03" $OEM[004]="04" $OEM[005]="05" $OEM[006]="06" $OEM[007]="07" $OEM[008]="08" $OEM[009]="09" $OEM[010]="0A" $OEM[011]="0B" $OEM[012]="0C" $OEM[013]="0D" $OEM[014]="0E" $OEM[015]="0F" $OEM[016]="10" $OEM[017]="11" $OEM[018]="12" $OEM[019]="13" $OEM[020]="14" $OEM[021]="15" $OEM[022]="16" $OEM[023]="17" $OEM[024]="18" $OEM[025]="19" $OEM[026]="1A" $OEM[027]="1B" $OEM[028]="1C" $OEM[029]="1D" $OEM[030]="1E" $OEM[031]="1F" $OEM[032]="20" $OEM[033]="21" $OEM[034]="22" $OEM[035]="23" $OEM[036]="24" $OEM[037]="25" $OEM[038]="26" $OEM[039]="27" $OEM[040]="28" $OEM[041]="29" $OEM[042]="2A" $OEM[043]="2B" $OEM[044]="2C" $OEM[045]="2D" $OEM[046]="2E" $OEM[047]="2F" $OEM[048]="30" $OEM[049]="31" $OEM[050]="32" $OEM[051]="33" $OEM[052]="34" $OEM[053]="35" $OEM[054]="36" $OEM[055]="37" $OEM[056]="38" $OEM[057]="39" $OEM[058]="3A" $OEM[059]="3B" $OEM[060]="3C" $OEM[061]="3D" $OEM[062]="3E" $OEM[063]="3F" $OEM[064]="40" $OEM[065]="41" $OEM[066]="42" $OEM[067]="43" $OEM[068]="44" $OEM[069]="45" $OEM[070]="46" $OEM[071]="47" $OEM[072]="48" $OEM[073]="49" $OEM[074]="4A" $OEM[075]="4B" $OEM[076]="4C" $OEM[077]="4D" $OEM[078]="4E" $OEM[079]="4F" $OEM[080]="50" $OEM[081]="51" $OEM[082]="52" $OEM[083]="53" $OEM[084]="54" $OEM[085]="55" $OEM[086]="56" $OEM[087]="57" $OEM[088]="58" $OEM[089]="59" $OEM[090]="5A" $OEM[091]="5B" $OEM[092]="5C" $OEM[093]="5D" $OEM[094]="5E" $OEM[095]="5F" $OEM[096]="60" $OEM[097]="61" $OEM[098]="62" $OEM[099]="63" $OEM[100]="64" $OEM[101]="65" $OEM[102]="66" $OEM[103]="67" $OEM[104]="68" $OEM[105]="69" $OEM[106]="6A" $OEM[107]="6B" $OEM[108]="6C" $OEM[109]="6D" $OEM[110]="6E" $OEM[111]="6F" $OEM[112]="70" $OEM[113]="71" $OEM[114]="72" $OEM[115]="73" $OEM[116]="74" $OEM[117]="75" $OEM[118]="76" $OEM[119]="77" $OEM[120]="78" $OEM[121]="79" $OEM[122]="7A" $OEM[123]="7B" $OEM[124]="7C" $OEM[125]="7D" $OEM[126]="7E" $OEM[127]="7F" $OEM[128]="C7" $OEM[129]="FC" $OEM[130]="E9" $OEM[131]="E2" $OEM[132]="E4" $OEM[133]="E0" $OEM[134]="E5" $OEM[135]="E7" $OEM[136]="EA" $OEM[137]="EB" $OEM[138]="E8" $OEM[139]="EF" $OEM[140]="EE" $OEM[141]="EC" $OEM[142]="C4" $OEM[143]="C5" $OEM[144]="C9" $OEM[145]="E6" $OEM[146]="C6" $OEM[147]="F4" $OEM[148]="F6" $OEM[149]="F2" $OEM[150]="FB" $OEM[151]="F9" $OEM[152]="FF" $OEM[153]="D6" $OEM[154]="DC" $OEM[155]="F8" $OEM[156]="A3" $OEM[157]="D8" $OEM[158]="D7" $OEM[159]="83" $OEM[160]="E1" $OEM[161]="ED" $OEM[162]="F3" $OEM[163]="FA" $OEM[164]="F1" $OEM[165]="D1" $OEM[166]="AA" $OEM[167]="BA" $OEM[168]="BF" $OEM[169]="AE" $OEM[170]="AC" $OEM[171]="BD" $OEM[172]="BC" $OEM[173]="A1" $OEM[174]="AB" $OEM[175]="BB" $OEM[176]="A6" $OEM[177]="A6" $OEM[178]="A6" $OEM[179]="A6" $OEM[180]="A6" $OEM[181]="C1" $OEM[182]="C2" $OEM[183]="C0" $OEM[184]="A9" $OEM[185]="A6" $OEM[186]="A6" $OEM[187]="2B" $OEM[188]="2B" $OEM[189]="A2" $OEM[190]="A5" $OEM[191]="2B" $OEM[192]="2B" $OEM[193]="2D" $OEM[194]="2D" $OEM[195]="2B" $OEM[196]="2D" $OEM[197]="2B" $OEM[198]="E3" $OEM[199]="C3" $OEM[200]="2B" $OEM[201]="2B" $OEM[202]="2D" $OEM[203]="2D" $OEM[204]="A6" $OEM[205]="2D" $OEM[206]="2B" $OEM[207]="A4" $OEM[208]="F0" $OEM[209]="D0" $OEM[210]="CA" $OEM[211]="CB" $OEM[212]="C8" $OEM[213]="69" $OEM[214]="CD" $OEM[215]="CE" $OEM[216]="CF" $OEM[217]="2B" $OEM[218]="2B" $OEM[219]="A6" $OEM[220]="5F" $OEM[221]="A6" $OEM[222]="CC" $OEM[223]="AF" $OEM[224]="D3" $OEM[225]="DF" $OEM[226]="D4" $OEM[227]="D2" $OEM[228]="F5" $OEM[229]="D5" $OEM[230]="B5" $OEM[231]="FE" $OEM[232]="DE" $OEM[233]="DA" $OEM[234]="DB" $OEM[235]="D9" $OEM[236]="FD" $OEM[237]="DD" $OEM[238]="AF" $OEM[239]="B4" $OEM[240]="AD" $OEM[241]="B1" $OEM[242]="3D" $OEM[243]="BE" $OEM[244]="B6" $OEM[245]="A7" $OEM[246]="F7" $OEM[247]="B8" $OEM[248]="B0" $OEM[249]="A8" $OEM[250]="B7" $OEM[251]="B9" $OEM[252]="B3" $OEM[253]="B2" $OEM[254]="A6" $OEM[255]="A0" Local $bRet=0 For $i=0 To UBound($OEM)-1 $bRet=DllCall("User32.dll","Bool","OemToCharW","wstr",$OEM[$i],"wstr","") ConsoleWrite($OEM[$i] & " = " & $bRet[2] & @CRLF) Next Saludos Danysys.com AutoIt... UDFs: VirusTotal API 2.0 UDF - libZPlay UDF - Apps: Guitar Tab Tester - VirusTotal Hash Checker Examples: Text-to-Speech ISpVoice Interface - Get installed applications - Enable/Disable Network connection PrintHookProc - WINTRUST - Mute Microphone Level - Get Connected NetWorks - Create NetWork Connection ShortCut Link to comment Share on other sites More sharing options...
moocan2112 Posted October 27, 2014 Author Share Posted October 27, 2014 Look: expandcollapse popupLocal $OEM[256] $OEM[000]="00" $OEM[001]="01" $OEM[002]="02" $OEM[003]="03" $OEM[004]="04" $OEM[005]="05" $OEM[006]="06" $OEM[007]="07" $OEM[008]="08" $OEM[009]="09" $OEM[010]="0A" $OEM[011]="0B" $OEM[012]="0C" $OEM[013]="0D" $OEM[014]="0E" $OEM[015]="0F" $OEM[016]="10" $OEM[017]="11" $OEM[018]="12" $OEM[019]="13" $OEM[020]="14" $OEM[021]="15" $OEM[022]="16" $OEM[023]="17" $OEM[024]="18" $OEM[025]="19" $OEM[026]="1A" $OEM[027]="1B" $OEM[028]="1C" $OEM[029]="1D" $OEM[030]="1E" $OEM[031]="1F" $OEM[032]="20" $OEM[033]="21" $OEM[034]="22" $OEM[035]="23" $OEM[036]="24" $OEM[037]="25" $OEM[038]="26" $OEM[039]="27" $OEM[040]="28" $OEM[041]="29" $OEM[042]="2A" $OEM[043]="2B" $OEM[044]="2C" $OEM[045]="2D" $OEM[046]="2E" $OEM[047]="2F" $OEM[048]="30" $OEM[049]="31" $OEM[050]="32" $OEM[051]="33" $OEM[052]="34" $OEM[053]="35" $OEM[054]="36" $OEM[055]="37" $OEM[056]="38" $OEM[057]="39" $OEM[058]="3A" $OEM[059]="3B" $OEM[060]="3C" $OEM[061]="3D" $OEM[062]="3E" $OEM[063]="3F" $OEM[064]="40" $OEM[065]="41" $OEM[066]="42" $OEM[067]="43" $OEM[068]="44" $OEM[069]="45" $OEM[070]="46" $OEM[071]="47" $OEM[072]="48" $OEM[073]="49" $OEM[074]="4A" $OEM[075]="4B" $OEM[076]="4C" $OEM[077]="4D" $OEM[078]="4E" $OEM[079]="4F" $OEM[080]="50" $OEM[081]="51" $OEM[082]="52" $OEM[083]="53" $OEM[084]="54" $OEM[085]="55" $OEM[086]="56" $OEM[087]="57" $OEM[088]="58" $OEM[089]="59" $OEM[090]="5A" $OEM[091]="5B" $OEM[092]="5C" $OEM[093]="5D" $OEM[094]="5E" $OEM[095]="5F" $OEM[096]="60" $OEM[097]="61" $OEM[098]="62" $OEM[099]="63" $OEM[100]="64" $OEM[101]="65" $OEM[102]="66" $OEM[103]="67" $OEM[104]="68" $OEM[105]="69" $OEM[106]="6A" $OEM[107]="6B" $OEM[108]="6C" $OEM[109]="6D" $OEM[110]="6E" $OEM[111]="6F" $OEM[112]="70" $OEM[113]="71" $OEM[114]="72" $OEM[115]="73" $OEM[116]="74" $OEM[117]="75" $OEM[118]="76" $OEM[119]="77" $OEM[120]="78" $OEM[121]="79" $OEM[122]="7A" $OEM[123]="7B" $OEM[124]="7C" $OEM[125]="7D" $OEM[126]="7E" $OEM[127]="7F" $OEM[128]="C7" $OEM[129]="FC" $OEM[130]="E9" $OEM[131]="E2" $OEM[132]="E4" $OEM[133]="E0" $OEM[134]="E5" $OEM[135]="E7" $OEM[136]="EA" $OEM[137]="EB" $OEM[138]="E8" $OEM[139]="EF" $OEM[140]="EE" $OEM[141]="EC" $OEM[142]="C4" $OEM[143]="C5" $OEM[144]="C9" $OEM[145]="E6" $OEM[146]="C6" $OEM[147]="F4" $OEM[148]="F6" $OEM[149]="F2" $OEM[150]="FB" $OEM[151]="F9" $OEM[152]="FF" $OEM[153]="D6" $OEM[154]="DC" $OEM[155]="F8" $OEM[156]="A3" $OEM[157]="D8" $OEM[158]="D7" $OEM[159]="83" $OEM[160]="E1" $OEM[161]="ED" $OEM[162]="F3" $OEM[163]="FA" $OEM[164]="F1" $OEM[165]="D1" $OEM[166]="AA" $OEM[167]="BA" $OEM[168]="BF" $OEM[169]="AE" $OEM[170]="AC" $OEM[171]="BD" $OEM[172]="BC" $OEM[173]="A1" $OEM[174]="AB" $OEM[175]="BB" $OEM[176]="A6" $OEM[177]="A6" $OEM[178]="A6" $OEM[179]="A6" $OEM[180]="A6" $OEM[181]="C1" $OEM[182]="C2" $OEM[183]="C0" $OEM[184]="A9" $OEM[185]="A6" $OEM[186]="A6" $OEM[187]="2B" $OEM[188]="2B" $OEM[189]="A2" $OEM[190]="A5" $OEM[191]="2B" $OEM[192]="2B" $OEM[193]="2D" $OEM[194]="2D" $OEM[195]="2B" $OEM[196]="2D" $OEM[197]="2B" $OEM[198]="E3" $OEM[199]="C3" $OEM[200]="2B" $OEM[201]="2B" $OEM[202]="2D" $OEM[203]="2D" $OEM[204]="A6" $OEM[205]="2D" $OEM[206]="2B" $OEM[207]="A4" $OEM[208]="F0" $OEM[209]="D0" $OEM[210]="CA" $OEM[211]="CB" $OEM[212]="C8" $OEM[213]="69" $OEM[214]="CD" $OEM[215]="CE" $OEM[216]="CF" $OEM[217]="2B" $OEM[218]="2B" $OEM[219]="A6" $OEM[220]="5F" $OEM[221]="A6" $OEM[222]="CC" $OEM[223]="AF" $OEM[224]="D3" $OEM[225]="DF" $OEM[226]="D4" $OEM[227]="D2" $OEM[228]="F5" $OEM[229]="D5" $OEM[230]="B5" $OEM[231]="FE" $OEM[232]="DE" $OEM[233]="DA" $OEM[234]="DB" $OEM[235]="D9" $OEM[236]="FD" $OEM[237]="DD" $OEM[238]="AF" $OEM[239]="B4" $OEM[240]="AD" $OEM[241]="B1" $OEM[242]="3D" $OEM[243]="BE" $OEM[244]="B6" $OEM[245]="A7" $OEM[246]="F7" $OEM[247]="B8" $OEM[248]="B0" $OEM[249]="A8" $OEM[250]="B7" $OEM[251]="B9" $OEM[252]="B3" $OEM[253]="B2" $OEM[254]="A6" $OEM[255]="A0" Local $bRet=0 For $i=0 To UBound($OEM)-1 $bRet=DllCall("User32.dll","Bool","OemToCharW","wstr",$OEM[$i],"wstr","") ConsoleWrite($OEM[$i] & " = " & $bRet[2] & @CRLF) Next Saludos Hi, Many thanks for your answer .. but could you say me more as I have tried to use your code but I have - Unicode : ♪♪2♪♪♪22♪♪♪♪ ♪1♪♪22♪2♪♪♪♪♪2♪ 2 ♪♪2♪2♪♪2♪♪2♪♪ if I use only the DllCall .... or - B6 = B A7 = A F7 = F B8 = B if I use your code or - 2D = 2D 2B = 2B A4 = A4 F0 = F0 D0 = D0 if I use your code with OemToChar in place of OemToCharW Many Thanks in advance Link to comment Share on other sites More sharing options...
Danyfirex Posted October 27, 2014 Share Posted October 27, 2014 (edited) Maybe using _WinAPI_WideCharToMultiByte. Look: expandcollapse popup#include <EditConstants.au3> #include <GUIConstantsEx.au3> #include <WindowsConstants.au3> #include <Constants.au3> #include <GuiEdit.au3> ;#include <WinAPIMisc.au3> Local $line $Parent = GUICreate ("OemToCharW Test", 520, 260, -1, -1) $Logbox = GUICtrlCreateEdit('', 10, 10, 500, 200); , BitOR($ES_READONLY, $WS_VSCROLL)) _GUICtrlEdit_SetLimitText($logbox, -1) ;$Logbox = _GUICtrlEdit_Create($Parent, "This is a test" & @CRLF & "Another Line", 10, 10, 500, 200) $Button = GuiCtrlCreateButton("Run", 10, 220, 80, 20) GuiSetState () While 1 Dim $GUI_Msg = GuiGetMsg() Switch $GUI_Msg Case -3 Exit Case -100 To 0 ContinueLoop Case $GUI_EVENT_CLOSE Exit Case $Button _Check () EndSwitch Wend Func _Check() GUICtrlSetData ($Button, "Stop") GUICtrlSetData($Logbox, "") ;Local $Pid = Run(@SystemDir & '\cmd /c "dir c:\ /s /O:N"', @SystemDir, @SW_HIDE, $STDIN_CHILD + $STDOUT_CHILD) ;Local $Pid = Run(@SystemDir & '\cmd /c "dir c:\ /s /O:N"', @SystemDir, @SW_MAXIMIZE, $STDIN_CHILD + $STDOUT_CHILD) local $Pid = Run(@ComSpec & " /c " & "dir c:\ /S /O:N",@SystemDir,@SW_HIDE, $STDIN_CHILD + $STDOUT_CHILD) MsgBox(0, "Pid", $Pid) While $Pid $msg = GUIGetMsg() Select Case $msg = $GUI_EVENT_CLOSE or $msg = $Button ProcessClose ($Pid) Exitloop EndSelect Dim $line = StdoutRead($Pid) If @error Then ExitLoop Else Local $iRet = _WinAPI_WideCharToMultiByte($line,0 ,True) If $iRet Then $line = $iRet _GUICtrlEdit_AppendText($Logbox, $line) EndIf WEnd GUICtrlSetData ($Button, "Run") EndFunc Func _ChangePageCode($sString, $iPageCode) Local $objConv = ObjCreate("OlePrn.OleCvt") return $objConv.ToUnicode($sString,$iPageCode) EndFunc Saludos Edited October 27, 2014 by Danyfirex Danysys.com AutoIt... UDFs: VirusTotal API 2.0 UDF - libZPlay UDF - Apps: Guitar Tab Tester - VirusTotal Hash Checker Examples: Text-to-Speech ISpVoice Interface - Get installed applications - Enable/Disable Network connection PrintHookProc - WINTRUST - Mute Microphone Level - Get Connected NetWorks - Create NetWork Connection ShortCut Link to comment Share on other sites More sharing options...
moocan2112 Posted October 28, 2014 Author Share Posted October 28, 2014 Maybe using _WinAPI_WideCharToMultiByte. Look: expandcollapse popup#include <EditConstants.au3> #include <GUIConstantsEx.au3> #include <WindowsConstants.au3> #include <Constants.au3> #include <GuiEdit.au3> ;#include <WinAPIMisc.au3> Local $line $Parent = GUICreate ("OemToCharW Test", 520, 260, -1, -1) $Logbox = GUICtrlCreateEdit('', 10, 10, 500, 200); , BitOR($ES_READONLY, $WS_VSCROLL)) _GUICtrlEdit_SetLimitText($logbox, -1) ;$Logbox = _GUICtrlEdit_Create($Parent, "This is a test" & @CRLF & "Another Line", 10, 10, 500, 200) $Button = GuiCtrlCreateButton("Run", 10, 220, 80, 20) GuiSetState () While 1 Dim $GUI_Msg = GuiGetMsg() Switch $GUI_Msg Case -3 Exit Case -100 To 0 ContinueLoop Case $GUI_EVENT_CLOSE Exit Case $Button _Check () EndSwitch Wend Func _Check() GUICtrlSetData ($Button, "Stop") GUICtrlSetData($Logbox, "") ;Local $Pid = Run(@SystemDir & '\cmd /c "dir c:\ /s /O:N"', @SystemDir, @SW_HIDE, $STDIN_CHILD + $STDOUT_CHILD) ;Local $Pid = Run(@SystemDir & '\cmd /c "dir c:\ /s /O:N"', @SystemDir, @SW_MAXIMIZE, $STDIN_CHILD + $STDOUT_CHILD) local $Pid = Run(@ComSpec & " /c " & "dir c:\ /S /O:N",@SystemDir,@SW_HIDE, $STDIN_CHILD + $STDOUT_CHILD) MsgBox(0, "Pid", $Pid) While $Pid $msg = GUIGetMsg() Select Case $msg = $GUI_EVENT_CLOSE or $msg = $Button ProcessClose ($Pid) Exitloop EndSelect Dim $line = StdoutRead($Pid) If @error Then ExitLoop Else Local $iRet = _WinAPI_WideCharToMultiByte($line,0 ,True) If $iRet Then $line = $iRet _GUICtrlEdit_AppendText($Logbox, $line) EndIf WEnd GUICtrlSetData ($Button, "Run") EndFunc Func _ChangePageCode($sString, $iPageCode) Local $objConv = ObjCreate("OlePrn.OleCvt") return $objConv.ToUnicode($sString,$iPageCode) EndFunc Saludos Hi, Many thanks for your help. Using your code Autoit does not crash but no convertion is made. I have tried (with help file) and your advice with _WinAPI_WideCharToMultiByte to change iCodePage parameter but there i no change. I have tried too the _WinAPI_MultiByteToWideChar but no change. I will keep it "as this" without conversion in the first time ... because as you give to the end user the possibility to have an ouput ... 99% never read the output French with all accentuated characters is always a nightmare but I think that spanish language is not more easy to convert Many thanks one more time for your help. Link to comment Share on other sites More sharing options...
binhnx Posted October 28, 2014 Share Posted October 28, 2014 -1073741819 or 0xC0000005 means Access Violation. It means you have read or written from/to a memory location you don't have permission to access/write. It's not a x86 / x86_64 problem, not a software problem. OemToChar's 2nd parameter is marked as out. It's not a string but a LPTSTR (Long Pointer to Tchar String). The OS (Windows) must have write permission to write to the memory at that pointer address. But you pass a normal (and empty) string by value. It's then converted to LPCSTR (same as the 1st parameter type), which means a const string. So it's definitely an access violation since you cannot write to a const string. You should do like this (non-tested, but it should work): Allocate some memory large enough to store your string. Using $tBuffer = DllStructCreate('align 1;CHAR[128]'). This will allocate a memory block large enough to hold 128 ansi characters. Change the size as you want. Pass the pointer to that memory block to the function, like this DllCall("User32.dll", "BOOL", "OemToChar", "str", $line, "ptr", DllStructGetPtr($tBuffer)) Retrieve the string using DllStructGetData(tBuffer, 1) 99 little bugs in the code 99 little bugs! Take one down, patch it around 117 little bugs in the code! Link to comment Share on other sites More sharing options...
Recommended Posts
Create an account or sign in to comment
You need to be a member in order to leave a comment
Create an account
Sign up for a new account in our community. It's easy!
Register a new accountSign in
Already have an account? Sign in here.
Sign In Now