MyEarth Posted September 13, 2013 Posted September 13, 2013 (edited) 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 September 15, 2013 by MyEarth
FireFox Posted September 13, 2013 Posted September 13, 2013 Hi, FindWindow is WinGetHandle in autoit. WinGetHandle("[CLASS:Shell_TrayWnd]") Br, FireFox.
martin Posted September 13, 2013 Posted September 13, 2013 (edited) 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 September 13, 2013 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.
MyEarth Posted September 13, 2013 Author Posted September 13, 2013 (edited) 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 Edited September 13, 2013 by MyEarth
JohnOne Posted September 13, 2013 Posted September 13, 2013 I'm guessing you don't even know if that c code works. FireFox 1 AutoIt Absolute Beginners Require a serial Pause Script Video Tutorials by Morthawt ipify Monkey's are, like, natures humans.
FireFox Posted September 13, 2013 Posted September 13, 2013 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.
MyEarth Posted September 14, 2013 Author Posted September 14, 2013 (edited) 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 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 September 14, 2013 by MyEarth
MyEarth Posted September 14, 2013 Author Posted September 14, 2013 Another code but in VB6, untested because i can't find any trial of VB6, but from the word of the author "seems" work expandcollapse popup'************************************** ' 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
FireFox Posted September 14, 2013 Posted September 14, 2013 #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
MyEarth Posted September 14, 2013 Author Posted September 14, 2013 (edited) 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 September 14, 2013 by MyEarth
MyEarth Posted September 14, 2013 Author Posted September 14, 2013 (edited) Damn i have do everything that post say ( our software work blablabla i can't post the code blablabla), why not work for me? expandcollapse popup#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 September 14, 2013 by MyEarth
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