- Fájlformátumok a gyakorlatban: ProRes, H.265, AV1
- "3D-s" hővezető csövekkel jön a Cooler Master legfrissebb CPU-hűtője
- Olcsóbb fajtájúnak ígérkező Team Group SSD a PCI Express 5.0-s halmazban
- Több memóriát kapott az RTX PRO 5000 új kiadása
- Obsbot blog: 4K-s produkciós kamera professzionális babérokra törőknek
- AMD K6-III, és minden ami RETRO - Oldschool tuning
- Vezetékes FEJhallgatók
- Milyen asztali (teljes vagy fél-) gépet vegyek?
- Notebook hibák
- HP notebook topic
- AMD Navi Radeon™ RX 9xxx sorozat
- AMD Ryzen 9 / 7 / 5 7***(X) "Zen 4" (AM5)
- Hobby elektronika
- Meghalt a Windows 10, éljen a Windows 10!
- Kezdő fotósok digitális fényképei
-
PROHARDVER!
Ú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!
- Hill Climb Racing 2 bemutató (Android, iOS)
- AMD K6-III, és minden ami RETRO - Oldschool tuning
- Győr és környéke adok-veszek-beszélgetek
- Vezetékes FEJhallgatók
- Milyen asztali (teljes vagy fél-) gépet vegyek?
- iPhone-t használók OFF topikja
- Háztartási gépek
- Így kezdődik a Vampire: The Masquerade - Bloodlines 2
- Feltörték a regisztrációmat vagy elvesztettem a belépési emailcímet, 2FA-t
- Windows 10
- További aktív témák...
- Apple iPhone 15 Pro, 128Gb, független, fekete, 1 év garancia
- AMD Ryzen 5 5600X 6-Core 3.7GHz AM4
- Bomba ár! HP ProBook 430 G3 - i3-6GEN I 4GB I 128SSD I HDMI I 13,3" HD I Cam I W10 I Garancia!
- Bomba ár! HP ProBook 430 G5 - i3-7GEN I 4GB I 128GB SSD I HDMI I 13,3" FHD I Cam I W11 I Garancia!
- Bomba ár! HP EliteBook 845 G11 - Ryzen 5 8540U I 16GB I 512SSD I 14,1" Touch I Cam I W11 I NBD Gari!
- Xiaomi Redmi Note 14 Pro 5G / 8/256GB / Kártyafüggetlen / 12Hó Garancia
- GYÖNYÖRŰ iPhone 13 Pro 256GB Graphite -1 ÉV GARANCIA - Kártyafüggetlen, MS3356
- Bomba Ár! Lenovo ThinkPad P53 - i7-9850H I 16GB I 512SSD I FHD I Nvidia 4GB I W11 I Cam I Garancia!
- BESZÁMÍTÁS! Gigabyte GA-H610M i3 12100F 16GB DDR4 512GB SSD RX 6600 8GB Rampage SHIVA CM 600W
- Xiaomi Redmi 12C 64GB, Kártyafüggetlen, 1 Év Garanciával
Állásajánlatok
Cég: NetGo.hu Kft.
Város: Gödöllő
Cég: PCMENTOR SZERVIZ KFT.
Város: Budapest