nacerbaaziz

how to get the pressed menu item with out variable

8 posts in this topic

#1 ·  Posted

hello guys
how are you؟
I hope to be fine.
I have a question  please
how do I get the menu item that was pressed without that contains a variable؟
For example I have a menu  of Favorites and I want the script recognizes the existing path in the pressed item
i'll repeat to tell the item does not contain a variable
Is there any solution
if you want to explain more I could write an example of what I want.
Greetings to all,
thanks in advance

Share this post


Link to post
Share on other sites



#2 ·  Posted

An example of what you want would be great, as I believe there is a language barrier issue. Please provide an example/screenshot that shows exactly what you're after.


√-1 2^3 ∑ π, and it was delicious!

Share this post


Link to post
Share on other sites

#3 ·  Posted (edited)

OK this is an example

i want when i pressed ani item from the favourites menu the script run the path

#RequireAdmin
#include <GUIConstantsEx.au3>
#include <file.au3>
local $hGUI, $menu, $file, $path, $msg
$hGUI = GUICreate("menu item")
$menu = GUICtrlCreateMenu("Favourites")
GUISetState()
$file = @scriptDir & "\file.txt"
;Writing file
FileWrite($file, @systemDir & "\notepad.exe" & @crlf)
FileWrite($file, @systemDir & "\explorer.exe" & @crlf)
FileWrite($file, @systemDir & "\regedit.exe")
; add item to menu

for $i = 1 to _FileCountLines($file)
$add = GUICtrlCreateMenuItem(FileReadLine($file, $i), $menu)
next
FileDelete($file)

While 1
Switch GUIGetMSG()
case $GUI_event_close
exit
EndSwitch
Wend

Edited by nacerbaaziz

Share this post


Link to post
Share on other sites

#4 ·  Posted

Is this possible?
Because I asked someone who said this is impossible in the AUTOIT

Share this post


Link to post
Share on other sites

#5 ·  Posted

#RequireAdmin

#include <GuiMenu.au3>
#include <WindowsConstants.au3>
#include <GUIConstantsEx.au3>
#include <file.au3>

Local $hGUI, $menu, $file

$hGUI = GUICreate("menu item")
$menu = GUICtrlCreateMenu("Favourites")
GUISetState()

GUIRegisterMsg($WM_COMMAND, "WM_COMMAND")

$file = @ScriptDir & "\file.txt"
;Writing file
FileWrite($file, @WindowsDir & "\notepad.exe" & @CRLF)
FileWrite($file, @WindowsDir & "\explorer.exe" & @CRLF)
FileWrite($file, @WindowsDir & "\regedit.exe")

; add item to menu
For $i = 1 To _FileCountLines($file)
    GUICtrlCreateMenuItem(FileReadLine($file, $i), $menu)
Next
FileDelete($file)

While 1
    Switch GUIGetMsg()
        Case $GUI_event_close
            Exit
    EndSwitch
WEnd

Func WM_COMMAND($hWnd, $iMsg, $wParam, $lParam)
  Local $item = _GUICtrlMenu_GetItemSubMenu(_GUICtrlMenu_GetMenu($hGUI), 0)
  Run(_GUICtrlMenu_GetItemText($item, _GUICtrlMenu_MenuItemFromPoint($hGUI, $item)))
  Return $GUI_RUNDEFMSG
EndFunc

 

1 person likes this

Share this post


Link to post
Share on other sites

#6 ·  Posted

thank you

but how i can use the WM_COMMAND

Share this post


Link to post
Share on other sites

#7 ·  Posted

If you don't know how wm_command works then use native message loop

#RequireAdmin

#include <GUIConstantsEx.au3>
#include <file.au3>

Local $hGUI, $menu, $file, $item[3]

$hGUI = GUICreate("menu item")
$menu = GUICtrlCreateMenu("Favourites")
GUISetState()

