[.NET] Focus on vorig window

Pagina: 1
Acties:

Onderwerpen


Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
Hallo,

Ik ben een applicatie aan het schrijven die keystrokes send naar een 'andere' applicatie. Wat ik nu wil is dat de focus wordt gebracht op het 'vorige active window' (zegmaar de alt shift tab). Ik ben al enige tijd bezig met rond kijken, maar kan er niet helemaal uitkomen.

Is hier misschien een standaard functie voor in .NET (ik gebruik VB.NET), of moet ik een API aanroepen?

Ik heb gekeken naar de GetAltTabInfo Function, maar weet niet precies hoe ik dit moet gebruiken in mijn context.

Iemand een idee?

Acties:
  • 0 Henk 'm!

  • Niemand_Anders
  • Registratie: Juli 2006
  • Laatst online: 09-07-2024

Niemand_Anders

Dat was ik niet..

Google keyword: 'DllImport'. Er zijn honderden zo niet duizenden artikelen hoe je Win32 API calls moet gebruiken in vb.net/C#. De meeste artikelen bevatten ook tips hun je C structures en enumeraties moet intepreteren zodat je ze beschikbaar kunt maken voor je eigen code.

If it isn't broken, fix it until it is..


Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
Thanks. Maar weet je of AltTabFunction de goede functie is die ik moet gebruiken om de focus terug the brengen naar de last active window.

Acties:
  • 0 Henk 'm!

  • whoami
  • Registratie: December 2000
  • Laatst online: 23:33
Uit de info die ik in de MSDn vind over deze API functie, maak ik uit dat deze method niet is wat je zoekt:
GetAltTabInfo Function

The GetAltTabInfo function retrieves status information for the specified window if it is the application-switching (ALT+TAB) window.

Syntax

BOOL GetAltTabInfo(
HWND hwnd,
int iItem,
PALTTABINFO pati,
LPTSTR pszItemText,
UINT cchItemText
);

Parameters

hwnd
[in] Handle to the window for which status information will be retrieved. This window must be the application-switching window.
iItem
[in] Specifies the index of the icon in the application-switching window. If the pszItemText parameter is not NULL, the name of the item is copied to the pszItemText string. If this parameter is –1, the name of the item is not copied.
pati
[out] Pointer to an ALTTABINFO structure to receive the status information. Note that you must set ALTTABINFO.csSize to sizeof(ALTTABINFO) before calling this function.
pszItemText
[out] Pointer to a string that receives the name of the item. If this parameter is NULL, the name of the item is not copied.
cchItemText
[in] Specifies the size, in TCHARs, of the pszItemText buffer.
Ik denk dat je op zoek bent naar GetNextWindow

[ Voor 4% gewijzigd door whoami op 17-03-2008 10:29 ]

https://fgheysels.github.io/


Acties:
  • 0 Henk 'm!

  • RobIII
  • Registratie: December 2001
  • Niet online

RobIII

Admin Devschuur®

^ Romeinse Ⅲ ja!

(overleden)
Verwijderd schreef op maandag 17 maart 2008 @ 10:10:
Hallo,

Ik ben een applicatie aan het schrijven die keystrokes send naar een 'andere' applicatie. Wat ik nu wil is dat de focus wordt gebracht op het 'vorige active window' (zegmaar de alt shift tab).
Here's an idea: begin met alt-shift-tab te sturen ;)
Als je toch al aan de gang gaat met enge ranzige sendkeys dan kan dit er ook nog wel bij.

[ Voor 11% gewijzigd door RobIII op 17-03-2008 10:29 ]

There are only two hard problems in distributed systems: 2. Exactly-once delivery 1. Guaranteed order of messages 2. Exactly-once delivery.

Je eigen tweaker.me redirect

Over mij


Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
Oke heb het gedeeltelijk voor elkaar:

Ik krijg alleen niet de GetNextWindow niet goed. iemand een idee?
code:
1
2
3
4
5
6
7
8
9
10
        Dim i As Integer = GetTopWindow(0)    'Initialize

        Dim theHandle As IntPtr
        theHandle = GetNextWindow(i, 2) <- Werk niet
        theHandle = FindWindow(Nothing, "Untitled - Notepad") <- Werkt
        If theHandle <> IntPtr.Zero Then
            SetForegroundWindow(theHandle)
            ShowWindow(theHandle, 9)
            'rest of code here
        End If


Wat is er precies ranzing aan de SendKeys functie? Bedoel het SendKeys, en dat is alles wat ie moet doen ? :)

Acties:
  • 0 Henk 'm!

  • TeeDee
  • Registratie: Februari 2001
  • Laatst online: 23:16

TeeDee

CQB 241

Wat gaat niet goed?
Wat heeft i als waarde?

het zou wel eens zo kunnen zijn dat i null is.

[ Voor 51% gewijzigd door TeeDee op 17-03-2008 14:26 ]

Heart..pumps blood.Has nothing to do with emotion! Bored


Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
Hij brengt de vorige applicatie niet naar voren...

Hoe ik het test is als volgt: Ik compile en start de applicatie, breng een ander window als front. Ga terug naar de applicatie die ik net heb gecompiled. En click op een knop om te kijken of hij de vorige applicatie weer naar voren brengt. Dit gebeurt helaas niet.

- Als ik FindWindow(Nothing, "Untitled - Notepad") gebruik, komt die applicatie wel naar voren dus aan dit stukje code lig het niet:
code:
1
2
SetForegroundWindow(theHandle)
ShowWindow(theHandle, 9)

- Als ik debug zie ik wel dat ie terug komt met een waarde. Is er misschien een manier om te kijken welk window bij die waarde hoort? misschien dat ik zo er achter kan komen wat er fout gaat.

Acties:
  • 0 Henk 'm!

  • RobIII
  • Registratie: December 2001
  • Niet online

RobIII

Admin Devschuur®

^ Romeinse Ⅲ ja!

(overleden)
Verwijderd schreef op maandag 17 maart 2008 @ 14:01:
Wat is er precies ranzing aan de SendKeys functie? Bedoel het SendKeys, en dat is alles wat ie moet doen ? :)
Als je iets probeert te 'automatiseren' met sendkeys, vraag je dan eens af wat er gebeurt als:

• er tijdens dat je applicatie bezig is, een ander window de focus krijgt (danwel door de gebruiker danwel door een modal dialog ofzo ("windows update moet opnieuw opstarten blabla" bijvoorbeeld)
• de gebruiker (al dan niet per-ongeluk) een toets aanraakt tijdens je proces
• de verkeerde applicatie (om welke reden dan ook) de focus heeft gekregen
• de applicatie sluit onverwacht
etc.

There are only two hard problems in distributed systems: 2. Exactly-once delivery 1. Guaranteed order of messages 2. Exactly-once delivery.

Je eigen tweaker.me redirect

Over mij


Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
Oke, tsja in dat opzicht is het misschien niet echt efficient. Het enige wat er in mijn app moet gebeuren is dat er een template moet worden ingevuld.Ik ben er ook niet naar uit om zeg maar volledige processen te gaan automatiseren. Deze actie duurt max 1 a 2 seconden.

Iemand nog een idee over bovenstaand probleem?
Pagina: 1