- sziku69: Szólánc.
- gban: Ingyen kellene, de tegnapra
- sziku69: Fűzzük össze a szavakat :)
- aquark: Jó platformer játékokat keresek!
- Imilenni: Egy kis depi (szösszenet inkább), remélem elfér itt :) 3#
- Geri Bátyó: Agglegénykonyha 5 – Edények és konyhai eszközök
- Sub-ZeRo: Euro Truck Simulator 2 & American Truck Simulator 1 (esetleg 2 majd, ha lesz) :)
- D1Rect: Nagy "hülyétkapokazapróktól" topik
- Luck Dragon: Asszociációs játék. :)
- aquark: A ló túloldalán (Intel-AMD szivatás)
-
LOGOUT
Ú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
Hirdetés
● olvasd el a téma összefoglalót!
- Netfone
- sziku69: Szólánc.
- Fujifilm X
- Borderlands 4
- Gondolatot olvasna Elon Musk új Neuralink chipje
- Demót kapott a Little Nightmares III
- Az Apple bemutatta az iPhone 17-et
- Nem, nem szünteti be a grafikus vezérlőinek fejlesztését az Intel
- Youtube Android alkalmazás alternatívák reklámszűréssel / videók letöltése
- ASUS ROG Ally
- További aktív témák...
- Microsoft Surface Pro 7 Érintős Szétszedhető Laptop Tablet 12,3" -80% i5-1035G4 8/256 Retina
- Mars Gaming MK60W 60% Mechanikus Blue Switches Gamer Billentyűzet Spanyol Kiosztás
- 2019 - BMW I3S 120Ah
- ASUS ROG Strix G15 144Hz / AMD Ryzen 5 / RTX 3050Ti / 16GB RAM / 512GB SSD
- Microsoft Surface Pro 7+ Érintős Szétszedhető Laptop Tablet 12,3" -80% i5-1135G7 16/256 Retina
- Apple iPhone 16 128GB,Adatkabel,12 hónap garanciával
- HIBÁTLAN Apple Watch Ultra 2 Natural Titanium 49mm -1 ÉV GARANCIA - 100% Akkumulátor, MS3220
- Update 09.22. - Bomba árak 2025-ben is! Üzleti - Consumer laptopok DELL FUJITSU HP LENOVO
- Eredeti Lenovo 230W töltők - 4X20Z83995
- Xiaomi Redmi 14C 128GB, Kártyafüggetlen, 1 Év Garanciával
Állásajánlatok
Cég: PCMENTOR SZERVIZ KFT.
Város: Budapest
Cég: CAMERA-PRO Hungary Kft.
Város: Budapest