$file = @ScriptDir & "\file.txt"
;Writing file
FileWrite($file, @WindowsDir & "\notepad.exe" & @CRLF)
FileWrite($file, @WindowsDir & "\explorer.exe" & @CRLF)
FileWrite($file, @WindowsDir & "\regedit.exe")

; add item to menu
For $i = 1 To _FileCountLines($file)
    $item[$i - 1] = GUICtrlCreateMenuItem(FileReadLine($file, $i), $menu)
Next
FileDelete($file)

While 1
    $msg = GUIGetMsg()
    Switch $msg
        Case $GUI_event_close
            Exit
        Case $item[0] To $item[2]
            Run(GUICtrlRead($msg, 1))
    EndSwitch
WEnd

 

1 person likes this

Share this post


Link to post
Share on other sites

#8 ·  Posted

it's work my friend thank you  very much.

 

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

  • Similar Content

    • SteveJM
      By SteveJM
      I have a working program currently driven largely through menu selections. I would like to add a toolbar where most of the tollbar button actions are basically the same as menu items, but quicker to access. I have been wading around in toolbar examples, MSDN pages etc, it's clearly going to be a bit of a slog to get everything right, including tooltips etc. I thought I would start with something simple to prove the principle.
      Using bits from the help file examples I have a small program that successfully displays a toolbar. However, what seemed like the most elegant way to deal with the button commands does not seem to work. My understanding was that a toolbar button fires a WM_COMMAND message, with the command Id set by the second parameter in the call to
      _GUICtrlToolbar_AddButton ( $hWnd, $iID, $iImage)
      so I though it would be a good idea to set this Id to the same value as my menu item Id; then it would run the same task which is what I wanted. This did not work. I am using message loop mode and would like to stick with this because some of my scripts run hardware at the same time as the gui; it is easier if I don't have to worry about code being interrupted with the hardware in an unknown state . So I added a handler for WM_COMMAND, with some cribbed display code to try and see why. The toolbar button defintely fired a WM_COMMAND message and the Id looked the same, so no explanation there.
      I guess the issue is with GUIGetMsg() which may be constructed to ignore all but a limited number of control handles, i.e. those made with the GuiCtrlCreate... commands; this is speculation.
      I would dearly love to find a tidy way to get around this. Having some controls handled in the message loop and some in a WM_COMMAND handler, performing the same task, feels ugly. I would be very grateful for further insight from someone experienced with handling a toolbar. Perhaps I should be trying to fire the menu item. I have attached a code snippet to try and illustrate the issue.
       
       
       
      ToolbarTrial.au3
    • GordonFreeman
      By GordonFreeman
      Hi, i searched some topics but cannot found a simple way to do that:
      #include <GUIConstantsEx.au3> #include <WindowsConstants.au3> $Form1 = GUICreate("Form1", 615, 438, 192, 124) GUISetState(@SW_SHOW) ; I tried this but user reported that it work in 2006, not seems work actually $filemenu = GUICtrlCreateMenu ("&File") $fileitem = GUICtrlCreateMenuitem ("Open",$filemenu) GuiCtrlSetImage($fileitem, "shell32.dll", 4) While 1 $nMsg = GUIGetMsg() Switch $nMsg Case $GUI_EVENT_CLOSE Exit EndSwitch WEnd Also tried:
      #include <GUIConstantsEx.au3> #include <WindowsConstants.au3> $Form1 = GUICreate("Form1", 615, 438, 192, 124) GUISetState(@SW_SHOW) $filemenu = TrayCreateMenu("&File") $fileitem = TrayCreateItem("Open",$filemenu) ;GuiCtrlSetImage($fileitem, "shell32.dll", 4) ;GuiCtrlSetImage(TrayItemGetHandle($fileitem), "shell32.dll", 4) While 1 $nMsg = GUIGetMsg() Switch $nMsg Case $GUI_EVENT_CLOSE Exit EndSwitch WEnd Well.. thanks in advance!
       
      Ok. I found this working example from Yashied. If i cannot find a simple then i will go with it
      #Include <GUIConstantsEx.au3> #Include <GUIMenu.au3> #Include <Constants.au3> #Include <WinAPI.au3> #Include <WindowsConstants.au3> Opt('MustDeclareVars', 1) Global $hMenu, $hForm, $hFile = 1000, $idNew, $idExit $hForm = GUICreate('Menu', 400, 300) $hFile = _GUICtrlMenu_CreateMenu() _GUICtrlMenu_InsertMenuItem ($hFile, 0, ' &Favorites', $idNew) _GUICtrlMenu_InsertMenuItem ($hFile, 1, '', 0) _GUICtrlMenu_InsertMenuItem($hFile, 2, ' E&xit', $idExit) $hMenu = _GUICtrlMenu_CreateMenu() _GUICtrlMenu_InsertMenuItem($hMenu, 0, '&File', 0, $hFile) _GUICtrlMenu_SetMenu($hForm, $hMenu) _GUICtrlMenu_SetItemBmp($hFile, 0, _CreateBitmapFromIcon(_WinAPI_GetSysColor($COLOR_MENU), @SystemDir & '\shell32.dll', 43, 16, 16)) _GUICtrlMenu_SetItemBmp($hFile, 2, _CreateBitmapFromIcon(_WinAPI_GetSysColor($COLOR_MENU), @SystemDir & '\shell32.dll', 27, 16, 16)) GUISetState() Do Until GUIGetMsg() = $GUI_EVENT_CLOSE Func _CreateBitmapFromIcon($iBackground, $sIcon, $iIndex, $iWidth, $iHeight) Local $hDC, $hBackDC, $hBackSv, $hIcon, $hBitmap $hDC = _WinAPI_GetDC(0) $hBackDC = _WinAPI_CreateCompatibleDC($hDC) $hBitmap = _WinAPI_CreateSolidBitmap(0, $iBackground, $iWidth, $iHeight) $hBackSv = _WinAPI_SelectObject($hBackDC, $hBitmap) $hIcon = _WinAPI_PrivateExtractIcon($sIcon, $iIndex, $iWidth, $iHeight) If Not @error Then _WinAPI_DrawIconEx($hBackDC, 0, 0, $hIcon, 0, 0, 0, 0, $DI_NORMAL) _WinAPI_DestroyIcon($hIcon) EndIf _WinAPI_SelectObject($hBackDC, $hBackSv) _WinAPI_ReleaseDC(0, $hDC) _WinAPI_DeleteDC($hBackDC) Return $hBitmap EndFunc ;==>_CreateBitmapFromIcon Func _WinAPI_PrivateExtractIcon($sIcon, $iIndex, $iWidth, $iHeight) Local $hIcon, $tIcon = DllStructCreate('hwnd'), $tID = DllStructCreate('hwnd') Local $Ret = DllCall('user32.dll', 'int', 'PrivateExtractIcons', 'str', $sIcon, 'int', $iIndex, 'int', $iWidth, 'int', $iHeight, 'ptr', DllStructGetPtr($tIcon), 'ptr', DllStructGetPtr($tID), 'int', 1, 'int', 0) If (@error) Or ($Ret[0] = 0) Then Return SetError(1, 0, 0) EndIf $hIcon = DllStructGetData($tIcon, 1) If ($hIcon = Ptr(0)) Or (Not IsPtr($hIcon)) Then Return SetError(1, 0, 0) EndIf Return $hIcon EndFunc ;==>_WinAPI_PrivateExtractIcon Ok, i noticed that is a pain create submenu with _GUICtrlMenu_CreatePopup to do like in Tray, and Tray better located, then i need images/icon with Tray functions, some workaround?? 
    • nacerbaaziz
      By nacerbaaziz
      Hi all
      I want a way to get the last key pressed.
      I have a program that works with keyboard shortcuts and I want to  give the permission for the user to edit shortcut keys depending on what suits him
      i  want to make read-only edit box and the program writes the latest shortcut key pressed
      Please help me,
      greetings to all
      And thanks in advance