Jump to content
Sign in to follow this  
MyEarth

Help me to convert a C code

Recommended Posts

MyEarth

Hello,

There is a way o someone for convert this to autoit? It's only a few lines

std::wcout << "Ready"; 
        _iconParentHwnd = FindWindow(_T("Shell_TrayWnd"), NULL); 
        _iconHwnd = FindWindowEx(_iconParentHwnd, NULL, _T("Start"), NULL); 
        LRESULT _iconHdl = SendMessage(_iconHwnd, WM_CLOSE, NULL, NULL); 
        signed int _reVal = static_cast<int>(_iconHdl); 
        if (_reVal == 0)
        {
            std::wcout << "\n\succes"; 
        }
        else
            {
                std::wcout << "\n\nFailed Error: " << GetLastError() << ")";
                std::getwchar();
            }
        }
                     endif

I have see there in autoit:

_WinAPI_FindWindow

_SendMessage

But i don't have understand that _T(), NULL i think is = "" but we don't have a function called FindWindowEx

Thanks for help to archivie this ;)

Edited by MyEarth

Share this post


Link to post
Share on other sites
FireFox

Hi,

FindWindow is WinGetHandle in autoit.

WinGetHandle("[CLASS:Shell_TrayWnd]")

Br, FireFox.


 

OS : Win XP SP2 (32 bits) / Win 7 SP1 (64 bits) / Win 8 (64 bits) | Autoit version: latest stable / beta.
Hardware : Intel(R) Core(TM) i5-2400 CPU @ 3.10Ghz / 8 GiB RAM DDR3.

My UDFs : Skype UDF | TrayIconEx UDF | GUI Panel UDF | Excel XML UDF | Is_Pressed_UDF

My Projects : YouTube Multi-downloader | FTP Easy-UP | Lock'n | WinKill | AVICapture | Skype TM | Tap Maker | ShellNew | Scriptner | Const Replacer | FT_Pocket | Chrome theme maker

My Examples : Capture toolIP Camera | Crosshair | Draw Captured Region | Picture Screensaver | Jscreenfix | Drivetemp | Picture viewer

My Snippets : Basic TCP | Systray_GetIconIndex | Intercept End task | Winpcap various | Advanced HotKeySet | Transparent Edit control

 

Share this post


Link to post
Share on other sites
martin

I think it would translate to something like this but whether the logic of the code is correct I can't say.

#include <WindowsConstants.au3>
#include <SendMessage.au3>

$iconParentHwnd = WinGetHandle("Shell_TrayWnd");
$iconHwnd = WinGetHandle($iconParentHwnd, "start"); must not have upper case 's' if you're looking for the 'start' button?
$iconHdl = _SendMessage($iconHwnd, $WM_CLOSE);

If ($iconHdl = 0) Then
    MsgBox(262144, "Result", "Success!")
Else
    MsgBox(262144, "Result", "Failed!")
EndIf
 
Edited by martin

Serial port communications UDF Includes functions for binary transmission and reception.printing UDF Useful for graphs, forms, labels, reports etc.Add User Call Tips to SciTE for functions in UDFs not included with AutoIt and for your own scripts.Functions with parameters in OnEvent mode and for Hot Keys One function replaces GuiSetOnEvent, GuiCtrlSetOnEvent and HotKeySet.UDF IsConnected2 for notification of status of connected state of many urls or IPs, without slowing the script.

Share this post


Link to post
Share on other sites
MyEarth

Well, the code give me "Success" but not the expected result. I want to hide the orb of Windows 7. i have try many method, always failed:

ControlCommand
ControlHide
 _WinAPI_ShowWindow

There are plenty of example in C#, but i'm not very good to convert it ( and before this post i have try it, lost hours for try to do the same ) like:

Link 1 ( check the comment of Simon B. 22-Aug-12 11:34 for hide only the orb )

Link 2

The taskbar in his "totally" is easy to hide with Autoit, the orb not. Thanks guys for the help, i'll really apprecciate it :D

Edited by MyEarth

Share this post


Link to post
Share on other sites
FireFox

and... I can see in a link you provided that the orb is still visible but the taskbar is hidden.

