2008-11-24 9 views
3

J'essaie d'utiliser ShellExecute pour ouvrir un fichier dans Excel. Je lisais sur la fonction sur les forums MSDN, et j'ai trouvé les informations suivantes sur le handle, qui est le premier paramètre:Handle pour ShellExecute() - Fenêtre parent?

"hwnd [en] Un handle à la fenêtre du propriétaire utilisé pour afficher une interface utilisateur (UI) ou des messages d'erreur Cette valeur peut être NULL si l'opération n'est pas associée à une fenêtre. "

J'ai également entendu cela appelé le handle de la fenêtre parente. Quelle est la fenêtre parent/propriétaire? Comme vous le voyez ci-dessous j'utilise NULL pour le handle, mais comme l'opération est en effet associée à une fenêtre, j'ai probablement besoin d'un handle, mais je ne sais pas quoi utiliser pour le handle.

ShellExecute(NULL, "open" ,"Excel.exe", 
    "C:\\Documents and Settings\\Lab1\\My Documents\\Test.xls", 
    NULL, SW_SHOWNORMAL); 
+0

Ajout de suggestions de citations. Dites-moi si l'une de ces combinaisons fonctionne. – VonC

+0

avez-vous essayé le double citation double? Il a en fait trois guillemets doubles: "" "au début et à la fin – VonC

+0

J'ai essayé avec trois guillemets doubles, et il dit toujours qu'il ne peut pas trouver le fichier – Shishiree

Répondre

2

Il est usually 0

hwnd: fenêtre parent qui recevra un possible messagebox. Ce paramètre est généralement 0.

Il fait référence à la fenêtre de niveau supérieur: la fenêtre que vous ouvrez n'a pas de parent et est la fenêtre principale de l'application en cours d'exécution.

Lorsque vous passez d'une application à une autre (ALT-TAB), vous affichez la fenêtre de niveau supérieur suivante (l'application suivante avec une poignée parent égale à 0) dans l'ordre z (par exemple).

Bien sûr, le parent à votre application can not be the Desktop Window itself:

Si vous créez une fenêtre enfant dont le parent est GetDesktopWindow(), la fenêtre est maintenant collé à la fenêtre du bureau. Si votre fenêtre appelle quelque chose comme MessageBox(), eh bien c'est un dialogue modal, puis les règles ci-dessus entrent en action et le bureau est désactivé et la machine est grillée.

Pour le chemin, je vous conseille des guillemets doubles autour de citations simples: " ' ... ' "

"'C:\\Documents and Settings\\Lab1\\My Documents\\Test.xls'" 

pourrait travailler aussi (non testé) avec double guillemets doubles: " "" ... "" "

"""C:\\Documents and Settings\\Lab1\\My Documents\\Test.xls""" 

, comme illustré par this thread.


En fait, comme mentionné dans your other question par Andy et par Mesidin, et ShellExecute Function manual, vous pouvez ouvrir le fichier, et passer son chemin dans le paramètre.

ShellExecute(NULL, "open", 
       "Test.xls", "C:\\Documents and Settings\\Lab1\\My Documents\\", 
       NULL, SW_SHOWNORMAL); 

Cela signifie qu'Excel est l'application par défaut pour l'ouverture des fichiers d'extension .xls.

+0

Merci, cela répond à ma question. Cependant, quand je compile la ligne que je montre ci-dessus, il ouvre Excel, mais il dit qu'il ne peut pas trouver le fichier "Test.xls" Avez-vous une idée pourquoi cela ne fonctionne pas? – Shishiree

+0

Est-ce que dir "C: \ Documents and Settings \ Lab1 \ Mes Documents \ Test.xls" – VonC

+0

Si c'est le cas, il doit être lié à tous les espaces de votre chemin, en ajoutant des guillemets simples entre guillemets "", ou le contraire ("" ... ""). espaces bien sûr: je les ai ajouté pour mieux voir les citations – VonC

2

Lorsque vous le voyez décrit comme le «handle de la fenêtre parente», cela signifie que sera la fenêtre parente de l'interface utilisateur que la fonction choisit d'afficher. Le descripteur que vous transmettez peut ou ne peut pas déjà être le parent d'une autre fenêtre au moment où vous appelez le ShellExecute, mais cela n'a pas d'importance.

0

Y a-t-il une raison spécifique pour laquelle vous utilisez ShellExecute?

Vous pouvez ouvrir un fichier xls en utilisant [System.Diagnostics.] Process.Start [nom du fichier]
Je suis désolé, je ne regarde pas les balises & supposent que vous utilisez .net

+0

J'utilise ShellExecute simplement parce que c'était la seule idée que j'avais. J'utilise Borland Builder C++ – Shishiree

+0

Ce n'est pas apparent, si vous regardez la question et les balises. Et c'est la raison, je l'ai dit - Je m'excuse .... – shahkalpesh

1

Pourquoi êtes-vous spécifiquement ShellExecuting Excel? S'ils ont OpenOffice.org, ils sont cassés - vous devriez vraiment invoquer le verbe "Ouvrir" sur le fichier de feuille de calcul, vous n'avez pas besoin de coder en dur dans le nom "Excel", c'est ce que ShellExecute est pour.

+0

Lorsque j'appelle le verbe "ouvert" sur le fichier de feuille de calcul, rien ne se passe - en fait, Excel ne s'ouvre même pas. Mais peut-être que c'est à cause des espaces dans le chemin, comme l'a souligné VonC, avec le fil qu'il a lié. – Shishiree

Questions connexes