-
Fototrend

Új hozzászólás Aktív témák
-
pmonitor
aktív tag
válasz
lenkei83
#16474
üzenetére
Ez esetben a belépésnél el kell küldened a PID-et, vagy a Fő form Handle-jét, és rögzíted az adatbázisban, ha nincs benne. Én a fő form Handle-jét küldeném el, mert ebből is utána lehet nézni a PID-nek. A következő lépés attól függ, hogy mit rögzítesz az adatbázisban. Ha a Fő form Handle-jének WM_DESTROY üzenetet küldesz a SendMessage-el, akkor ugyanazt éred el, mint az application.exit-el(ez "mindent visz"). Ha WM_CLOSE üzenetet küldesz neki, akkor lefut pl. a form Form_Closing eseménye(ebből akár meg is akadályozhatod, hogy bezáródjon a form). Példaként megcsinálhatod a következőt(ha 64 bites wined van). Letöltöd innen a Processx64.rar-t.
Ezután készítesz egy winform alkalmazást, amire rádobsz egy textbox-ot, egy button-t, és egy combobox-ot. Design nézetben elrendezed őket úgy, ahogy akarod. A Form1.vb-ben lévő dolgokat lecseréled erre:Imports System.Runtime.InteropServices
Public Class Form1
Const WM_CLOSE = &H10
Const WM_DESTROY = &H2
Const WM_GETTEXTLENGTH = &HE
<DllImport("user32.dll", CharSet:=CharSet.Auto)>
Public Shared Function SendMessage(ByVal hWnd As IntPtr, ByVal Msg As Integer, ByVal wParam As Integer, ByVal lParam As IntPtr) As IntPtr
End Function
Private Sub Form1_Shown(sender As Object, e As EventArgs) Handles MyBase.Shown
Button1.Text = "Bezárás"
ComboBox1.Items.AddRange(New Object() {"WM_CLOSE", "WM_DESTROY"})
ComboBox1.DropDownStyle = ComboBoxStyle.DropDownList
ComboBox1.SelectedIndex = 0
End Sub
Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
If IsNumeric(TextBox1.Text) Then
Dim WM As Integer
If SendMessage(TextBox1.Text, WM_GETTEXTLENGTH, 0, IntPtr.Zero) Then
If ComboBox1.SelectedIndex = 0 Then
WM = WM_CLOSE
Else
WM = WM_DESTROY
End If
SendMessage(TextBox1.Text, WM, 0, IntPtr.Zero)
Else
MsgBox("Az ablaknak nincs címe!")
End If
End If
End Sub
End ClassEzt lefordítod. Ha minden jól megy akkor le is fordul. Majd megnyitsz egy notepad-ot, és írsz bele valamit. Megnyitod a Processx64.rar-ban lévő .exe-t és megkeresed azt a notepad-ot. Jobb klikk->Ablakok kiválasztása. A megnyíló ablakban megkeresed a Class mezőben a "Notepad"-ot. Ebben a sorban a Hwnd-t átmásolod a lefordított programod textbox-ába. Kiválasztod a combobox-ban a műveletet, majd klikk a button-ra. Itt láthatod a különbséget a WM_CLOSE és a WM_DESTROY között.
Neked ugyanezt kellene csinálnod, csak az adatbázisban tárolt Handle-nek küldeni ezeket.
-
martonx
veterán
válasz
lenkei83
#16475
üzenetére
User ellenőrzés szintjén úgy működhetne, hogy a user aktivitásakor ezt a táblát, amiben a Ture/False-t váltogatod, updatelnél egy mondjuk LastActivity timestamp mezőt.
Azt SQL job meg azt aki aktív, de a LastActivity-je mondjuk fél óránál régebbi, zokszó nélkül átállítja False-ra. -
martonx
veterán
válasz
lenkei83
#16467
üzenetére
Éppen most kezdesz eljutni a felismerésig, hogy ehhez egy alkalmazás szerver fog kelleni. Pedig te csak egy fapados session kezelést szerettél volna. Hát így jön ide az űrhajó.
Egy kókány módszert azért megléphetsz űrhajó építés előtt. Csinálj egy SQL jobot, amit utemezve tudsz futtatni, és az majd átállítja az inaktív usereket. -
martonx
veterán
válasz
lenkei83
#16465
üzenetére
"De malfunction esetén ez akár be is ragadhat, ha pl feladatkezelőn keresztül bezárom a progit." - ez nem így van. Ebben az esetben SQL oldalon is el fog halni elég gyorsan az ide tartozó session. Az adatbázist ugye using-al használod? Azaz automatikusan dispose-oldóik?
És ennek semmi köze Asp.Net hez 
Értem én, hogy valamit alapvetően rosszul írtál meg, és most nem ezt akarod kijavítani, hanem űrhajót építeni köré
Hidd el, mindenkinek jobb lesz, ha a kódodat javítod, ahelyett hogy űrhajót építenél.
SQL session-ök lekérdezése és erőltetett bezárása simán megoldható: KILL SPID command in SQL Server (sqlshack.com)De hidd el, neked nem ez kell, hanem egy jól működő programkód, ami nem hagy szemetet maga után.
-
válasz
lenkei83
#16463
üzenetére
Aktív session kap valami hash-t vagy hasonlót (guid is jó), aztán handshake x időnként, amikor le van csekkolva, hogy ugyanaz a hash mindkét oldalon, aztán ha minden fasza, mehet a következő hash a következő handshakeig.
Így ha bezárod is kliens oldalon, pikkpakk timeoutol serveroldalon, plusz ha bezárod és újranyitod se lesz automatikusan belogolva, mert nem lesz meg az új instance-nek az aktuálisan elvárt hash.
Persze van ennél (sokkal) jobb megoldás is, de ha csak valami olyan kell, ami egyszerű, relative biztonságos és nem eszik sokat, akkor tökéletes ez is.
Ui: Ha ennyire nem kell túlgondolni, akkor meg simán socket close-ra is lehet figyelni és kész.
Új hozzászólás Aktív témák
● olvasd el a téma összefoglalót!
- Racoon City árnyékában: Teszteltük a Resident Evil Requiemet
- Apple MacBook
- Samsung kuponkunyeráló
- MWC 2026: Kezünkben a minden tekintetben európai okostelefon
- Xbox Series X|S
- mefistofeles: Az elhízás nem akaratgyengeség!
- Gitáros topic
- Kerékpárosok, bringások ide!
- Házimozi belépő szinten
- Itt a Galaxy S26 széria: az Ultra fejlődött, a másik kettő alig
- További aktív témák...
- LENOVO ThinkPad Yoga 370,14",FHD, i5-7300U,8GB DDR4,128GB SSD,WIN11,LTE,TOUCH
- 2018 MacBook Air 13 Retina, i5, 256 GB SSD / 8 GB ram, nemrég hőpasztázva + tisztítva, karcmentes,
- LENOVO ThinkPad s3 YOGA 14",i5-5200U,8GB DDR3,256GB SSD, WIN10,TOUCH
- HIHETETLEN! DE ÚJ DOBOZOS LAPTOPOK AKÁR FÉLPÉNZÉRT FÉLÁRON !!! ///////// FÉLPÉNZES LAPTOP //////////
- HP EliteBook 830 G8 11.Gen i5 16/256GB Gyári magyar bill, kb.0 perces, üzletből, 12 hó garanciával
- AKCIÓ! Dell Precision 3571 4G LTE i7-12700H 32GB 1000GB FHD RTX A1000 4GB 1 év teljeskörű garancia
- Apple iPhone 12 Pro / 128GB / Kártyafüggetlen / 12Hó Garancia
- Apple iPhone 14 Pro 128GB,Átlagos,Adatkabel,12 hónap garanciával
- BESZÁMÍTÁS! MSI B650 R7 7700 32GB DDR5 1TB SSD RTX 5070Ti 16GB LIAN LI LANCOOL 207 ADATA 850W
- ÁRGARANCIA!Épített KomPhone Ryzen 5 7500F 32/64GB RAM RTX 5070 12GB GAMER PC termékbeszámítással
Állásajánlatok
Cég: Laptopműhely Bt.
Város: Budapest

És ennek semmi köze Asp.Net hez 