Actually, there is an orb on the taskbar and a hover orb, you can either hide this hover orb or hide the taskbar and its orb.

Br, FireFox.


 

OS : Win XP SP2 (32 bits) / Win 7 SP1 (64 bits) / Win 8 (64 bits) | Autoit version: latest stable / beta.
Hardware : Intel(R) Core(TM) i5-2400 CPU @ 3.10Ghz / 8 GiB RAM DDR3.

My UDFs : Skype UDF | TrayIconEx UDF | GUI Panel UDF | Excel XML UDF | Is_Pressed_UDF

My Projects : YouTube Multi-downloader | FTP Easy-UP | Lock'n | WinKill | AVICapture | Skype TM | Tap Maker | ShellNew | Scriptner | Const Replacer | FT_Pocket | Chrome theme maker

My Examples : Capture toolIP Camera | Crosshair | Draw Captured Region | Picture Screensaver | Jscreenfix | Drivetemp | Picture viewer

My Snippets : Basic TCP | Systray_GetIconIndex | Intercept End task | Winpcap various | Advanced HotKeySet | Transparent Edit control

 

Share this post


Link to post
Share on other sites
MyEarth

and... I can see in a link you provided that the orb is still visible but the taskbar is hidden.

Actually, there is an orb on the taskbar and a hover orb, you can either hide this hover orb or hide the taskbar and its orb.

Br, FireFox.

 

There are software can hide it:

Start Killer

and

