Hur får man ett parent form att fånga upp en tryckning från en funktionstangent, t.ex. F1 för att dra igång hjälp, eller t.ex. F3 för att ngt annat. Oavsett om parent formet är aktivt eller inaktivt. Du kan alltid slänga upp en tråd som ligger och lyssnar på tangetnbordet. Anders, Tack Andreas, jag ska labba lite med API anropen <b>RegisterHotKey</b> och <b>UnregisterHotKey</b>. så får vi se om jag kan klura ut hur det funkar. Hum... Är inte de bundna till Operativet? Är själv allergisk mot att skapa apps som kräver APIer från ett fast OS. Men visst om man vill så... Johan, <b>Hum... Är inte de bundna till Operativet?</b> Roggan. Andreas. därför att meddelandena är bundna mot operativet. Johan, Andreas. Johan,Hur få parent form att fånga upp funktionstangentstryckningar.
mvh // AndersSv: Hur få parent form att fånga upp funktionstangentstryckningar.
Mvh JohanSv: Hur få parent form att fånga upp funktionstangentstryckningar.
Det korrekta sättet är att registrera en global hotkey med hjälp av API anropen <b>RegisterHotKey</b> och <b>UnregisterHotKey</b>. Säg till om du behöver lite råd för hur du använder dig av dessa så ska vi se vad vi kan göra (har ingen VB.NET kod för det liggandes just nu).
Tänk på att andra program kan ha registrerat globala hotkeys, t.ex så har windows själv registrerat F1 för hjälp etc. Man kan kombinera sin hotkey med modifers så som control mm.Sv: Hur få parent form att fånga upp funktionstangentstryckningar.
mvh // AndersSv: Hur få parent form att fånga upp funktionstangentstryckningar.
Declare Function RegisterHotKey Lib "user32" (ByVal hwnd As Integer, ByVal id As Integer, ByVal fsModifiers As Integer, ByVal vk As Integer) As Integer
Annars hade jag nog byggt en egen rutin som läser av vad jag trycker på så länge applikationen är öppen och utför det jag vill baserat på de olika knapparna. Har dock inte kodat så mkt win forms så det finns säkert bättre platformsoberoende sätt.
Mvh JohanSv: Hur få parent form att fånga upp funktionstangentstryckningar.
Det här med att inte använda API tycker jag är trams. Hur ofta händer det att du skapar en applikation som du kommer att köra på mer än ett operativsystem? Självklart är det en bedöming man måste göra från applikation till applikation var och vad den skall göra... finns aboslut ingen anlending att krångla till det om det finns ett API och applikationen och är planerat att sjösättas i en Windowsmiljö.Sv: Hur få parent form att fånga upp funktionstangentstryckningar.
om man kör i "WINDOWS.Forms" så har man väl redan där sagt att det är just windows man vill köra
hela det namespacet är ju omöjligt att porta 100% korrekt,
alla kontroller/fönster i windows.forms har ju tex wndproc och createparams metoder som är väldigt väldigt bundna mot just windows.
.net må vara plattformsoberoende , men windows.forms är det garanterat inte..
//Roger
(ok jag vet att go-mono och dotgnu.org har semifungerande winforms implementeringar , men ingen av dom kommer kunna hantera wndproc och createparams korrekt)Sv: Hur få parent form att fånga upp funktionstangentstryckningar.
Vartför skulle de inte kunna göra det?
Mvh JohanSv: Hur få parent form att fånga upp funktionstangentstryckningar.
Du får tycka det är såå mycket trams du vill... För mig finns det dialketer, och så länge de exister utgår jag från att suporta de olika varianterna så mycket det bara går. Det är lojalitet för mig. Men det är upp till var och en att välja hurt lojal man vill varta. Och visst det är kravet bundet till ett OS så kan man binda till det API man vill... Men jag personligen vinner mer på att bygga system som är vänliga för alla andra system nu och i framtiden.
Jag vill att de olika dialekterna skall fungera ihop, och strävar efter det då jag tror det ger en vinst i långa loppet... Att låsa sig ger begränsningar. Vill man ha dem, så bygger man efter dem. men som sagt det är min personliga åsikt. Jag har levt väl på att vara lojal mot alla även de som skull anses som mina fiender, och de hjar vart lojala mot mig, vilket gjort att informationsbytet vart enormt värdefullt.
Så man gör som man själv vill. Jag säger bara att jag skulle byggt det mer platforsmoberoende för ja vill nå flera kunder. Linux får tyvärr en kraftig ökning dag för dag, precis som MS så vill de få in pengar och få vint på det de gör, samma gäller mig. Även om jag är mer lojal mot MS än Linux idag så måste jag ändå tänka ett steg längre. Vad händer den dagn så ev MS inte längre har dominans för att Linux råkat ta över? (Får på ett sätt hoppas att det inte blir så, men på ett annat kanske det är nyttigt för vår verksamhet. Vi måste ju tänka mer på oss själva. Men även om Linx skulle ta över, hoppas jag MS lyckas kontra i näste steg at tåterigen ta över för att skapa en bra balans.)
Jag brinner för .Net så länge jag kan tjäna penger på dess platform är jag glad att den kan fungera på så många kunders krav som möjligt. Så fungerar det.
Mvh JohanSv: Hur få parent form att fånga upp funktionstangentstryckningar.
visst går det säkert emulera vissa meddelanden .
MEN
det finns meddelanden som tex refererar till native GDI resurser ,
och för att kunna emulera de bitarna så måste dom emulera hela windowsgrafikhantering .
möjligt? ja kanske ... troligt? näe
//RogerSv: Hur få parent form att fånga upp funktionstangentstryckningar.
Du tänker nog på tog för snävt här. För det första så snackar du om dialekter, är inte p/Invoke stödet också en del av denna dialekt? Men den med relevanta saken här är att man visst kan använda p/Invoke från sin applikation på ett bra sätt genom att inte direkt anropa API deklaration utan att först wrappa den i en .NET wrapper och flytta dessa till en egen assembly.
Den dagen då du finner att du måste köra din applikation på *nix så är det bara att wrappa om motsvarande native anrop i samma wrapper (samma interface utåt detta) och ersätta assemblyn med den nya och så är det fritt fram.
Det är som du säger, du har nästan ingen erfarenhet av WinForms för då skulle du veta att det finns på tok för många begränsingar där som gör att man måste använda sig av lite API eller lyssna direkt på message pumpen efter specifika meddelanden.
Jag säger inte att man skall hoppa på första bästa API som man hittar om det går att lösa med .NET klasserna, men det är ännu för mycket som inte finns där i (tror inte ens att 2.0 kommer att leverera en tillräckligt bra komplettering -- snarare kring longhorn tiden) som gör att man måste gå "fel" väg.
Med ASP.NET är det en helt annan sak, men visst du kan skriva en webbapplikation som kommer att behöva arbeta väldigt närma med operativsystems tjänsten och då är man på samma ställa igen - p/Invoke.
<b>PS.</b> Jag vill påpeka att jag inte tycker du är tramsig =) utan att hysterin som att inte använda API allt från .NET är tramsig.Sv: Hur få parent form att fånga upp funktionstangentstryckningar.
Kraven är oftast det som bestämmer hur bunden man får vara eller inte vara.
Wrappers fungerar fint, men bara om man vet att de går att ändra på. Så länge man vet att applikationen bara skall köras på Windows så visst då skulle jag oxå använt dess apier och byggt en hel del wrappers. Eller direkt kört DLL import på mina metoder. De winform apps jag byggt har klarat av en hel del utan att jag behövt nyttja Win APIerna. Vad syftar du på att jag inte skulle kunna göra utan att nyttja wrappers? Skall på en skön västkusten semester nu. phu.. äntligen. Jag är mer en utvecklare som föärsöker binda mig så lite som möjligt till att låsa fast mig. Men som sagt jag bygger mest web apps och det finns ju en del förklaringar till varför också. Vi hörs...
Tycker absolut man skall köra med de inbyggda APIer som finns om applikationen endast är tänkt att fungera för ett OS. Som det ser ut nu kan det ju dröja några år innan man ens behöver anpassa dem för mycket för att fungerar för andra system. Det beror ju på applikationen och arkitekturens planderade livslängd. Do what ever you want thats what development is all about! :-)
Take care. Vi hörs när jag är tillbaka om en vecka...
Mvh JohanSv: Hur få parent form att fånga upp funktionstangentstryckningar.
<b>Vad syftar du på att jag inte skulle kunna göra utan att nyttja wrappers?</b>
För att inte göra det långrandigt innan din semester så kan vi nöja oss med PlaySound =) Trevlig semester!!!