/ Forside / Teknologi / Udvikling / Delphi/Pascal / Nyhedsindlæg
Login
Glemt dit kodeord?
Brugernavn

Kodeord


Reklame
Top 10 brugere
Delphi/Pascal
#NavnPoint
oldwiking 603
jrossing 525
rpje 520
EXTERMINA.. 500
gandalf 460
gubi 270
DJ_Puden 250
PARKENSS 230
technet 210
10  jdjespers.. 200
postmessage 'canclose:= false'
Fra : CykelSmeden fra Aalb~


Dato : 22-07-01 00:19

postMessage(hwnd,wm_syscommand,sc_minimize,0) ;

sender besked til vinduet med hwnd som handle, at det skal minimere.
-- og det virker!

kan nogen hjælpe ved at fortælle hvordan man sender beskeden at 'canclose :=
false'. Altså at winduet ikke kan lukkes.?

finn



 
 
P.L. (22-07-2001)
Kommentar
Fra : P.L.


Dato : 22-07-01 01:03

TForm1 = class(TForm)
..
..
..
..
private
procedure cmQES(var Msg: TMessage); message WM_QUERYENDSESSION;
end;


Procedure TForm1.cmQES(var Msg: TMessage);
begin
Msg.Result:=0 // hvis du ikke vil ha', at windows lukker dit program.
Msg.Result:=1 // hvis det er Ok, at windows lukker dit program.
end;

se iøvrigt: WM_QUERYENDSESSION

P.L.


"CykelSmeden fra Aalborg" <outlook@acnord.SLET.dk> skrev i en meddelelse
news:3b5a0d37$0$283$edfadb0f@dspool01.news.tele.dk...
> postMessage(hwnd,wm_syscommand,sc_minimize,0) ;
>
> sender besked til vinduet med hwnd som handle, at det skal minimere.
> -- og det virker!
>
> kan nogen hjælpe ved at fortælle hvordan man sender beskeden at 'canclose :=
> false'. Altså at winduet ikke kan lukkes.?
>
> finn
>
>



Niels (22-07-2001)
Kommentar
Fra : Niels


Dato : 22-07-01 08:45

Just as I expected, P.L. came up with this:

>> kan nogen hjælpe ved at fortælle hvordan man sender beskeden at 'canclose :=
>> false'. Altså at winduet ikke kan lukkes.?

> procedure cmQES(var Msg: TMessage); message WM_QUERYENDSESSION;

Og hvis det også skal virke når progranmmet bliver lukket "normalt"
(altså ikke kun ved Windows shutdown) skal du lave noget lignende, bare
med WM_CLOSE i stedet for WM_QUERYENDSESSION.

Niels
--
http://www.niller.f2s.com/ - niLLer's pages, that's my software
http://g4s.dnsq.org/ - when I'm online
g4s ad post dot ocm - new email! (note: it's .com !)
ICQ#: 50187323

CykelSmeden fra Aalb~ (22-07-2001)
Kommentar
Fra : CykelSmeden fra Aalb~


Dato : 22-07-01 09:35

I har bare ikke fange pointen:
Jeg vil sende beskeden 'canclose := false' til en ANDEN applikation.
Jeg kan sende beskeden 'vm_close' ved at finde applikationens handle med
findwindow, og sende

postMessage(hwnd,wm_close,0,0) ;

-- og det virker, applikationen lukker (eks wordpad)!

jeg vil sende besked om at programmet ikke må kunne lukkes. Jeg har
eksperimenteret med: GetMenu, GetSystemMenu, InsertMeny, LoadMenu,
ModifyMenu, RemoveMenu. Jeg er overbevist om at det er sidste jeg har brug
for, men kan ikke få det til at virke. - Jeg har ikke megen erfaring med
API/systemkald.


finn

--


"Niels" <g4s@post-and-not-spam.com> skrev i en meddelelse
news:3b5a841f.65920056@news.inet.tele.dk...
> Just as I expected, P.L. came up with this:
>
> >> kan nogen hjælpe ved at fortælle hvordan man sender beskeden at
'canclose :=
> >> false'. Altså at winduet ikke kan lukkes.?
>
> > procedure cmQES(var Msg: TMessage); message WM_QUERYENDSESSION;
>
> Og hvis det også skal virke når progranmmet bliver lukket "normalt"
> (altså ikke kun ved Windows shutdown) skal du lave noget lignende, bare
> med WM_CLOSE i stedet for WM_QUERYENDSESSION.
>
> Niels
> --
> http://www.niller.f2s.com/ - niLLer's pages, that's my software
> http://g4s.dnsq.org/ - when I'm online
> g4s ad post dot ocm - new email! (note: it's .com !)
> ICQ#: 50187323



CykelSmeden fra Aalb~ (09-08-2001)
Kommentar
Fra : CykelSmeden fra Aalb~


Dato : 09-08-01 20:30

Jeg kan se det svar jeg sendte til gruppen ikke er nået frem:
I undgik en lille pointe: Jeg skulle sende meddelsen til 'en fremmed
applikation, ikke min egen.
Iøvrigt er det lykkedes mig med 3-4 linier, hvis andre skulle være
intereseret

finn

"Niels" <g4s@post-and-not-spam.com> skrev i en meddelelse
news:3b5a841f.65920056@news.inet.tele.dk...
> Just as I expected, P.L. came up with this:
>
> >> kan nogen hjælpe ved at fortælle hvordan man sender beskeden at
'canclose :=
> >> false'. Altså at winduet ikke kan lukkes.?
>
> > procedure cmQES(var Msg: TMessage); message WM_QUERYENDSESSION;
>
> Og hvis det også skal virke når progranmmet bliver lukket "normalt"
> (altså ikke kun ved Windows shutdown) skal du lave noget lignende, bare
> med WM_CLOSE i stedet for WM_QUERYENDSESSION.
>
> Niels
> --
> http://www.niller.f2s.com/ - niLLer's pages, that's my software
> http://g4s.dnsq.org/ - when I'm online
> g4s ad post dot ocm - new email! (note: it's .com !)
> ICQ#: 50187323



Thomas Due (10-08-2001)
Kommentar
Fra : Thomas Due


Dato : 10-08-01 07:30

"CykelSmeden fra Aalborg" <skrald@acnord.SLET.dk> wrote in message news:<3b72e488$0$294$edfadb0f@dspool01.news.tele.dk>...
> Jeg kan se det svar jeg sendte til gruppen ikke er nået frem:
> I undgik en lille pointe: Jeg skulle sende meddelsen til 'en fremmed
> applikation, ikke min egen.
> Iøvrigt er det lykkedes mig med 3-4 linier, hvis andre skulle være
> intereseret
>
Lyder interessant. Hvis du vil dele den kode, så post den endelig, ellers
må du meget gerne sende den til tdue@mail.dk.

Mvh
Thomas Due

Thomas Rose (10-08-2001)
Kommentar
Fra : Thomas Rose


Dato : 10-08-01 10:45

Hej alle,

det er faktisk ikke så svært at styre fremmede applikationer. Jeg har f.eks.
lavet en applikation der styrer WinAMP... en slags MP3-browser der bl.a.
organiserer MP3 i bands, tracks og playlists, og gør det meget nemt af finde
bestemte bands og numre - og altså er "integreret" med WinAMP. Programmet er
bl.a. baseret på den dokumentation, der fulgte med de tidligere udgaver af
WinAMP (hvilket den vist ikke gør mere)... her er et lille eksempel.

Først skal vi have et handle på den fremmede applikation... det kræver at
man kender enten navnet for "klassen" eller hoved-vinduet i den fremmede
applikation. Herefter kan man få handlet ved:

var
WinAMPHandle : HWND;
begin
WinAMPHandle := FindWindow('winamp v1.x',nil);

Kig i hjælpen for en beskrivelse af FindWindow... Som det fremgår finder jeg
WinAMP's handle vha. klassenavnet... med handlet i hånden kan jeg poste
beskeder til WinAMP... det kræver dog, at WinAMP kører (da jeg ellers få en
nul-handle tilbage).

Følgende linie vil stoppe WinAMP:

SendMessage(WinAMPHandle, WM_COMMAND, 40047, 0);

Her angiver de "40047" at WinAMP skal stoppe... denne værdi er, sammen med
en række andre, bruger-beskeder defineret i WinAMP... Windows beskeder kan
også bruges.

Dette er naturligvis et meget simpelt eksempel, det er f.eks. noget mere
tricky at overføre et filnavn og få WinAMP til at spille denne... eller
"enqueue" en fil i PlayList'en... hvis folk har interesse kan jeg evt. give
et eksempel på dette.

Håber det kan bringe jer videre,

Mvh.
Thomas

"Thomas Due" <tdue@eon.dk> wrote in message
news:8fa5d0f1.0108092230.54443ca9@posting.google.com...
> "CykelSmeden fra Aalborg" <skrald@acnord.SLET.dk> wrote in message
news:<3b72e488$0$294$edfadb0f@dspool01.news.tele.dk>...
> > Jeg kan se det svar jeg sendte til gruppen ikke er nået frem:
> > I undgik en lille pointe: Jeg skulle sende meddelsen til 'en fremmed
> > applikation, ikke min egen.
> > Iøvrigt er det lykkedes mig med 3-4 linier, hvis andre skulle være
> > intereseret
> >
> Lyder interessant. Hvis du vil dele den kode, så post den endelig, ellers
> må du meget gerne sende den til tdue@mail.dk.
>
> Mvh
> Thomas Due



Niels (10-08-2001)
Kommentar
Fra : Niels


Dato : 10-08-01 22:28

Just as I expected, Thomas Rose came up with this:

>Dette er naturligvis et meget simpelt eksempel, det er f.eks. noget mere
>tricky at overføre et filnavn og få WinAMP til at spille denne... eller
>"enqueue" en fil i PlayList'en... hvis folk har interesse kan jeg evt. give
>et eksempel på dette.

Det ville være rigtig dejligt hvis du kunne fortælle hvordan man gør det
uden at lave et egentlig WinAMP plugin. Man kan jo kun få direkte adgang
til WinAMPs (eller ethvert andet programs) addresseområde hvis man kører
i samme process.

Niels
--
http://www.niller.f2s.com/ - niLLer's pages, that's my software
http://g4s.dnsq.org/ - when I'm online
g4s ad post dot ocm - new email! (note: it's .com !)
ICQ#: 50187323

Thomas Rose (11-08-2001)
Kommentar
Fra : Thomas Rose


Dato : 11-08-01 10:38

Hej allesammen,

as I could never even have suspected, "Niels" came up with this:

> Det ville være rigtig dejligt hvis du kunne fortælle hvordan man gør det
> uden at lave et egentlig WinAMP plugin. Man kan jo kun få direkte adgang
> til WinAMPs (eller ethvert andet programs) addresseområde hvis man kører
> i samme process.

Det er helt korrekt... jeg har faktisk aldrig leget med plug-ins til WinAMP,
men ift. det program jeg selv har lavet tror jeg ikke at en plug-in ville
være sagen... det er en slags browser der overflødiggører at man overhovedet
"rører" ved WinAMP når man bare skal lytte til musik.

Nåh, lad os lege lidt med WinAMP: Det forudsætter at vi har defineret en
funktion, GetWinAMPHandle, der returnerer handlet på WinAMP... det er vist i
mit tidligere indlæg i denne tråd.

Først et eksempel på, hvordan vi kan slette playlisten i WinAMP:

procedure WinAMPClearPlayList;
var
WinAMPHandle : HWND;
begin
// Get WinAMP handle
WinAMPHandle := GetWinAMPHandle;

// Send message to clear playlist (if Handle <> 0)
if WinAMPHandle <> 0 then
SendMessage(WinAMPHandle, WM_USER, 0, 101); //Clear playlist
end;

Nu kan vi lave en procedure, der afspiller en fil ved først at slette
playlisten, derefter indsætter filen i playlisten, og til sidst sætter
WinAMP til at spille:

procedure WinAMPFilePlay(const aFileName: TFileName);
var
CDS : CopyDataStruct;
WinAMPHandle : HWND;
begin
WinAMPHandle := GetWinAMPHandle;

if WinAMPHandle <> 0 then
begin
// Clear the playlist
WinAMPClearPlayList;

// Fill Struct with appropriate data
CDS.dwdata := 100; // This is the enqueue command
CDS.lpdata := PChar(aFileName); // Filename to be enqueued
CDS.cbdata := Length(aFileName) + 1; // Length of the filename

// Enqueue the file
SendMessage(WinAMPHandle, WM_COPYDATA, WPARAM(nil), LPARAM(@cds));
// Set WinAMP to play
SendMessage(WinAMPHandle, WM_USER, 0, 102); // Play
end
else // Do something - eg. report that WinAMP is not running
end;

Tja, det skulle være det. Eksemplet er ikke afprøvet, men da en del af koden
er kopieret fra min egen kildekode, skulle der ikke være problemer... ellers
er i altid velkomne til at spørge.

Cheers,
Thomas



Niels (12-08-2001)
Kommentar
Fra : Niels


Dato : 12-08-01 15:59

Just as I expected, Thomas Rose came up with this:

> SendMessage(WinAMPHandle, WM_COPYDATA, WPARAM(nil), LPARAM(@cds));

Det kunne du bare have sagt fra starten!
Hvorfor vidste jeg ikke man kunne sende en WM_COPYDATA????

Niels
--
http://www.niller.f2s.com/ - niLLer's pages, that's my software
http://g4s.dnsq.org/ - when I'm online
g4s ad post dot ocm - new email! (note: it's .com !)
ICQ#: 50187323

Allan K (12-08-2001)
Kommentar
Fra : Allan K


Dato : 12-08-01 19:25

On Fri, 10 Aug 2001 21:27:59 GMT, g4s@mail.dk (Niels) wrote:

>Det ville være rigtig dejligt hvis du kunne fortælle hvordan man gør det
>uden at lave et egentlig WinAMP plugin. Man kan jo kun få direkte adgang
>til WinAMPs (eller ethvert andet programs) addresseområde hvis man kører
>i samme process.

nullsoft har en NSDN (NullSoft Developer Network) side. Gå ind på
www.winamp.com og så oppe i højre hjørne klik på develop....tadaaa....


--
Med Venlig Hilsen/With Kind Regards
Allan Kjaergaard
website: http://gigashadow.dyndns.org
ICQ: 41749271

CykelSmeden fra Aalb~ (21-08-2001)
Kommentar
Fra : CykelSmeden fra Aalb~


Dato : 21-08-01 18:31

Oups! jeg har ikke været med et stykke tid, men her er den lovede rutine:

disable FREMMED applikations closeknap.

Jeg har bl. a.et bibliotekssystem hvor programmet bare lukker ned når
brugeren ved fejl rarmmer lukkekrydset istedet for minimerknappen i højre
systemmenu. Det samme gælder Sybaseserver på NT, med meget uheldige
følger,når adskillige klienter er igang.

her er løsningen (brugt wordpad som eks):

var
Wapp :integer;
begin
ff:=false;
Wapp:=FindWindow(nil, 'Dokument - WordPad' ); (*her lægges den NØJAGTIGE
caption for det ønskede vindue*)
If Wapp=0
then ShowMessage('wordpad ikke startet')
else
EnableMenuItem( GetSystemMenu( Wapp,false),sc_close,MF_BYCOMMAND or
MF_GRAYED );
end;

programmet kan lægges i en form.create og termineres, eller evt. startes via
en timer for eks. hver 5 min.

skulle nogen kunne udvide så det også sikrer mod alt-f4, er jeg MEGET
interesseret



Søg
Reklame
Statistik
Spørgsmål : 177558
Tips : 31968
Nyheder : 719565
Indlæg : 6408926
Brugere : 218888

Månedens bedste
Årets bedste
Sidste års bedste