Start Orb Mover ( P.S There are 2 exe's in Start Orb MoverAppFiles, HideIt and ShowIt and both work )

So:

If the question is: Is Possible to hide only the orb? The answer is Yes

If the question is: How? Then answer is: I don't know :D

Jocking apart, i'll continue the research but if you guys have an idea please post it

I'm guessing you don't even know if that c code works.

 

You have right, but in part. I have tested both codes and they hide completely the taskbar, but i think can be "edit" for hide only the orb, the problem is i don't know C-C# so i don't know how to start

 

Edited by MyEarth

Share this post


Link to post
Share on other sites
MyEarth

Another code but in VB6, untested because i can't find any trial of VB6, but from the word of the author "seems" work

'**************************************
' Name: Hide - Show the "Start" Button windows Vista and 7
' Description: Knowledge belongs to all.
' Wherever you look on the internet you can not find how to do hide
' the "Start Button" and "Shell tray" on windows Vista and 7 do not find a solution other than "startkiller"
' The following code solves the problem.
' By: Diomidis
'
'
' Inputs:None
'
' Returns:None
'
' Assumes:None
'
' Side Effects:None
' This code is copyrighted and has limited warranties
' Please see http://www.Planet-Source-Code.com/xq/ASP/txtCodeId.74343/lngWId.1/qx/vb/scripts/ShowCode.htm
' for details.
'**************************************

Private Declare Function FindWindowEx Lib "user32" Alias "FindWindowExA" (ByVal hWnd1 As Long, ByVal hWnd2 As Long, ByVal lpsz1 As String, ByVal lpsz2 As String) As Long

Private Declare Function FindWindow Lib "user32" Alias "FindWindowA" (ByVal lpClassName As String, ByVal lpWindowName As String) As Long

Public Declare Function ShowWindow Lib "user32.dll" (ByVal hWnd As Long, ByVal nCmdShow As Long) As Long

Public Function ShowTaskbar(ByVal IsLock As Boolean)
    If IsLock = False Then
        ShowWindow FindWindow("shell_traywnd", vbNullString), 1
        'only Vista-7
        ShowWindow FindWindowEx(FindWindow("Desktop", ""), 0, "Button", vbNullString), 1
    Else
        ShowWindow FindWindow("shell_traywnd", vbNullString), 0
        'only Vista-7
        ShowWindow FindWindowEx(FindWindow("Desktop", ""), 0, "Button", vbNullString), 0
    End If
End Function

If someone what to check it out i'll appreciate

Share this post


Link to post
Share on other sites
FireFox

#include <WinAPIEx.au3>
 
ShowTaskbar(True)
 
Func ShowTaskbar($fIsLock)
    If $fIsLock = False Then
        _WinAPI_ShowWindow(_WinAPI_FindWindow("shell_traywnd", ""), 1)
        ;only Vista-7
        _WinAPI_ShowWindow(_WinAPI_FindWindowEx(_WinAPI_FindWindow("Desktop", ""), 0, "Button", ""), 1)
    Else
        _WinAPI_ShowWindow(_WinAPI_FindWindow("shell_traywnd", ""), 0)
        ;only Vista-7
        _WinAPI_ShowWindow(_WinAPI_FindWindowEx(_WinAPI_FindWindow("Desktop", ""), 0, "Button", ""), 0)
    EndIf
EndFunc   ;==>ShowTaskbar
 
Func _WinAPI_FindWindowEx($hParent, $hChildAfter, $sClassName, $sWindowName)
    Local $aResult = DllCall("user32.dll", "hwnd", "FindWindowEx", "hwnd", $hParent, "hwnd", $hChildAfter, "wstr", $sClassName, "wstr", $sWindowName)
    If @error Then Return SetError(@error, @extended, 0)
    Return $aResult[0]
EndFunc   ;==>_WinAPI_FindWindowEx

 

OS : Win XP SP2 (32 bits) / Win 7 SP1 (64 bits) / Win 8 (64 bits) | Autoit version: latest stable / beta.
Hardware : Intel(R) Core(TM) i5-2400 CPU @ 3.10Ghz / 8 GiB RAM DDR3.

My UDFs : Skype UDF | TrayIconEx UDF | GUI Panel UDF | Excel XML UDF | Is_Pressed_UDF

My Projects : YouTube Multi-downloader | FTP Easy-UP | Lock'n | WinKill | AVICapture | Skype TM | Tap Maker | ShellNew | Scriptner | Const Replacer | FT_Pocket | Chrome theme maker

My Examples : Capture toolIP Camera | Crosshair | Draw Captured Region | Picture Screensaver | Jscreenfix | Drivetemp | Picture viewer

My Snippets : Basic TCP | Systray_GetIconIndex | Intercept End task | Winpcap various | Advanced HotKeySet | Transparent Edit control

 

Share this post


Link to post
Share on other sites
MyEarth

FireFox again thank. I have tested the code and work at "half" ( P.S. Change <WinAPIEx.au3> with <WinAPI.au3> )

This line correctly hide the taskbar:

_WinAPI_ShowWindow(_WinAPI_FindWindow("shell_traywnd", ""), 1)

But this, for hide the orb, not work. Very strange:

_WinAPI_ShowWindow(_WinAPI_FindWindowEx(_WinAPI_FindWindow("Desktop", ""), 0, "Button", ""), 1)

I have try also to convert the first script using _WinAPI_FindWindowEx:

#include <WindowsConstants.au3>
#include <SendMessage.au3>
#include <WinAPI.au3>

$_iconParentHwnd = _WinAPI_FindWindow("shell_traywnd", "")
$_iconHwnd = _WinAPI_FindWindowEx($_iconParentHwnd, "", "Start", "")
$iconHdl = _SendMessage($_iconHwnd, $WM_CLOSE) ; same for _WinAPI_ShowWindow

If ($iconHdl = 0) Then
    MsgBox(262144, "Result", "Success!")
Else
    MsgBox(262144, "Result", "Failed!")
EndIf

Func _WinAPI_FindWindowEx($hParent, $hChildAfter, $sClassName, $sWindowName)
    Local $aResult = DllCall("user32.dll", "hwnd", "FindWindowEx", "hwnd", $hParent, "hwnd", $hChildAfter, "wstr", $sClassName, "wstr", $sWindowName)
    If @error Then Return SetError(@error, @extended, 0)
    Return $aResult[0]
EndFunc   ;==>_WinAPI_FindWindowEx

Result is "Success" but don't do nothing. What is the "secret"?

Other useful information:

The start "orb" in Windows Vista is actually a separate top-level window
rather than a child of the taskbar, as it needs to be shaped for its overhang
from a single-row task bar and Microsoft did not want to incur a penalty for
shaping the entire task bar.

I don't remember its details off the top of my head, but if you use Spy++
you should be able to locate it. It can be shown/hidden independently of the
rest of the task bar.

It's definitely doable -- one of our applications does it :-)

-----------------

I can't paste the code itself, but we do it like this:

1. Find the task bar itself.

2. Get the process ID of the Explorer process that owns the task bar.

3. Enumerate all top-level windows.

4. For each window, get its process ID.

5. If it is the same as Explorer's, get the window text.

6. If the window text is "Start", it's our button.

I don't know if this works on localized versions of Windows Vista.

Hopefully this is something you can adapt to your needs :-)

