you're spoiling me!

#COMPILE EXE #INCLUDE "win32api.inc" FUNCTION BrowseForFolderProc(BYVAL hwnd AS DWORD, BYVAL uMsg AS LONG, BYVAL lparam AS LONG, BYVAL pData AS LONG)AS LONG DIM zBuffer AS ASCIIZ * %MAX_PATH IF uMsg = %BFFM_INITIALIZED Then ' Browse For Folder Messages SendMessage hwnd, %BFFM_SETSELECTION, %TRUE, pData ' see BrowseCallbackProc Function in docs END IF END FUNCTION '------------------/ FUNCTION BrowseForFolder(hWndOwner AS LONG, sPrompt AS STRING, StartFolder AS String) AS STRING LOCAL BI AS BrowseInfo LOCAL pIDList AS LONG LOCAL szPath AS ASCIIZ * %MAX_PATH BI.hWndOwner = hWndOwner ' 0 = DeskTop BI.lpszTitle = STRPTR(sPrompt) BI.ulFlags = %BIF_RETURNONLYFSDIRS OR %BIF_NEWDIALOGSTYLE OR %BIF_RETURNFSANCESTORS OR %BIF_DONTGOBELOWDOMAIN BI.lpfnCallback = CODEPTR(BrowseForFolderProc) ' * callback function - so we can send messages to the browse dialog BI.lParam = Strptr(StartFolder) ' * pIDList = SHBrowseForFolder(BI) IF pIDList THEN SHGetPathFromIDList (BYVAL pIDList, szPath) FUNCTION = szPath CoTaskMemFree pIDList END IF END FUNCTION '------------------/ FUNCTION PBMAIN() AS LONG LOCAL sPath AS String sPath = BrowseForFolder(0, "Select folder...", CURDIR$) '"C:\Temp")' 'Replace CurDir$ with your StartFolder MessageBox 0, "sPath = " + sPath, "Folder Selected", %MB_ICONMASK END FUNCTION '------------------/
%GETFOLDER_START_ROOT = 0& %GETFOLDER_START_LAST = 1& %GETFOLDER_START_CURRENT = 2& ..... LOCAL bInf AS BROWSEINFO 'Set some properties of the folder dialog bInf.hWndOwner = hWndModal bInf.ulFlags = %BIF_RETURNONLYFSDIRS OR %BIF_DONTGOBELOWDOMAIN [b] bInf.lpfnCallback = CODEPTR (BrowseForFolderCallBack) ' to start the search in another place[/b] ' No callback to make sure this is working with new compiler and Win32API.INC ' bInf.lpfnCallback = %NULL bInf.lparam = StartFolder ' passed to callback as lparam each call FUNCTION BrowseForFolderCallBack (BYVAL hwnd AS LONG,BYVAL uMsg AS DWORD,BYVAL lparam AS LONG, BYVAL pdata AS LONG) EXPORT AS LONG ' my lparam=function's pdata=%GetFolder_Start_Current, %GETFOLDER_START_LAST, or %GETFOLDER_START_ROOT STATIC szStartFolder AS ASCIIZ * %MAX_PATH LOCAL szDummy AS ASCIIZ * %MAX_PATH SELECT CASE uMSG CASE %BFFM_INITIALIZED SELECT CASE pdata ' does lparam come BYVAL? Yes, in Pdata. ' CASE %GETFOLDER_START_ROOT ' do nothing... ' EXIT FUNCTION CASE %GETFOLDER_START_CURRENT szDummy = CURDIR$ SendMessage hWnd, %BFFM_SETSELECTIONA, %TRUE, BYVAL VARPTR(szDummy) CASE %GETFOLDER_START_LAST SendMessage hWnd, %BFFM_SETSELECTIONA, %TRUE, BYVAL VARPTR(szStartFolder) END SELECT ' We are getting BFFM_SELCHANGED TWICE BEFORE WE GET BFFM_INITIALIZED ' On these passes, szStartFolder is null, so we do not set szStartFolder CASE %BFFM_SELCHANGED ' we only change the szStartDir if the current option (pdata) is start_last ' I suppose we could do this under any cicumstances if we wanted... STDOUT "Got BGGM_SELCHANGED" IF pdata = %GETFOLDER_START_LAST THEN ' 6/07/02 It appears lparam, NOT PDATA is the pointer to the itemidlist! ' THAT IS CORRECT!! ERROR IN MSDN DOCUMENTATION!!! SHGetPathFromIDList BYVAL lparam, szDummy IF LEN(szDummy) THEN szStartFolder = szDummy END IF END IF END SELECT ' of which %BFFM_xxx messsage FUNCTION = 0 END FUNCTION
IF lMsg = %HCBT_ACTIVATE THEN UnhookWindowsHookEx hHook ...
#COMPILE EXE #INCLUDE "win32api.inc" FUNCTION BrowseForFolder(hWndOwner AS LONG, sPrompt AS STRING) AS STRING LOCAL BI AS BrowseInfo ' Contains parameters for the the SHBrowseForFolder function and ' receives information about the folder selected by the user LOCAL pIDList AS LONG LOCAL szPath AS ASCIIZ * %MAX_PATH BI.hWndOwner = hWndOwner ' 0 = DeskTop BI.lpszTitle = STRPTR(sPrompt) BI.ulFlags = %BIF_RETURNONLYFSDIRS ' try OR %BIF_DONTGOBELOWDOMAIN OR %BIF_USENEWUI OR %BIF_RETURNFSANCESTORS pIDList = SHBrowseForFolder(BI) ' Returns a pointer to an item identifier list (pIDL) - specifies ' the location of the selected folder relative to the root of the namespace. ' The 'Shell namespace' organizes the file system and other objects managed by the Shell into a single ' tree-structured hierarchy. Conceptually, it is a larger and more inclusive version of the file system. IF pIDList THEN ' If the user chooses the Cancel button, pIDList is NULL. SHGetPathFromIDList (BYVAL pIDList, szPath) ' Converts pIDL to a file system path. FUNCTION = szPath END IF CoTaskMemFree pIDList ' Calling application is responsible for freeing the returned Item Identifier List. END FUNCTION '------------------/ FUNCTION PBMAIN() AS LONG LOCAL sPath AS String sPath = BrowseForFolder(0, "Select folder...") MessageBox 0, "Folder = " + sPath, "Folder Selected", %MB_ICONMASK END FUNCTION '------------------/
hHook = SetWindowsHookEx ... Retval = MessageBox.... UnhookWindowsHookEx ...
#COMPILE EXE #REGISTER NONE #DIM ALL #INCLUDE "Win32Api.Inc" FUNCTION MsgBoxButtonText(BYVAL lMsg AS LONG, BYVAL wParam AS LONG, BYVAL lParam AS LONG) AS LONG ' TT Pierre. [URL]http://www.powerbasic.com/support/pbforums/showpost.php?p=87690&postcount=4[/URL] IF lMsg = %HCBT_ACTIVATE THEN SetWindowText GetDlgItem(wParam, 6), "Overwrite" SetWindowText GetDlgItem(wParam, 7), "Append" SetWindowText GetDlgItem(wParam, 2), "Abort" END IF 'in HCBT_ACTIVATE message, wParam holds the handle to the messagebox 'API sets ID's of the buttons on a message box. 'Values returned correspond to the IDs, '%IDOK = 1 '%IDCANCEL = 2 '%IDABORT = 3 '%IDRETRY = 4 '%IDIGNORE = 5 '%IDYES = 6 '%IDNO = 7 'etc ' MessageBox with flag %MB_YESNOCANCEL creates buttons with IDs = 6, 7, 2 END FUNCTION '------------------/ FUNCTION PBMAIN() Local hHook As Dword, RetVal As Long hHook = SetWindowsHookEx(%WH_CBT, CODEPTR(MsgBoxButtonText), GetModuleHandle(""), GetCurrentThreadId) Retval = MessageBox(0, "Yes, No or Cancel ??", "Renamed Buttons!", %MB_ICONQUESTION OR %MB_YESNOCANCEL OR %MB_TASKMODAL) UnhookWindowsHookEx hHook MessageBox 0, "Selected:" + str$(RetVal) + $CR + $CR + _ "6 = 'Overwrite' (aka Yes)" + $CR + _ "7 = 'Append' (aka No)" + $CR + _ "2 = 'Abort' (aka Cancel)", "Returned value", %MB_ICONMASK END FUNCTION '------------------/
#IF %DEF(%PB_CC32) #IF NOT %DEF(%WINAPI) DECLARE FUNCTION MessageBox LIB "USER32.DLL" ALIAS "MessageBoxA" (BYVAL hWnd AS DWORD, lpText AS ASCIIZ, lpCaption AS ASCIIZ, BYVAL dwType AS DWORD) AS LONG %MB_OK = &H00000000& %MB_TASKMODAL = &H00002000& #ENDIF FUNCTION MSGBOX (szText AS ASCIIZ, OPTIONAL BYVAL STYLE AS DWORD, OPTIONAL szCaption AS ASCIIZ) AS LONG LOCAL hWnd AS LONG, uType AS LONG, dwCap AS DWORD uType = IIF& (STYLE=%NULL,%MB_OK OR %MB_TASKMODAL, STYLE) dwCap = VARPTR(szCaption) ' if null, Windows uses "Error" FUNCTION = MessageBox (BYVAL %NULL, szText, BYVAL dwCap, BYVAL uType) END FUNCTION #ENDIF ' if %DEF (%Pb_CC32)
' MessageBox() Flags %MB_OK = &H00000000& %MB_OKCANCEL = &H00000001& %MB_ABORTRETRYIGNORE = &H00000002& %MB_YESNOCANCEL = &H00000003& %MB_YESNO = &H00000004& %MB_RETRYCANCEL = &H00000005& %MB_CANCELTRYCONTINUE = &H00000006& %MB_ICONHAND = &H00000010& %MB_ICONQUESTION = &H00000020& %MB_ICONEXCLAMATION = &H00000030& %MB_ICONASTERISK = &H00000040& %MB_USERICON = &H00000080& %MB_ICONWARNING = %MB_ICONEXCLAMATION %MB_ICONERROR = %MB_ICONHAND %MB_ICONINFORMATION = %MB_ICONASTERISK %MB_ICONSTOP = %MB_ICONHAND %MB_DEFBUTTON1 = &H00000000& %MB_DEFBUTTON2 = &H00000100& %MB_DEFBUTTON3 = &H00000200& %MB_DEFBUTTON4 = &H00000300& %IDOK = 1 %IDCANCEL = 2 %IDABORT = 3 %IDRETRY = 4 %IDIGNORE = 5 %IDYES = 6 %IDNO = 7 %IDCLOSE = 8 %IDHELP = 9 %IDTRYAGAIN = 10 %IDCONTINUE = 11
We process personal data about users of our site, through the use of cookies and other technologies, to deliver our services, and to analyze site activity. For additional details, refer to our Privacy Policy.
By clicking "I AGREE" below, you agree to our Privacy Policy and our personal data processing and cookie practices as described therein. You also acknowledge that this forum may be hosted outside your country and you consent to the collection, storage, and processing of your data in the country where this forum is hosted.
Leave a comment: