C# Console krijgt focus niet terug

  • Onderwerp starter Onderwerp starter RB85
  • Startdatum Startdatum
Status
Niet open voor verdere reacties.

RB85

Gebruiker
Lid geworden
4 jun 2010
Berichten
55
Hallo allen,

Ik ben momenteel bezig met een klein automatiseringstooltje in C# welke een aantal gegevens in een excelfile zet. Hiervoor open ik excel en run ik hierop een macro vanuit een console applicatie. Dit alles werkt prima. Na de bewerkingen in de excelfile sla ik de file op en wil ik de focus terug brengen naar mijn console applicatie om de nieuwe input van de user af te kunnen vragen. Dit wil echter niet lukken. Ik maak momenteel gebruik van de volgende code om te focus te krijgen:

Code:
[DllImport("kernel32.dll", ExactSpelling = true)]
public static extern IntPtr GetConsoleWindow();

[DllImport("user32.dll")]
[return: MarshalAs(UnmanagedType.Bool)]
public static extern bool SetForegroundWindow(IntPtr hWnd);

In plaats van dat de console app focus krijgt, gaat hij enkel knipperen in de taakbalk.

Hoe kan ik er van zorgen dat de console weer volledige focus krijgt?

Overigens werkt het wel als de applicatie in debug mode draait, maar zodra ik de release versie start gaat het niet meer goed.
 
Laatst bewerkt:
waarom doe je excel niet gewoon op de achtergrond? dan verliest de console geen focus
 
Ik draai excel niet op de achtergrond omdat ik de gegevens nog even snel wil kunnen controleren voordat de applicatie deze verstuurd via email. Het zou in principe altijd goed moeten gaan maar dit wil ik wel zeker weten.
 
Je kunt proberen dat af te handelen in een aparte thread. na het sluiten van de thread zou je weer control moeten krijgen
 
Bedankt voor je reactie.

Het punt is dat ik excel niet tussentijds af wil sluiten. De afloop is op het moment als volgt:

- Ik download een formulier (excel) van het intranet.
- Vervolgens importeer ik een aantal gegevens vanuit een java applicatie.
- Deze informatie worden geïmporteerd in het formulier dat gedownload is van intranet.
- Het formulier wordt opgeslagen maar blijft geopend zodat ik de gegevens eventueel kan controleren.
- Op de console applicatie komt de vraag of het formulier automatisch verstuurd moet worden via mail. (Hier zit momenteel het probleem)
- Na antwoord van de gebruiker wordt excel afgesloten en eventueel verstuurd.

Het excel formulier mag dus pas afgesloten worden op het moment dat ik de input via de console gegeven heb. Het vreemde vind ik echter dat de code wel werkt zodra ik de applicatie draai via de debug functie in visual studio, maar niet meer zodra ik de release versie draai. Bij deze versie zie je wel dat de console de focus terug probeert te krijgen (knippert op de taakbalk) maar waarschijnlijk wordt dit tegen gehouden door windows omdat applicaties zich niet zomaar naar de voorgrond mogen dringen. Is er een mogelijkheid om dit te omzeilen?
 
Dat kan dus niet tenzij je excel in een async background thread zet. Met een foreground kan je cmd prompt geen focus krijgen totdat je child is afgelopen.
 
Dat is jammer. Dan zal ik toch maar handmatig moeten switchen denk ik. Is er ook geen mogelijkheid een Alt-Tab te sturen ofzo? Ik heb er een aantal voorbeelden van gevonden maar deze lijken allemaal voor windows forms applicaties te zijn en niet voor een console applicatie.
 
Status
Niet open voor verdere reacties.
Terug
Bovenaan Onderaan