Moderators big_daddy Posted January 12, 2008 Moderators Posted January 12, 2008 Anyone know how to use the standard Windows Find Dialog Box? I would like to use it for Uninstall Apps, but I don't know where to even start.http://msdn2.microsoft.com/en-us/library/m...px#finding_text
WolfWorld Posted January 12, 2008 Posted January 12, 2008 Ctrl + F ?? I know it not the point. Main project - Eat Spaghetti - Obfuscate and Optimize your script. The most advance add-on.Website more of GadGets!
Moderators big_daddy Posted January 12, 2008 Author Moderators Posted January 12, 2008 Ctrl + F ??I know it not the point.I'm asking how to call the dialog box from a GUI created with AutoIt.
WolfWorld Posted January 12, 2008 Posted January 12, 2008 Oh, Here expandcollapse popup#include <GuiEdit.au3> Opt('MustDeclareVars', 1) $Debug_Ed = False ; Check ClassName being passed to Edit functions, set to True and use a handle to another control to see it work Example_Internal() Example_External1() Example_External2() Func Example_Internal() Local $s_texttest = "this is a test" & @CRLF & _ "this is only a test" & @CRLF & _ "this testing should work for you as well as it does for me" Local $GuiCtrlEditSearch, $Button1, $Button2, $msg, $aResult, $aMargins, $hEdit $GuiCtrlEditSearch = GUICreate('(Internal) Find And Replace Example with AutoIt ' & FileGetVersion(@AutoItExe), 622, 448, 192, 125) $hEdit = GUICtrlCreateEdit($s_texttest, 64, 24, 505, 233, _ BitOR($ES_AUTOVSCROLL, $WS_VSCROLL, $ES_MULTILINE, $WS_HSCROLL, $ES_NOHIDESEL)) $Button1 = GUICtrlCreateButton("Find", 176, 288, 121, 33, 0) $Button2 = GUICtrlCreateButton("Find And Replace", 368, 288, 121, 33, 0) GUISetState() While 1 $msg = GUIGetMsg() Select Case $msg = $GUI_EVENT_CLOSE ExitLoop Case $msg = $Button1 _GUICtrlEdit_Find ($hEdit) Case $msg = $Button2 _GUICtrlEdit_Find ($hEdit, True) Case Else ;;;;;;; EndSelect WEnd GUIDelete() EndFunc ;==>Example_Internal Func Example_External1() Local $s_texttest = "this is a test" & @CRLF & _ "this is only a test" & @CRLF & _ "this testing should work for you as well as it does for me" Local $GuiCtrlEditSearch, $Button1, $Button2, $msg, $aResult, $aMargins, $hEdit $GuiCtrlEditSearch = GUICreate('(External) Find And Replace Example with AutoIt ' & FileGetVersion(@AutoItExe), 622, 448, 192, 125) $hEdit = _GUICtrlEdit_Create ($GuiCtrlEditSearch, $s_texttest, 64, 24, 505, 233, _ BitOR($ES_AUTOVSCROLL, $WS_VSCROLL, $ES_MULTILINE, $WS_HSCROLL, $ES_NOHIDESEL)) $Button1 = GUICtrlCreateButton("Find", 176, 288, 121, 33, 0) $Button2 = GUICtrlCreateButton("Find And Replace", 368, 288, 121, 33, 0) GUISetState() While 1 $msg = GUIGetMsg() Select Case $msg = $GUI_EVENT_CLOSE ExitLoop Case $msg = $Button1 _GUICtrlEdit_Find ($hEdit) Case $msg = $Button2 _GUICtrlEdit_Find ($hEdit, True) Case Else ;;;;;;; EndSelect WEnd GUIDelete() EndFunc ;==>Example_External1 Func Example_External2() Local $s_texttest = 'Find And Replace Example with AutoIt ' & FileGetVersion(@AutoItExe) & @LF & _ "this is a test" & @LF & _ "this is only a test" & @LF & _ "this testing should work for you as well as it does for me" Local $whandle, $handle Local $Title = "Untitled - Notepad" Run("notepad", "", @SW_MAXIMIZE) ;Wait for the window "Untitled" to exist WinWait($Title) ; Get the handle of a notepad window $whandle = WinGetHandle($Title) If @error Then MsgBox(4096, "Error", "Could not find the correct window") Else $handle = ControlGetHandle($whandle, "", "Edit1") If @error Then MsgBox(4096, "Error", "Could not find the correct control") Else ; Send some text directly to this window's edit control ControlSend($whandle, "", "Edit1", $s_texttest) _GUICtrlEdit_Find ($handle, True) EndIf EndIf EndFunc ;==>Example_External2 Main project - Eat Spaghetti - Obfuscate and Optimize your script. The most advance add-on.Website more of GadGets!
ResNullius Posted January 12, 2008 Posted January 12, 2008 Anyone know how to use the standard Windows Find Dialog Box? I would like to use it for Uninstall Apps, but I don't know where to even start. http://msdn2.microsoft.com/en-us/library/m...px#finding_textDon't know if this will help, but it's from a project called "Windows API for VB" http://www.krugle.org/files/archive/archiv...API/CommDlg.bas Search the page for "FINDREPLACE". It's way beyond my comprehension at this point, but might get you started?...
Moderators big_daddy Posted January 16, 2008 Author Moderators Posted January 16, 2008 @ResNullius - This section look promising, thanks. Now maybe an API guru can lend some assistance. expandcollapse popupPublic Type FINDREPLACEA lStructSize As Long ' size of this struct &H20 hwndOwner As Long ' handle to owner's window hInstance As Long ' instance handle of.EXE that ' ' contains cust. dlg. template Flags As Long ' one or more of the FR_?? lpstrFindWhat As String ' ptr. to search string lpstrReplaceWith As String ' ptr. to replace string wFindWhatLen As Integer ' size of find buffer wReplaceWithLen As Integer ' size of replace buffer lCustData As Long ' data passed to hook fn. lpfnHook As Long ' ptr. to hook fn. or NULL lpTemplateName As String ' custom template name End Type 'typedef struct tagFINDREPLACEW { ' DWORD lStructSize; ' size of this struct &H20 ' HWND hwndOwner; ' handle to owner's window ' HINSTANCE hInstance; ' instance handle of.EXE that ' ' contains cust. dlg. template ' DWORD Flags; ' one or more of the FR_?? ' LPWSTR lpstrFindWhat; ' ptr. to search string ' LPWSTR lpstrReplaceWith; ' ptr. to replace string ' WORD wFindWhatLen; ' size of find buffer ' WORD wReplaceWithLen; ' size of replace buffer ' LPARAM lCustData; ' data passed to hook fn. ' LPFRHOOKPROC lpfnHook; ' ptr. to hook fn. or NULL ' LPCWSTR lpTemplateName; ' custom template name '} FINDREPLACEW, *LPFINDREPLACEW; ' Public Const FR_DOWN = &H1 Public Const FR_WHOLEWORD = &H2 Public Const FR_MATCHCASE = &H4 Public Const FR_FINDNEXT = &H8 Public Const FR_REPLACE = &H10 Public Const FR_REPLACEALL = &H20 Public Const FR_DIALOGTERM = &H40 Public Const FR_SHOWHELP = &H80 Public Const FR_ENABLEHOOK = &H100 Public Const FR_ENABLETEMPLATE = &H200 Public Const FR_NOUPDOWN = &H400 Public Const FR_NOMATCHCASE = &H800 Public Const FR_NOWHOLEWORD = &H1000 Public Const FR_ENABLETEMPLATEHANDLE = &H2000 Public Const FR_HIDEUPDOWN = &H4000 Public Const FR_HIDEMATCHCASE = &H8000 Public Const FR_HIDEWHOLEWORD = &H10000 Public Declare Function FindTextA Lib "commdlg32" (lp As FINDREPLACEA) As Long 'HWND APIENTRY FindTextW(LPFINDREPLACEW); Public Declare Function AfxReplaceTextA Lib "commdlg32" (lp As FINDREPLACEA) As Long 'HWND APIENTRY AfxReplaceTextW(LPFINDREPLACEW);
Siao Posted January 16, 2008 Posted January 16, 2008 (edited) Eh. expandcollapse popup#include <GuiEdit.au3> Const $FR_DOWN = 0x1 Const $FR_WHOLEWORD = 0x2 Const $FR_MATCHCASE = 0x4 Const $FR_FINDNEXT = 0x8 Const $FR_REPLACE = 0x10 Const $FR_REPLACEALL = 0x20 $hGui = GUICreate("Find/Replace Test", 300, 300) $cEdit = GUICtrlCreateEdit("abcdef", 0,0, 300, 280) $cBtn1 = GUICtrlCreateButton("Find...", 40, 280, 100, 20) $cBtn2 = GUICtrlCreateButton("Replace...", 160, 280, 100, 20) GUIRegisterMsg(RegisterWindowMessage("commdlg_FindReplace"), "FRMsg") $hFR_hook = DllCallbackRegister("FRHookProc", "int", "hwnd;uint;wparam;lparam") $tFINDREPLACE = DllStructCreate("dword;hwnd hOwner;hwnd hInstance;dword Flags;ptr FindWhat;ptr ReplaceWith;ushort FindLen;ushort ReplaceLen;ptr CustData;ptr pHook;ptr") $tFindBuffer = DllStructCreate("char[256]") $tReplaceBuffer = DllStructCreate("char[256]") DllStructSetData($tFINDREPLACE, 1, DllStructGetSize($tFINDREPLACE)) DllStructSetData($tFINDREPLACE, "hOwner", $hGui) DllStructSetData($tFINDREPLACE, "Flags", 0x101) ;FR_DOWN+FR_ENABLEHOOK DllStructSetData($tFINDREPLACE, "FindWhat", DllStructGetPtr($tFindBuffer)) DllStructSetData($tFINDREPLACE, "FindLen", 255) DllStructSetData($tFINDREPLACE, "ReplaceWith", DllStructGetPtr($tReplaceBuffer)) DllStructSetData($tFINDREPLACE, "ReplaceLen", 255) DllStructSetData($tFINDREPLACE, "pHook", DllCallbackGetPtr($hFR_hook)) GUISetState() While 1 Switch GUIGetMsg() Case -3 Exit Case $cBtn1 $hFind = FindTextCreate() Case $cBtn2 $hReplace = ReplaceTextCreate() EndSwitch WEnd Func FRMsg($hWnd, $Msg, $wParam, $lParam) ; $lParam = pointer to $tFINDREPLACE struct, but if we have the struct as global, we don't need it. Local $iFlags = DllStructGetData($tFINDREPLACE, "Flags") If BitAND($iFlags, $FR_FINDNEXT) Then ;If BitAND($iFlags, $FR_DOWN) Then $iDirection = 1 ;If BitAND($iFlags, $FR_MATCHCASE) Then $bMatchCase = 1 ;If BitAND($iFlags, $FR_WHOLEWORD) Then $bWholeWord = True ;$sFindWhat = DllStructGetData($tFindBuffer, 1) TextFind() ElseIf BitAND($iFlags, $FR_REPLACE) Then TextReplace() ElseIf BitAND($iFlags, $FR_REPLACEALL) Then TextReplaceAll() EndIf EndFunc Func FRHookProc($hWnd, $Msg, $wParam, $lParam) Switch $Msg Case $WM_INITDIALOG Return 1 Case Else ;ConsoleWrite('FRHookProc MSG=' & Hex($Msg) & ' wparam=' & Hex($wParam) & ' lparam=' & Hex($lParam) & @CRLF) EndSwitch EndFunc Func FindTextCreate() Local $aRet = DllCall('comdlg32.dll', 'hwnd', 'FindText', 'ptr', DllStructGetPtr($tFINDREPLACE)) If $aRet[0] <> 0 Then Return $aRet[0] $aRet = DllCall('comdlg32.dll', 'int', 'CommDlgExtendedError') Return SetError($aRet[0],0,0) EndFunc Func ReplaceTextCreate() Local $aRet = DllCall('comdlg32.dll', 'hwnd', 'ReplaceText', 'ptr', DllStructGetPtr($tFINDREPLACE)) If $aRet[0] <> 0 Then Return $aRet[0] $aRet = DllCall('comdlg32.dll', 'int', 'CommDlgExtendedError') Return SetError($aRet[0],0,0) EndFunc Func RegisterWindowMessage($sText) Local $aRet = DllCall('user32.dll', 'int', 'RegisterWindowMessage', 'str', $sText) ConsoleWrite('RegisterWindowMessage ' & $aRet[0] & @CRLF) Return $aRet[0] EndFunc Func TextFind() ConsoleWrite('TextFind' & @CRLF) EndFunc Func TextReplace() ConsoleWrite('TextReplace' & @CRLF) EndFunc Func TextReplaceAll() ConsoleWrite('TextReplaceAll' & @CRLF) EndFunc All the FR_HookProc via DllCallback stuff isn't mandatory, included just to show. Have fun writing all the actual find/replace code. Edited January 16, 2008 by Siao "be smart, drink your wine"
Moderators big_daddy Posted January 16, 2008 Author Moderators Posted January 16, 2008 Outstanding! Thank you. Here is what I've stripped it down to for my needs. expandcollapse popup#include <GuiEdit.au3> Const $FR_DOWN = 0x1 Const $FR_MATCHCASE = 0x4 Const $FR_FINDNEXT = 0x8 Const $FR_HIDEWHOLEWORD = 0x10000 $hGui = GUICreate("Find/Replace Test", 300, 300) $cEdit = GUICtrlCreateEdit("abcdef", 0, 0, 300, 280) $cBtn1 = GUICtrlCreateButton("Find...", 40, 280, 100, 20) GUIRegisterMsg(RegisterWindowMessage("commdlg_FindReplace"), "FR_MSG") $tFINDREPLACE = DllStructCreate("dword;hwnd hOwner;hwnd hInstance;dword Flags;" & _ "ptr FindWhat;ptr ReplaceWith;ushort FindLen;ushort ReplaceLen;ptr CustData;ptr pHook;ptr") $tFindBuffer = DllStructCreate("char[256]") $tReplaceBuffer = DllStructCreate("char[256]") DllStructSetData($tFINDREPLACE, 1, DllStructGetSize($tFINDREPLACE)) DllStructSetData($tFINDREPLACE, "hOwner", $hGui) DllStructSetData($tFINDREPLACE, "Flags", BitOR($FR_DOWN, $FR_HIDEWHOLEWORD)) DllStructSetData($tFINDREPLACE, "FindWhat", DllStructGetPtr($tFindBuffer)) DllStructSetData($tFINDREPLACE, "FindLen", 255) DllStructSetData($tFINDREPLACE, "ReplaceWith", DllStructGetPtr($tReplaceBuffer)) DllStructSetData($tFINDREPLACE, "ReplaceLen", 255) GUISetState() While 1 Switch GUIGetMsg() Case - 3 Exit Case $cBtn1 $hFind = FindTextCreate() EndSwitch WEnd Func FR_MSG($hWnd, $Msg, $wParam, $lParam) ; $lParam = pointer to $tFINDREPLACE struct, but if we have the struct as global, we don't need it. Local $iDirection = 0, $fMatchCase = False, $iFlags = DllStructGetData($tFINDREPLACE, "Flags") $sFindWhat = DllStructGetData($tFindBuffer, 1) If BitAND($iFlags, $FR_FINDNEXT) Then If BitAND($iFlags, $FR_DOWN) Then $iDirection = 1 If BitAND($iFlags, $FR_MATCHCASE) Then $fMatchCase = True ;If BitAND($iFlags, $FR_WHOLEWORD) Then $bWholeWord = True ConsoleWrite("Find: " & $sFindWhat & @CR) ConsoleWrite("Direction: " & $iDirection & @CR) ConsoleWrite("Match Case: " & $fMatchCase & @CR) EndIf EndFunc ;==>FR_MSG Func FindTextCreate() Local $aRet = DllCall('comdlg32.dll', 'hwnd', 'FindText', 'ptr', DllStructGetPtr($tFINDREPLACE)) If $aRet[0] <> 0 Then Return $aRet[0] $aRet = DllCall('comdlg32.dll', 'int', 'CommDlgExtendedError') Return SetError($aRet[0], 0, 0) EndFunc ;==>FindTextCreate Func RegisterWindowMessage($sText) Local $aRet = DllCall('user32.dll', 'int', 'RegisterWindowMessage', 'str', $sText) Return $aRet[0] EndFunc ;==>RegisterWindowMessage
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