Comment puis-je utiliser la boîte de dialogue Enregistrer sous de VBScript?
J'aimerais avoir mon VBScript afficher les Fenêtres boîte de dialogue Enregistrer sous, mais je ne pouvais pas trouver comment le faire.
L'aide de ce code:
Dim sfd
Set sfd = CreateObject("UserAccounts.CommonDialog")
sfd.ShowOpen
Je peux Ouvrir une boîte de dialogue, mais il n'y a pas de ShowSave
méthode de cet objet (comme il semble y avoir pour un même objet dans Visual Basic non script).
J'ai cherché sur StackOverflow et cherché sur google "[vbscript] de la boîte de dialogue enregistrer" (et avec "Windows Script Host"), mais je n'ai trouvé threads sur l'accès aux boîtes de dialogue courantes à partir de pages web et une solution pour le BrowseForFolder
dialogue et vraiment rien à propos de l'appel de la boîte de dialogue Enregistrer.
En fait, je peux utiliser la boîte de dialogue Ouvrir pour mon but, parce que tout ce que je besoin est un nom de fichier... mais comme je tiens à enregistrer quelque chose pour le chemin d'accès sélectionné, un "Enregistrer sous" dans la barre de titre de la boîte de dialogue serait plus approprié.
source d'informationauteur JayK
Vous devez vous connecter pour publier un commentaire.
Je peux définitivement dire qu'il n'y a pas de solution pour afficher une boîte de dialogue Enregistrer à partir de VBScript sous d'autres versions de Windows de XP sans compter sur certains des dépendances externes que vous devez installer et enregistrer vous-même. À part bien évidemment cela provoque des interférences avec ce qui concerne à un simple glisser-déposer et de déploiement de votre script, il apporte aussi une foule d'autres questions liées à la sécurité et des autorisations, en particulier par le passage de contrôle de compte d'utilisateur sur l'ordinateur du client pour installer et enregistrer une dépendance DLL.
Les solutions qui ont été proposées jusqu'à présent s'appuyer soit sur un fichier DLL qui se trouve juste à être inclus avec Windows XP, l'invocation de la boîte de dialogue Enregistrer sous de Windows XP Comptes d'Utilisateurs du panneau de contrôle, et/ou l'installation d'un logiciel uniquement pour elle de laisser derrière les
MSComDlg
DLL après la désinstallation que vous pouvez ensuite utiliser à partir d'un script VBScript. Aucune de ces solutions vraiment satisfaire les exigences ci-dessus, et aucune des réponses a même considéré que la sécurité possible obstacles qui pourraient survenir avec les solutions proposées, comme je l'ai mentionné ci-dessus.Et puisque vous ne pouvez pas effectuer des appels directement à l'API de Windows (qui jamais comporte juste comme un dialogue Enregistrer sous) à partir de VBScript (pas seulement parce qu'il pose un risque pour la sécurité, mais aussi en raison de VBScript est lâche [manque de?] la frappe), c'est à peu près les feuilles de tous ceux qui veulent le faire dehors dans le froid. Ainsi, l'incapacité à faire des appels d'API oppose également à l'utilisation de tous les hacks comme appeler
SetWindowText
de changer la légende de la boîte de dialogue Ouvrir, comme il est suggéré dans la question.Je me rends compte que ce n'est pas la réponse tout le monde avait le désir. Il n'est même pas la réponse que je voulais. Mais hélas, c'est la bonne réponse.
Cela étant dit, voici quelques solutions possibles:
Si vous vous penchez vers l'acceptation d'une de la déjà corrigé, vous avez déjà décidé d'introduire une dépendance externe sur un fichier DLL à votre VBScript déploiement. Une fois que vous avez fait le saut, pourquoi s'embêter avec un "emprunt" ou encore le détournement d'une DLL à partir d'une autre source? Juste faire une fois que vous-même. Il est trivial pour envelopper le natif de dialogue commune fonctions fournies par l'API Windows dans une DLL ActiveX à l'aide de Visual Basic 6, qui peut ensuite être appelé par votre VBScript. Les risques sont minimes, étant donné que presque toutes les versions modernes de Windows qui peuvent être attendus d'avoir déjà le Visual Basic runtime est installé, et depuis que vous avez sans doute déjà savoir VBScript, frapper hors de code en VB 6 ne devrait pas être très difficile. Vous pouvez comprendre ce que la fonctionnalité de personnalisation que vous souhaitez, et plus important encore, vous serez en contrôle. Vous n'aurez pas à vous soucier d'autres de l'application des programmes de désinstallation retrait de la DLL que votre script, vous n'aurez pas à futz avec l'installation et la désinstallation de certains aléatoire, obsolète application, et vous n'aurez pas à croiser les doigts et espérer. Nous savons, en tant que programmeurs, qui n'est jamais une bonne option.
Et oui, je recommande effectivement emballage de la boîte de dialogue commune fonctions exposées par l'API Windows, plutôt que de compter sur la boîte de dialogue commune OCX (
comdlg32.ocx
) fourni par Visual Basic. Il a sa part de problèmes dans Windows 7, et il ne va pas à vous procurer le magnifique nouveau les dialogues que les versions ultérieures de Windows fournissent maintenant. Un excellent article expliquant tout ce que vous devez savoir à propos de l'Ouvrir et Enregistrer la boîte de Dialogue Commune Api et comment les utiliser en VB 6 est disponible ici sur VBnet. Bien sûr, si vous voulez vraiment y aller à fond, il y a beaucoup de choses intéressantes que vous pouvez faire avec des boîtes de dialogue communes, toutes documentées (avec code!) ici sur VB Accélérateur.Mais maintenant que je vous ai tous convaincus d'écrire une DLL ActiveX dans visual basic 6 qui encapsule la boîte de dialogue commune de la fonctionnalité à utiliser dans votre VBScript, je me pose la question: Pourquoi s'arrêter là? Une fois que vous avez fait le saut à l'écriture certains code en VB 6, pourquoi ne pas aller tous de votre code en VB 6? Bien sûr, c'est une "mort" de la langue et tout, mais ce n'est pas comme VBScript est terriblement actif. Comme je l'ai mentionné avant, la différence dans la syntaxe est quasiment nul, et la courbe d'apprentissage d'un VBScript développeur qui est aussi peu profond que l'on pourrait s'attendre. De Plus, vous bénéficiez de tous les avantages d'une pleine IDE, le typage statique, (un peu) meilleure gestion des erreurs, bla bla bla. Oh yeah, et être en mesure de faire des appels directs aux fonctions de l'API Windows. Le seul avantage réel pour VBScript est son ubiquité, mais il a été anscar vous pourriez trouver un ordinateur sans le visual basic runtime est installé. Pour ne pas mentionner, si vous écrivez une application qui requiert des boîtes de dialogue communes, vous êtes probablement s'engager dans une dialogue avec vos utilisateurs: Les formes de la capacité de la pleine VB pourrait commencer à venir dans maniable à ce point. Mais peut-être le plus grand et le plus important avantage de choisir d'aller dans cette voie, c'est que vous éliminer tout besoin de s'inscrire (ou l'inclure) externe "satellite" DLL d'un simple VB 6 application fonctionnera avec seulement l'exécutable sur n'importe quel ordinateur qui a le visual basic runtime est installé, qui est inclus au moins jusqu'par le biais de Windows 7.
Et enfin, dans le cas où vous êtes toutes sortes de excité à propos des humbles de VBScript pour le plein de fonctionnalités de visual basic 6, je me sens obligé de jeter une autre clé dans l'équation: Pourquoi ne pas aller tout le chemin jusqu'à un langage comme VB.NET? Encore une fois, il y a toutes sortes de nouvelles fonctionnalités offertes dans les VB.NET grâce à l' .NET Framework, mais il ne devrait pas prendre plus de quelques semaines pour une vie décente VB/VBScript développeur de commencer à se sentir à l'aise pour écrire des applications dans VB.NET. Ils ne sera probablement pas avoir une compréhension complète de l' .NET Framework, et ils ont certainement ne pas avoir développé une bonne conception orientée objet des pratiques, mais au moins ils seront en mouvement dans la bonne direction. Presque tout ce que vous pouvez faire en VBScript (ou même VB 6), vous pouvez le faire dans VB.NET. Et généralement, il faut moins de bruit qu'avant, grâce à l'immense fonctionnalités exposées par l' .NET Framework. L'inconvénient, bien sûr, est que votre application nécessite désormais la .NET Framework être installé sur l'ordinateur de l'utilisateur, ce qui n'est pas aussi omniprésent que le VB 6 au moment de l'exécution (même si c'est beaucoup plus fréquent maintenant, que même il y a quelques années).
Donc, je vous entends dire ceux qui n'étaient pas les solutions de contournement que vous espériez entendre? Ouais, moi non plus. Je ne suis pas le gars qui dit aux gens de tout laisser tomber et d'apprendre une nouvelle langue. Si VBScript continue à travailler pour vous, aller pour elle. Mais si vous êtes à un point où vous commencez à souche à ses limites, il est probablement temps de faire le saut.
Le secret à l'aide de la boîte de dialogue commune à partir de VBScript (ou VBA ou JScript, d'ailleurs), c'est que vous avez d'avoir sa licence installée sur votre machine. Certains outils de développement tels que Visual Basic 6, permet d'installer la licence, mais il est également installé par le service gratuit de Microsoft HTML Help Éditeur (ce qui est un assez vieux app). La chose intéressante est que si vous installez et désinstallez le code HTML de l'Aide de l'Éditeur, il quitte la boîte de Dialogue Commune de Licence en place. Pour cette raison, je considère que la licence sera disponible gratuitement et ne sera donc inclure l'entrée de registre il crée ici dans ma réponse:
Dans
HKLM\Software\CLASSES\Licenses\4D553650-6ABE-11cf-8ADB-00AA00C00905
définir la(Default)
entrée àgfjmrfkfifkmkfffrlmmgmhmnlulkmfmqkqj
.Une fois en place, vous pouvez créer ces boîtes de dialogue dans un VBScript l'aide de code comme ceci:
Pour lancer un enregistrement de fichier boîte de dialogue, utilisez la méthode ShowSave comme dans ce code:
Bien sûr, cet objet a un tas d'autres méthodes et propriétés, et vous aurez probablement souhaitez configurer les propriétés appropriées avant de lancer la boîte de dialogue. Par exemple, vous pouvez définir le fichier de filtre de sorte que seules certaines des extensions de fichier sont affichés dans la boîte de dialogue. Il y a une belle référence à la commande sur le site MSDN ici: http://msdn.microsoft.com/en-us/library/aa259661%28v=vs.60%29.aspx.
Espère que cette aide. Laissez-moi savoir si vous avez des questions.
Si vous avez un certain degré de contrôle sur les systèmes sur lesquels vous serez le déploiement de ce, et peut être raisonnablement certain qu'ils ont Visual Studio ou Microsoft HTML Help installé, vous pouvez utiliser le code suivant:
Aussi, l'adaptation de l'une des autres réponses à cette question dans le code VBScript (merci @oddacorn!), vous devez ajouter cette fonction si vous ne sont pas raisonnablement certain que vos utilisateurs auront VS ou de l'Aide HTML. Appelez cette fonction au démarrage du programme. Ne vous inquiétez pas si vous avez déjà la clé; dans ce cas, cela n'a aucun effet. Cela doit fonctionner sur un compte d'utilisateur standard sans droits d'administrateur.
Remarque que j'ai adapté le filedialog fonction de l' "Afficher la Source" du code VBScript dans le code HTML ici; sur les navigateurs web modernes, il semble que le code HTML qu'ils utilisent pour rendre les exemples de code ne s'affiche pas correctement (testé sur IE 8 et Chrome). Mais, heureusement, le code est toujours là, dans la Vue Source.
J'ai trouvé une chose qui a été critique à faire ce travail sur Windows 7 (SP1, entièrement patché); vous doit ensemble
dialog.MaxFileSize = 256
ou vous obtiendrez une erreur d'exécution.Qui est, à la suite de code ne fonctionne pas sur Windows 7 SP1, mais fonctionne probablement sur d'anciennes versions de Windows:
Sur
http://blogs.msdn.com/b/gstemp/archive/2004/02/18/75600.aspx
il y a un moyen comme décrit comment afficher une boîte de dialogue Enregistrer sous à partir de VBScript.
Note que, selon
http://www.eggheadcafe.com/software/aspnet/29155097/safrcfiledlg-has-been-deprecated-by-microsoft.aspx
SAFRCFileDlg a été abandonné par Microsoft.
Je viens de faire un shell, lié à un site web asp, fait le site web de lire une directionnelles étiquette - qui, j'ai chargé le fichier de localisation, et la page asp ouvre la boîte de dialogue de fichier immédiate à l'intérieur que de l'emplacement du fichier, dont le nom est également spécifié par le biais de balises directionnelles. Une fois enregistré, le shell disparaît.
Si c'est une limitation du site direcitonal tags ie (blah.com/temp.aspx?x=0&y=2&z=3)
stocker les informations dans une SQL db, ou des fichiers plats, il y a une tonne de solutions de contournement, mais voici ce qui est dit est vrai. VBS ne sera pas coupé en interne.
Après avoir regardé pour les âges, j'ai trouvé jsShell - Shell Composant à jsware.net. Le fichier zip contient
jsShell.dll
176 koun vbscript pour enregistrer la dll fondamentalementregsvr32.exe jsShell.dll
démonstration de scripts et de documentation claire.La DLL fonctionne bien sous Windows 7 et fournit plusieurs méthodes utiles, y compris le dialogue Ouvrir et Enregistrer:
Quand aucun fichier n'est sélectionné,
sFileName
est une chaîne vide.