Enjoy,

-----------------

Instead of trying to close it, try just hiding and showing it. In our
application, it responds to ShowWindow with SW_HIDE.

The window cannot be identified by class name. You must first find the
process ID of the owner of the task bar itself (which you *can* find with a
simple FindWindow call), and then enumerate the windows and follow the
procedure I outlined to locate the other top-level windows owned by the same
process. One of those other windows is the start orb.

 

Link

Edited by MyEarth

Share this post


Link to post
Share on other sites
MyEarth

Damn i have do everything that post say ( our software work blablabla i can't post the code blablabla), why not work for me? :pirate:

#include <WinAPI.au3>
#include <Array.au3>
;~ #include <SendMessage.au3>
;~ #include <WindowsConstants.au3>

Local $Explorer_Handle, $Explorer_ID, $Start_Button, $Start_Handle

$Explorer = ProcessList("explorer.exe")
For $i = 1 To $Explorer[0][0]
    $Explorer_ID = $Explorer[$i][1]
Next

MsgBox(0, "ID", $Explorer_ID)
$Explorer_Handle = _GetHwndFromPID($Explorer_ID)
MsgBox(0, "HANDLE", $Explorer_Handle)

$Start_Button = WinList()

For $i = 1 To $Start_Button[0][0]
    If $Start_Button[$i][0] = "Start" And $Start_Button[$i][1] = $Explorer_Handle Then
        MsgBox(0, "Details", "Title=" & $Start_Button[$i][0] & @LF & "Handle=" & $Start_Button[$i][1])
        $Start_Handle = $Start_Button[$i][1]
    EndIf
Next

_WinAPI_ShowWindow($Start_Handle, @SW_HIDE)
;~ _SendMessage($Start_Handle, $WM_CLOSE)

Func _GetHwndFromPID($PID)
    $hWnd = 0
    $stPID = DllStructCreate("int")
    Do
        $winlist2 = WinList()
        For $i = 1 To $winlist2[0][0]
            If $winlist2[$i][0] <> "" Then
                DllCall("user32.dll", "int", "GetWindowThreadProcessId", "hwnd", $winlist2[$i][1], "ptr", DllStructGetPtr($stPID))
                If DllStructGetData($stPID, 1) = $PID Then
                    $hWnd = $winlist2[$i][1]
                    ExitLoop
                EndIf
            EndIf
        Next
        Sleep(100)
    Until $hWnd <> 0
    Return $hWnd
EndFunc   ;==>_GetHwndFromPID
Edited by MyEarth

Share this post


Link to post
Share on other sites

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 account

Sign in

Already have an account? Sign in here.

Sign In Now
Sign in to follow this  

  • Similar Content

    • bowker
      By bowker
      Hi! Is there a way for me to set the value for my slider? I am getting the value for my slider with
       
      Local $strText = _UIA_getPropertyValue($oUIElement, $UIA_LegacyIAccessibleValuePropertyId) MsgBox(0,"",$strText)  
    • nacerbaaziz
      By nacerbaaziz
      Hello
      Can we pause and resume the download in the InetGet function?
      If is possible, what is the solution please?
      I used this code To manage the download

      #include <INet.au3> func _downloader($name, $linc, $filepath, $RTLF = false, $link = false) global $downloader = GUICreate("downloader", 400, 200, -1, -1, $WS_CLIPCHILDREn, $RTLF, $link) global $path = $filePath $labelTxt = GUICtrlCreateLabel("downloading " & $name, 50, 10, 200, 20) global $labelTxt0 = GUICtrlCreateLabel("downloaded size 0 MB " & "OF 0 MB", 50, 60, 300, 20) global $Progress = "" global $sText = ""     For $i = 1 To Random(5, 20, 1) ; Return an integer between 5 and 20 to determine the length of the string.         $sText &= Chr(Random(65, 122, 1)) ; Return an integer between 65 and 122 which represent the ASCII characters between a (lower-case) to Z (upper-case). next global $labelTxt2 = GUICtrlCreateInput("0%", 50, 80, 50, 20) _GUICtrlEdit_SetReadOnly(-1, true) GUIStartGroup("") global $beep = GUICtrlCreateCheckBox("use the progress beep notification", 150, 120, 200, 20) GUIStartGroup("") $button = GUICtrlCreateButton("Cancel', 130, 150, 180, 25, 0x01) $iIndex = 0 global $Target global $url GUIStartGroup("") global $Progress = GUICtrlCreateProgress(50, 90, 150, 20) global $Target = $filepath global $url = $linc global $path = $filepath global $hDownloadNo = _RSMWare_GetData($url, $Target) global $status = false AdlibRegister("SetProgress") global $onprogress = false, $curent = false GUISetState(@sw_Show) While 1 Switch GUIGetMsg() Case $GUI_EVENT_CLOSE, $button $asc = MsgBox(4132,"exit download?","if you click yes the downloading will be cancel, do you want to cancel it ?") if $asc = 6 then AdlibUnRegister("SetProgress") GUIDelete() If $hDownloadNo <> 0 Then InetClose($hDownloadNo) exitLoop endIf EndSwitch if $status = -1 then $status = 0 $hDownloadNo = _RSMWare_GetData($url, $Target) $onprogress = false $curent = false elseIf $Status = 1 then $status = $path GUIDelete() AdlibUnRegister("SetProgress") exitLoop endIf WEnd return $status endFunc Func _RSMWare_GetData($url, $Target) Local $hDownload = InetGet($url, $Target, 1, 1) Return $hDownload EndFunc ;==>_RSMWare_GetData Func SetProgress() Local $state If $hDownloadNo <> 0 Then $state = InetGetInfo($hDownloadNo) If @error = 0 Then $infor = "downloaded size " & Round(Execute(InetGetInfo($hDownloadNo, $INET_DOWNLOADREAD) / 1048576), 2) & " MB of " & Round(Execute(InetGetInfo($hDownloadNo, $INET_DOWNLOADSIZE) / 1048576), 2) & " MB " $onprogress = Round(Ceiling(($state[0] / $state[1]) * 100)) if not (InetGetInfo($hDownloadNo, $INET_DOWNLOADSIZE) = 0) then if $onProgress <= 0 then $onProgress = 0 GUICtrlSetData($Progress, $onProgress) GUICtrlSetData($labelTxt0, $infor) GUICtrlSetData($labelTxt2, $onProgress & "%") if _isChecked($beep) then if $onprogress > $curent then beep((100 + $onprogress * 20), 100) $curent = $onprogress endIf endIf endIf If $state[2] Then If $state[3] Then InetClose($hDownloadNo) $status = 1 else InetClose($hDownloadNo) $status = -1 endIf endIf EndIf endIf EndFunc ;==>SetProgress
    • VollachR
      By VollachR
      Hi,
      I'm looking for a way to take a number value from a Row2 of a 2D array and according to this check if files that appear in rows 3-11 in the array exists.
      For example, if the number in Row2 is 5 I need to check for the files in Row 3-6 only, if it is 6 than rows 3-7 and so on.
      I thought on using a FOR loop but I have very little experience with those.
      Can you suggest the best way to do what I need?
      BTW, the files in Rows 3-11 will usually have blank value for any row above the number in Row2 (e.g. Row2 = 5 so Rows3-6 will have values but 8-11 be empty), The values I need are in Column 1 of the array, the name of the key from the INI file that the array was created from is in Column 0.
      Full Example:
      Row2 of Array:
      Col0 = Games# - Col1 = 5
      Rows3-6
      Col0 = Exe2 - Col1 = Path To File
      Col0 = Exe3 - Col1 = Path To File
      Col0 = Exe4 - Col1 = Path To File
      Col0 = Exe5 - Col1 = Path To File
      I need that if Row2 is 5 to check these above for rows if the file exists, if it was 6 then the next row as well and so on up until number 10 in Row2 as it can't go above 10.
      So basically for whatever number in Row2 from 2-10 need to check 1-9 rows from 3-11 to see if the files in Col1 exists and if any of them don't exist it should call a function that shows an error message.
      I'm pretty sure I have the first line of the for look correct:
      For $i = 1 To $aAIO[2][1] Just not sure how to continue from there, also not sure if $i should be equal 1 or 2.
      Help will be appreciated.
    • VollachR
      By VollachR
      Hi,
      I've written a specialty INI file editor for a specific set of INI files related to a bigger script I'm working on.
      I'm trying to create a verification script that checks the ini files structure and format and gives an error if they are not in expected format.
      What I did so far is create a couple of custom arrays, each with the list of Sections expected in the files and I use IniReadSectionNames in order to read the sections from the selected INI file and compare it to the array.
      It works fine, excepts it only gives an error if one or more of the sections in the custom array is missing, if they all exist but there are other additional sections that shouldn't be there it doesn't give an error and continue to open the editor screen.
      Here are the relevant part of my script:
      The Custom Verification Arrays:
      ;Creating Arrays for INI Verification Global $aSettingsVerify[7] $aSettingsVerify[1] = "Conversion" $aSettingsVerify[2] = "AIO" $aSettingsVerify[3] = "Data" $aSettingsVerify[4] = "Redist" $aSettingsVerify[5] = "Split" $aSettingsVerify[6] = "Autorun" Global $aDataVerify[6] $aDataVerify[1] = "Compression" $aDataVerify[2] = "Exclude" $aDataVerify[3] = "LangExclude" $aDataVerify[4] = "PreCommands" $aDataVerify[5] = "PostCommands" The IniReadSectionNames verification part:
      Case $OK If StringInStr($ActiveConfig, "Settings.ini") Then $CheckArray1 = IniReadSectionNames($ActiveConfig) $CheckArray2 = _ArrayCompare($aSettingsVerify, $CheckArray1) $CheckArray3 = UBound($CheckArray2, 1) If $CheckArray3 = 1 Then GUIDelete($ConfigStart) SettingsGUI() EndIf If $CheckArray3 > 1 Then WrongIni() EndIf EndIf If StringInStr($ActiveConfig, "Data") Then $CheckArray1 = IniReadSectionNames($ActiveConfig) $CheckArray2 = _ArrayCompare($aDataVerify, $CheckArray1) $CheckArray3 = UBound($CheckArray2, 1) If $CheckArray3 = 1 Then GUIDelete($ConfigStart) DataGUI() EndIf If $CheckArray3 > 1 Then WrongIni() EndIf EndIf The Function that performs the compare: (Found it in another thread on this forums somewhere by using Google Search)
      ;Compares Imported INI file with the Verification array Func _ArrayCompare(ByRef $a1, ByRef $a2) Local $nOldSize = UBound($a2) Local $a3[$nOldSize], $nNewSize = $nOldSize For $i = 0 To UBound($a1) - 1 For $j = 0 To $nOldSize - 1 If Not $a3[$j] And ($a1[$i] = $a2[$j]) Then $a3[$j] = 1 $nNewSize -= 1 EndIf Next Next Local $a4[$nNewSize], $j = 0 For $i = 0 To $nOldSize - 1 If Not $a3[$i] Then $a4[$j] = $a2[$i] $j += 1 EndIf Next Return $a4 EndFunc ;==>_ArrayCompare  
      Any way to make a check if there are sections other than the ones in the Verification Array and produce an error?
      Thanks
    • Valnurat
      By Valnurat
      Can you explain why my mouseclick don't work in my shockwave fullscreen.
       
      I know my syntax is ok, because it moves to coordinates, but this will only press 1 time, even that I want to press 5 times.
      How can that be?
×