Minimaliseren van window met code

Status
Niet open voor verdere reacties.

sander the man

Gebruiker
Lid geworden
7 jun 2007
Berichten
94
bestaat er een code om het window the minimaliseren naar de taakbalk?

en ik heb nog een vraagje.... :P
ik gebruik deze code voor een dll en is van een example:

Code:
export double /*returns a number */ __MB(char* text,char*caption)
{
      MessageBox(NULL,caption,text,MB_OK | MB_ICONINFORMATION);
      return 0;
}
 
Laatst bewerkt:
Window minimaliseren kan met de ShowWindow functie

ShowWindow(hwnd,SW_MINIMIZE);


En wat is deze vraag?
die heb ik ook al gezien alleen het probleem is dat het geen win32 applicatie is maar een dll..... dus showwindow werkt daar niet op..... en m`n anderen vraag daar ben ik zelf al achter gekomen :P
 
Welk window wil je dan minimaliseren?
ShowWindow werkt overigens ook in een dll.
Hoe heb je ShowWindow geprobeerd te gebruiken?
 
Welk window wil je dan minimaliseren?
ShowWindow werkt overigens ook in een dll.
Hoe heb je ShowWindow geprobeerd te gebruiken?
ik wil het venster minimaliseren die de dll gebruik en de juiste functie in de dll oproept....

maar als ik bijv. ShowWindow(SW_MINIMIZE); doe dan krijg ik de hele tijd zo een error van:

invalid conversion from `int' to `HWND__*'
en
too few arguments to function `BOOL ShowWindow(HWND__*, int)'
 
Je zal eerst een hendel van de window moeten hebben
om te minimaliseren.

ShowWindow heeft twee parameters waarvan de eerste dus van het type HWND is en de tweede een int die bijvoorbeeld de waarde SW_MINIMIZE heeft.

Als je bijv de tekst van de window weet of de klasse dan kan je met FindWindow de HWND achterhalen.

Hiermee wordt een window met de tekst "hallo" geminimaliseerd.
Code:
HWND h;
h = FindWindow(NULL,"Hallo");
ShowWindow(h, SW_MINIMIZE);
 
Je zal eerst een hendel van de window moeten hebben
om te minimaliseren.

ShowWindow heeft twee parameters waarvan de eerste dus van het type HWND is en de tweede een int die bijvoorbeeld de waarde SW_MINIMIZE heeft.

Als je bijv de tekst van de window weet of de klasse dan kan je met FindWindow de HWND achterhalen.

Hiermee wordt een window met de tekst "hallo" geminimaliseerd.
Code:
HWND h;
h = FindWindow(NULL,"Hallo");
ShowWindow(h, SW_MINIMIZE);

een window met als caption hallo?
en is het mogelijk om het huidige venser waar de dll gebruikt wordt een caption te geven? of.....
 
Weet je ook hoe het venster in de dll gemaakt wordt?
(De sourcecode daarvan)
Een venster een tekst geven kan wel maar daar heb je nou net die HWND voor nodig. Tenzij je het venster zelf maakt met bijv. CreateWindow.

Nog een paar tips, kijk eens naar de functies GetActiveWindow en GetForegroundWindow en GetFocus. Of kijk of je de vensterklasse kan achterhalen, dan kan je FindWindow gebruiken.
 
Weet je ook hoe het venster in de dll gemaakt wordt?
(De sourcecode daarvan)
Een venster een tekst geven kan wel maar daar heb je nou net die HWND voor nodig. Tenzij je het venster zelf maakt met bijv. CreateWindow.

Nog een paar tips, kijk eens naar de functies GetActiveWindow en GetForegroundWindow en GetFocus. Of kijk of je de vensterklasse kan achterhalen, dan kan je FindWindow gebruiken.

het programma waarvoor de dll gemaakt wordt is gemaakt in delphi en ik kan niet zommaar de source bekijken..... en heb ff gezogt naar GetActiveWindow maar dan kom ik op allemaal visual C++ dingen uit (ik heb dev C++) en GetForegroundWindow hetzelfde..... maar ik weet dat het mogelijk is..... maar hoe? er bestaat ook al een dll hiervoor die gebruikt denk ik dezelfde manier.... ik zal hem ff vragen.

edit: ik weet nu dat ik wel achter de window_handle van het programma kan komen kan ik daar wat mee?
 
Laatst bewerkt:
De volgende code geeft een opsomming van alle top-level windows. Misschien kan je er wat mee...
Code:
#define WIN32_MEAN_AND_LEAN
#include <windows.h>


void
PrintWindowInfo(HWND h)
{
 char s[256];
 RECT rc;

 printf("hwnd = %d \n",h);
 if(h)
 {
    GetWindowText(h,s,80);printf("windowtekst:%s\n",s);
    GetClassName (h,s,80);printf("windowclass:%s\n",s);
    GetWindowRect(h,&rc) ;printf("Grootte: %d x %d  %d %d\n",
    rc.right-rc.left,rc.bottom-rc.top,rc.left,rc.top);
 }
 puts("");
}

main()
{
 HWND h;

 h=0;
 do
 {
    h=FindWindowEx(NULL,h,NULL,NULL);
    if(h)PrintWindowInfo(h);
 }
 while(h);
}
 
ik snap `m niet echt..... maar volgens mij is window handle eigenlijk de HWND van de window..... maar als ik deze code gebruik:

Code:
#include "dll.h"
#include <windows.h>

export double /*returns a number */ __MB(HWND i)
{      
ShowWindow(i, SW_MINIMIZE);
return 0;
}

doet hij helemaal niks.....
 
volgens mij is window handle eigenlijk de HWND van de window.....
Ja dat klopt.

Ik zal later wel even een voorbeeldje van ShowWindow en FindWindow posten (als de vraag dan nog niet opgelost is) zodat je een idee krijgt hoe de HWND te zoeken en te gebruiken.

In jouw code moet je dus __MB() met de juiste HWND aanroepen.
 
ja zo iets....

dus ik stuur de window handle naar de dll en dat is het eerste argument die __MB opvangt.... een voorbeeldje zou wel handig zijn ja :thumb: :D

ben er achter dat ik de HWND waarde alleen kan ontvangen met double.... maar hoe zorg ik ervoor dat de hwnd waarde de waarde van de double wordt? dus ik weet de hwnd waarde die verstuur ik als double naar de dll en die dll moet dan van die double weer een hwnd van maken hoe doe ik dat?

dubbele edit!
het is opgelost!

met deze code:

#include "dll.h"
#include <windows.h>
export double /*returns a number */ __MB(double i)
{
ShowWindow((HWND)(int)i, SW_MINIMIZE);
return 0;
}


in iedergeval bedankt!

heb btw nog een vraagje.... ik gebruik nu SW_MINIMIZE maar dan wordt het window in de linker onderhoek geminimaliseerd maar hij gaat niet naar de taakbalk en hij is nog actief wat ik niet wil.... ik wil gewoon net zoals je bij internet op het minnetje drukt dat hij dan naar de window die d`r onder zit gaat en dat internet dan naar de taakbalk gaat zo iets zou ik willen het is me ooit gelukt maar ik weet `t niet meer..... (heb al googled)
 
Laatst bewerkt:
Het hangt van de window af of hij naar de taakbalk of naar "linkonder" wordt geminimaliseerd.
Ik weet niet precies hoe dat zit. Als de window een toolwindow is of een parent heeft zal hij naar linksonder
gaan (voor zover ik weet).
EDIT: toch iets anders
Je kan hiervoor de WS_EX_APPWINDOW gebruiken.

h is de HWND van de window.

WS_EX_APPWINDOW instellen:
Code:
  long wsex;
  wsex=GetWindowLong(h,GWL_EXSTYLE);
  SetWindowLong(h,GWL_EXSTYLE,wsex |  WS_EX_APPWINDOW);
  SetWindowPos(h,NULL,0,0,0,0,SWP_NOMOVE | SWP_NOZORDER | SWP_NOSIZE);

Om het volgende venster te activeren kan je GetWindow en SetForegroundWindow gebruiken.
Dus na ShowWindow doe je dan zoiets als:
Code:
SetForegroundWindow(    GetWindow(h,GW_HWNDNEXT)    );
 
Laatst bewerkt:
Status
Niet open voor verdere reacties.
Terug
Bovenaan Onderaan